You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Discord Bot类定义下!coucou命令无法调用的问题求助

解决类写法下Discord机器人命令无法识别的问题

问题根源

在继承commands.Bot的类中定义命令时,必须用@commands.command()装饰器标记方法,否则discord.py无法将其识别为可调用的命令。你非类写法能正常运行,说明之前正确使用了装饰器,但类写法里遗漏了这关键一步。

正确实现代码示例

1. 类定义文件(如bot.py)

import discord
from discord.ext import commands

class MyBot(commands.Bot):
    def __init__(self, command_prefix, intents):
        # 必须调用父类初始化方法,传入前缀和意图配置
        super().__init__(command_prefix=command_prefix, intents=intents)

    # 用装饰器标记该方法为机器人命令
    @commands.command(name="coucou")
    async def coucou(self, ctx):
        # self是类实例引用,ctx是命令上下文,二者参数顺序不能错
        await ctx.send("Coucou ! 😊")

2. 主运行文件main.py

import discord
from bot import MyBot

# 配置机器人权限意图,必须开启message_content才能读取命令消息
intents = discord.Intents.default()
intents.message_content = True

# 实例化机器人,指定命令前缀为!
bot = MyBot(command_prefix="!", intents=intents)

# 替换为你的机器人token并运行
bot.run("YOUR_BOT_TOKEN_HERE")

关键注意事项

  • 类中的命令方法必须以self作为第一个参数,第二个参数为ctx(命令上下文),参数顺序不能颠倒。
  • 装饰器@commands.command()可通过name参数指定命令名,若不指定则默认使用方法名,这里方法名和命令名一致,刚好匹配!coucou。
  • 必须开启message_content意图,否则机器人无法读取用户发送的命令消息,会出现看似命令未被识别的情况。
  • 初始化子类时一定要调用父类的__init__方法,传入command_prefix和intents等必要参数,否则机器人核心功能无法正常工作。

额外排查点

如果按上述写法仍无法触发命令,检查以下内容:

  • 机器人在服务器中是否拥有读取消息和发送消息的权限。
  • 机器人token是否正确,没有过期或输入错误。
  • 发送命令时的前缀是否和代码中指定的一致(这里是!,注意不要打错符号)。

内容的提问来源于stack exchange,提问作者Toniixav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 23:52:34