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

discord.py开发的Discord机器人自定义help等命令不生效如何解决?

问题原因

你自定义on_message事件处理函数的操作覆盖了discord.py内置的默认on_message逻辑,而内置逻辑默认会执行前缀匹配、触发对应自定义命令的操作,因此包括!help在内的所有自定义命令都会失效。

修复方案

方案1:在自定义on_message末尾添加命令处理调用

这是最高效的修复方式,仅需在你已编写的on_message函数所有逻辑执行完成后,新增一行调用内置命令处理的代码即可,示例如下:

@bot.event
async def on_message(message):
    # 跳过机器人自身发送的消息,避免死循环,建议保留
    if message.author.bot:
        return

    # 你原有实现角色分配的逻辑保留在这里
    if message.channel.id == 你指定的频道ID and 你的消息类型判断规则:
        target_role = message.guild.get_role(要分配的角色ID)
        await message.author.add_roles(target_role)
    
    # 新增下面这行代码,即可恢复所有自定义命令的响应能力
    await bot.process_commands(message)

方案2:使用监听装饰器注册角色分配逻辑

如果你不想修改原有自定义命令的处理逻辑,可以不用@bot.event重写on_message,改用@bot.listen('on_message')注册独立的消息监听逻辑,不会覆盖内置的命令处理流程,示例如下:

@bot.listen('on_message')
async def auto_assign_role(message):
    if message.author.bot:
        return
    # 这里直接写你的角色分配逻辑即可,不需要额外添加命令处理代码
    if message.channel.id == 你指定的频道ID and 你的消息类型判断规则:
        target_role = message.guild.get_role(要分配的角色ID)
        await message.author.add_roles(target_role)

补充注意事项

如果修复后命令仍然无法响应,请检查你是否在Discord开发者后台的机器人设置页开启了Message Content Intent权限,discord.py v2.0及以上版本需要该权限才能读取消息内容、匹配前缀命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:45:04