discord.py中on_message事件的消息内容判断失效问题排查
问题解决方法
以下是导致机器人无法检测到"hi"消息的常见原因及对应解决方案:
1. 未开启消息内容意图(Message Content Intent)
discord.py 2.0及以上版本要求必须开启消息内容意图才能读取消息内容,否则机器人无法获取message.content的值。
- 步骤1:登录Discord开发者门户,进入你的应用→机器人页面,找到"Privileged Gateway Intents",开启"Message Content Intent"。
- 步骤2:在代码中初始化Client时传入包含消息内容的意图:
import discord # 初始化意图,开启消息内容权限 intents = discord.Intents.default() intents.message_content = True client = discord.Client(intents=intents) @client.event async def on_message(message): if message.author.bot: return if message.content == 'hi': await message.channel.send("hi")
2. 消息匹配规则过于严格
你的代码是精确匹配字符串'hi',如果用户发送的消息带有空格、大小写不同(比如Hi、hi ),就无法触发。可以修改匹配逻辑,忽略大小写和首尾空格:
@client.event async def on_message(message): if message.author.bot: return # 去除首尾空格并转为小写后匹配 if message.content.strip().lower() == 'hi': await message.channel.send("hi")
3. 未处理命令冲突(若使用命令系统)
如果你的机器人同时使用@client.command()定义了命令,重写on_message会阻止命令处理流程,也可能间接影响消息检测。此时需要在on_message函数末尾添加命令处理代码:
@client.event async def on_message(message): if message.author.bot: return if message.content == 'hi': await message.channel.send("hi") # 必须添加这一行,确保命令能正常执行 await client.process_commands(message)
内容的提问来源于stack exchange,提问作者Water101
相关产品推荐
相关产品推荐

