我正在尝试在单独文件夹中的 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'
前几天有个类似的问题点我。我对如何设置 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 类的方法。
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 装饰器在齿轮旁边定义它们。