Discord Bot的on_message方法无法识别'haki.'命令前缀问题
解决Discord Bot无法响应消息的问题
核心问题与修复步骤
1. 开启消息内容读取权限(Intents)
discord.py 2.0版本后,必须显式开启message_content意图才能读取用户消息内容,默认的Intents.default()不包含该权限。
修改Intents配置代码:
intents = discord.Intents.default() intents.message_content = True # 开启消息内容权限 client = discord.Client(intents=intents)
同时需要在Discord开发者门户的Bot页面,找到「Privileged Gateway Intents」,开启Message Content Intent开关,否则代码设置无效。
2. 修正消息发送逻辑
原代码中await message.channel.send(message)错误,send()方法需要传入字符串而非Message对象。需要提取前缀后的内容进行回复:
@client.event async def on_message(message): if message.author == client.user: # 跳过Bot自身消息 return if message.content.startswith(command_prefix): # 截取前缀后的内容 reply_content = message.content[len(command_prefix):].strip() await message.channel.send(reply_content)
完整可运行代码
import discord token = "mydiscordbottoken" # 配置Intents intents = discord.Intents.default() intents.message_content = True client = discord.Client(intents=intents) command_prefix = "haki." @client.event async def on_ready(): print('{0.user} BOT is ready'.format(client)) @client.event async def on_message(message): if message.author == client.user: return if message.content.startswith(command_prefix): reply_content = message.content[len(command_prefix):].strip() await message.channel.send(reply_content) client.run(token)
额外检查项
- 确保Bot在目标服务器拥有「发送消息」和「读取消息历史」的权限
- 确认Discord开发者门户中已正确开启Message Content Intent
内容的提问来源于stack exchange,提问作者Charnel
相关产品推荐
相关产品推荐

