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

Discord机器人登录正常但on_message事件无法响应消息问题求助

问题排查

你的代码存在4个核心问题,导致消息监听逻辑完全不生效:

  • 导入语句错误:第一行写的from discord import client仅导入了discord库下的client类,没有导入discord模块本身,后续调用discord.Client()本身就存在命名异常。
  • 事件绑定对象错误:你先创建了一个基础discord.Client()实例,把on_message事件注册到了这个从未启动的实例上;后续又重新创建自定义的MyClient实例执行run(),实际运行的机器人实例根本没有绑定消息监听逻辑,自然不会响应任何消息。
  • 缺少必要权限声明:discord.py 2.0及以上版本默认关闭消息内容读取权限,既需要在代码里声明intents,也需要在开发者后台开启对应开关,否则机器人根本拿不到用户发送的消息文本。
  • 缺少自身消息过滤逻辑:如果不加判断,机器人回复的"hi"也会触发on_message事件,最终陷入无限发消息的死循环。
修复后完整代码
import discord

# 自定义客户端类
class MyClient(discord.Client):
    async def on_ready(self):
        print(f'Logged on as {self.user}!')

    # 直接在类内定义on_message方法,不需要额外用@client.event装饰
    async def on_message(self, message):
        # 跳过机器人自己发的消息,避免无限循环
        if message.author == self.user:
            return
        # 匹配hi开头的消息
        if message.content.startswith('hi'):
            await message.channel.send('hi')

# 实例化客户端时显式声明默认intents
client = MyClient(intents=discord.Intents.default())
# 替换为你的真实机器人token
client.run('MYTOKEN')
必做配置项

代码修改完成后还需要在Discord开发者后台做对应配置,否则依然无法读取消息内容:

  1. 打开Discord开发者门户,进入你的机器人对应的应用页
  2. 切换到「Bot」标签页,找到Privileged Gateway Intents板块
  3. 打开Message Content Intent旁边的开关,保存页面修改
  4. 重启机器人即可正常响应hi开头的消息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.05 16:15:46