我尝试使用 cogs 在 Python 中制作一个简单的机器人。但每当我运行我的代码时,它都会说命令未找到,而命令显然在那里。我尝试了所有方法,但找不到任何解决方案。任何帮助都非常感谢
所以我有 2 个文件。一个包含 cog 和 setup 函数,另一个包含 bot 和其他内容。我尝试将 print 语句放入 each 函数中,但我意识到程序从未调用 test_cog.py 文件中的 Test 类的构造函数。
–main_cog.py–
from discord.ext import commands from discord import Intents import os intents = Intents.default() intents.message_content = True bot = commands.Bot(command_prefix=">", intents=intents) @bot.event async def on_ready(): print(f'{bot.user} is running..') bot.load_extension('./cogs/test_cog.py') print("file loaded") bot.run("TOKEN")
–测试_cog.py–
from discord.ext import commands class Test(commands.Cog): def __init__(self, bot): self.bot = bot print("Test cog loaded") @commands.command() async def ping(self, ctx): print("inside ping command") await ctx.send("Pong from Cogs file!") def setup(bot): print("inside setup function") bot.add_cog(Test(bot))
我尝试了互联网上所有可用的方法,但都无济于事。我期望机器人能够无错误地运行并准确响应我的命令。
你的代码看起来大致上是正确的,但可能有几个细节需要检查。你提到“命令未找到”,而且程序似乎没有加载 Test 类的构造函数。让我帮助你逐步排查问题。
Test
bot.load_extension
./cogs/test_cog.py
test_cog.py
cogs
__init__.py
路径区分大小写:确认路径和文件名的大小写正确(Windows 文件系统不区分大小写,但 Linux 和 macOS 会区分)。
目录结构: 请确认你的目录结构类似于下面这样: your_project/ ├── main_cog.py ├── cogs/ │ ├── __init__.py │ └── test_cog.py └── bot.py
your_project/ ├── main_cog.py ├── cogs/ │ ├── __init__.py │ └── test_cog.py └── bot.py
加载扩展: 你在 bot.load_extension 中使用的是 ./cogs/test_cog.py,这实际上应该使用模块路径而不是文件路径。你应该使用类似 cogs.test_cog 的模块路径。
cogs.test_cog
修改为: py bot.load_extension('cogs.test_cog')
py bot.load_extension('cogs.test_cog')
setup
__init__
py def setup(bot): print("Inside setup function") bot.add_cog(Test(bot)) print("Cog added successfully")
from discord.ext import commands from discord import Intents intents = Intents.default() intents.message_content = True bot = commands.Bot(command_prefix=">", intents=intents) @bot.event async def on_ready(): print(f'{bot.user} is running..') # 加载扩展时使用模块路径 bot.load_extension('cogs.test_cog') # 使用 cogs.test_cog 而不是 './cogs/test_cog.py' print("File loaded") bot.run("YOUR_TOKEN")
from discord.ext import commands class Test(commands.Cog): def __init__(self, bot): self.bot = bot print("Test cog loaded") # 这个会在 cog 被加载时打印 @commands.command() async def ping(self, ctx): print("Inside ping command") # 这个会在 ping 命令被触发时打印 await ctx.send("Pong from Cogs file!") def setup(bot): print("Inside setup function") # 这个会在 setup 函数被调用时打印 bot.add_cog(Test(bot)) print("Cog added successfully")
discord.py
sh pip install discord.py
TOKEN 是否有效? 确保你传递给 bot.run() 的 TOKEN 是正确的,且机器人的权限已经正确配置。
bot.run()
TOKEN
如果问题仍然存在: 如果仍然遇到错误,请确保日志和控制台没有其他错误信息,这有助于定位问题所在。
确认你是否在 test_cog.py 中的 setup() 方法中看到打印语句。没有打印出这些信息,说明可能存在文件路径、加载模块或文件访问权限等问题。
setup()
你可以通过手动调试模块加载(例如尝试导入并执行模块)来验证它是否成功加载:
python try: import cogs.test_cog except Exception as e: print(f"Error loading cog: {e}")
希望这些修改能帮助你解决问题!如果问题仍然存在,请提供更多详细的错误日志或信息。