如何使用齿轮和斜杠命令

问题描述 投票:0回答:2

我正在尝试在单独文件夹中的 cog 文件中使用前缀命令和斜杠命令。

import os
import datetime
import asyncio
import random
from discord.ext import commands
from discord import app_commands
from dotenv import load_dotenv
import discloud

server_id = discord.Object(id=717615951113093130)
app_id = 1068876103009194025

hoje = datetime.datetime.today()
dia, mes, ano = hoje.day, hoje.month, hoje.year
hh, mm, ss = hoje.hour, hoje.minute, hoje.second

class MeuCliente(discord.Client):
    def __init__(self,*,intents:discord.Intents):
        super().__init__(
            application_id=app_id,
            command_prefix="!",
            intents=intents,
            )
        self.tree = app_commands.CommandTree(self)


    async def setup_hook(self):
        await self.load_extension("cogs.dashboard")
        await self.load_extension("cogs.embedcreator")

        self.tree.copy_global_to(guild=server_id)
        await self.tree.sync(guild=server_id) 

bot = MeuCliente(intents=discord.Intents.default())

@bot.event
async def on_ready():
    print(f"{bot.user.name} está online!")

load_dotenv()
TOKEN = os.getenv("DISCORD_TOKEN")

bot.run(TOKEN)

我希望能够在 cog 文件中同时使用前缀命令和斜杠命令,但我无法针对此错误实施解决方法:


  File "f:\BotLand\Ticket 2\main.py", line 29, in setup_hook
    await self.load_extension("cogs.dashboard")
          ^^^^^^^^^^^^^^^^^^^
AttributeError: 'MeuCliente' object has no attribute 'load_extension'
python discord discord.py command discogs-api
2个回答
0
投票

前几天有个类似的问题点我。我对如何设置 main 文件和 cog 做了一个简单的解释。看一下主文件。也许它可以帮助您进行调试。在这种情况下,它是关于前缀命令的。如果你想使用斜杠命令,你必须像这样使用 @app_commands 装饰器:

from discord import app_commands
@app_commands.command(name="blablabla", description='my first slash command')

仔细看看你的问题,我认为你应该尝试像这样实现你的类:

class MeuCliente(commands.Bot):

因为在 discord.py 文档中,“load_extensions”方法被列为 commands.bot 类的方法,而不是 discord.client 类的方法。


0
投票

Cogs 是由 commands.Bot 的实例加载的扩展。所以你的

MeuCliente
类需要继承
commands.Bot
。此外,
commands.Bot
已经有自己的树,所以你不需要创建一个新的。

class MeuCliente(commands.Bot):
    def __init__(self):
        intents = discord.Intents.default()
        intents.message_content = True  # Isso é necessário para usar comandos de texto
        super().__init__(
            command_prefix="!",
            intents=intents,
        )


    async def setup_hook(self):
        await self.load_extension("cogs.dashboard")
        await self.load_extension("cogs.embedcreator")

        self.tree.copy_global_to(guild=server_id)
        await self.tree.sync(guild=server_id) 

bot = MeuCliente()

注意:为了让您的命令同时适用于文本和斜杠,您需要使用 @hybrid_command 装饰器在齿轮旁边定义它们。

© www.soinside.com 2019 - 2024. All rights reserved.