我将我的齿轮存储在模块文件夹中,每个齿轮都在其自己的模块子文件夹中。代码如下。模块和我的 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)
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