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

Discord.py首个命令正常,第二个命令失效如何修复?

嘿,我帮你排查下问题哈!你的bb!support命令失效,核心原因是你重复定义了on_message事件处理函数,另外还要确认消息内容权限是否配置正确,具体解决步骤如下:

问题根源

在Discord.py里,如果你用@client.event多次装饰on_message函数,只有最后一个定义的函数会被机器人实际执行,之前的会被直接覆盖。你现在的代码里,第一个on_message处理bb!help,第二个处理bb!support——虽然你说bb!help能运行,大概率是你还有其他地方实现了help命令(比如用命令装饰器),但bb!support的逻辑因为事件覆盖或者权限问题没触发。

解决方案一:合并on_message逻辑

把两个命令的判断逻辑放到同一个on_message函数里,避免事件覆盖:

@client.event
async def on_message(message):
    if message.author == client.user:
        return
    
    # 处理bb!help命令
    if message.content.startswith('bb!help') and isinstance(message.channel, discord.DMChannel):
        await message.channel.send('XXXXXXX')
    
    # 处理bb!support命令
    if message.content.startswith('bb!support') and isinstance(message.channel, discord.DMChannel):
        await message.channel.send('XXXXXXX')

解决方案二:改用命令装饰器(更推荐)

Discord.py提供了更规范的命令装饰器写法,不容易出现事件冲突问题,代码也更清晰:

import discord
from discord.ext import commands

# 配置机器人意图,必须开启message_content才能读取消息内容
intents = discord.Intents.default()
intents.message_content = True
intents.dm_messages = True  # 确保能接收DM频道的消息

# 初始化机器人,指定命令前缀为bb!
bot = commands.Bot(command_prefix='bb!', intents=intents)

@bot.command()
async def help(ctx):
    # 判断是否在DM频道
    if isinstance(ctx.channel, discord.DMChannel):
        await ctx.send('XXXXXXX')

@bot.command()
async def support(ctx):
    if isinstance(ctx.channel, discord.DMChannel):
        await ctx.send('XXXXXXX')

# 运行机器人,替换成你的令牌
bot.run('你的机器人令牌')

关键配置检查

别忘了在Discord开发者门户的Bot选项卡里,开启Message Content Intent这个特权网关意图——如果没开,机器人根本读不到消息内容,自然无法识别命令前缀。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:24:01