小能豆

无法在 discord、py 中向 Cog 添加命令

py

我尝试使用 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))

我尝试了互联网上所有可用的方法,但都无济于事。我期望机器人能够无错误地运行并准确响应我的命令。


阅读 16

收藏
2024-12-11

共1个答案

小能豆

你的代码看起来大致上是正确的,但可能有几个细节需要检查。你提到“命令未找到”,而且程序似乎没有加载 Test 类的构造函数。让我帮助你逐步排查问题。

常见问题排查

  1. 路径问题:
    bot.load_extension 中,你使用的是 ./cogs/test_cog.py,确保:
  2. test_cog.py 文件的路径是正确的。
  3. 如果你在 cogs 文件夹中使用了 __init__.py 文件,它应该位于根目录下,并且该文件夹应该被正确识别为模块。
  4. 路径区分大小写:确认路径和文件名的大小写正确(Windows 文件系统不区分大小写,但 Linux 和 macOS 会区分)。

  5. 目录结构:
    请确认你的目录结构类似于下面这样:
    your_project/ ├── main_cog.py ├── cogs/ │ ├── __init__.py │ └── test_cog.py └── bot.py

  6. 加载扩展:
    你在 bot.load_extension 中使用的是 ./cogs/test_cog.py,这实际上应该使用模块路径而不是文件路径。你应该使用类似 cogs.test_cog 的模块路径。

修改为:
py bot.load_extension('cogs.test_cog')

  1. 调试输出:
    你提到没有看到 Test 类构造函数的打印语句。你可以通过在 setup 函数和类的 __init__ 方法中加入更多的打印语句来进一步确认加载过程。例如:
    py def setup(bot): print("Inside setup function") bot.add_cog(Test(bot)) print("Cog added successfully")

完整修正后的代码

main_cog.py

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")

test_cog.py

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")

可能的其他问题

  1. Python 环境和包问题:
    确保你在正确的 Python 环境中运行,并且已经安装了所有依赖(比如 discord.py)。

sh pip install discord.py

  1. TOKEN 是否有效?
    确保你传递给 bot.run()TOKEN 是正确的,且机器人的权限已经正确配置。

  2. 如果问题仍然存在:
    如果仍然遇到错误,请确保日志和控制台没有其他错误信息,这有助于定位问题所在。

进一步的调试

  1. 确认你是否在 test_cog.py 中的 setup() 方法中看到打印语句。没有打印出这些信息,说明可能存在文件路径、加载模块或文件访问权限等问题。

  2. 你可以通过手动调试模块加载(例如尝试导入并执行模块)来验证它是否成功加载:

python try: import cogs.test_cog except Exception as e: print(f"Error loading cog: {e}")

希望这些修改能帮助你解决问题!如果问题仍然存在,请提供更多详细的错误日志或信息。

2024-12-11