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

Discord机器人执行命令无响应问题排查求助

Discord机器人无响应的原因及修复方案

核心问题

你同时创建了两个Discord客户端实例:自定义的MyClient(继承discord.Client)和commands.Bot实例bot,但最终启动的是MyClient的client实例,bot相关的命令逻辑完全没有被执行,因此机器人不会响应任何消息。

另外,若使用commands.Bot并自定义on_message事件,还需调用await bot.process_commands(message),否则命令系统无法处理前缀触发的指令(这是次要问题,核心错误是启动了错误的实例)。

修复后的代码

import discord
from discord.ext import commands

# 配置意图:discord.py v2.x版本后需明确开启message_content权限
intents = discord.Intents.default()
intents.message_content = True
intents.guilds = True

# 直接使用commands.Bot,无需额外继承discord.Client(它本身是Client的子类)
bot = commands.Bot(command_prefix='$', intents=intents)

@bot.event
async def on_ready():
    print(f'Logged on as {bot.user}!')

# 自定义on_message时,必须调用process_commands才能让命令系统正常工作
@bot.event
async def on_message(message):
    await bot.process_commands(message)
    if message.content.startswith('$hello'):
        await message.channel.send('Hello!')

# 更推荐使用框架标准的命令定义方式
@bot.command()
async def hello(ctx):
    await ctx.send('Hello!')

# 启动Bot实例,而非自定义的Client
bot.run('TOKEN')

关键修复点

  1. 移除冗余的MyClient类:commands.Bot已经整合了客户端连接和命令管理功能,无需重复实现基础客户端。
  2. 调整意图配置:确保开启message_content意图,同时在Discord开发者门户的Bot页面开启对应权限。
  3. 补充命令处理逻辑:自定义on_message时添加await bot.process_commands(message),保证装饰器定义的命令能被触发。
  4. 采用标准命令定义:@bot.command()是discord.py推荐的命令写法,比手动判断消息前缀更稳定可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:04:54