为什么我的 Discord 机器人没有加载存储在 cogs 中的任何命令?

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

我将我的齿轮存储在模块文件夹中,每个齿轮都在其自己的模块子文件夹中。代码如下。模块和我的 main.py 文件(下面的代码所在的文件)都位于同一文件夹中,因此我不需要模块的完整路径。所有齿轮均命名为 cog.py,因此这也不应该成为问题。

from dotenv import load_dotenv
import discord
import os
from discord.ext.commands import Bot
from discord.ext import commands

dotenv_path = os.path.join(os.path.dirname(__file__), 'temp.env')
load_dotenv(dotenv_path)
 


client = commands.Bot(command_prefix="#",intents =discord.Intents.all()) 

@client.event
async def on_ready():
  print("We have logged in as {0.user}".format(client))

for folder in os.listdir("modules"):
  if os.path.exists(os.path.join('modules', folder, 'cog.py')):
    client.load_extension(f"modules.{folder}.cog")

token = os.getenv('TOKEN')
if token is not None:
    client.run(token)
else:
    print("Error: TOKEN environment variable is not set")


我尝试粘贴模块的完整文件路径,但没有成功。我期望它能够识别齿轮和其中的命令,但每当我尝试调用其中一个命令时,我都会收到“错误discord.ext.commands.bot 忽略命令中的异常 None” Discord.ext.commands.errors.CommandNotFound:命令“ping”未找到”(我尝试调用的命令只是称为 ping)

python discord.py
1个回答
0
投票

client.load_extension
是一个协程,这意味着你必须
await
它。

await client.load_extension('...')

但是,你不能在全局范围内

await
discord.py
引入了一个新函数来帮助我们加载名为
Bot.setup_hook
的扩展,这里有一个小片段:

async def setup_hook():
    for folder in os.listdir("modules"):
        if os.path.exists(os.path.join('modules', folder, 'cog.py')):
            await client.load_extension(f"modules.{folder}.cog")


client.setup_hook = setup_hook
© www.soinside.com 2019 - 2024. All rights reserved.