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开发者后台做对应配置,否则依然无法读取消息内容:
- 打开Discord开发者门户,进入你的机器人对应的应用页
- 切换到「Bot」标签页,找到Privileged Gateway Intents板块
- 打开
Message Content Intent旁边的开关,保存页面修改 - 重启机器人即可正常响应hi开头的消息
内容的提问来源于stack exchange,提问作者jxqk
相关产品推荐
相关产品推荐

