开发Discord聊天机器人遇问题:无消息响应、控制台不打印用户消息
Discord机器人无法响应消息及打印问题的解决方案
问题根源
- 事件嵌套错误:
on_message事件被定义在on_ready事件内部,Discord.py无法识别嵌套的事件处理器,导致消息事件永远不会触发,自然不会执行打印或消息响应逻辑。 - Intent权限不足:默认的
discord.Intents.default()不包含message_content权限,即使事件注册正确,机器人也无法读取消息内容。 - 无用参数冗余:
discord.Client不需要command_prefix参数,这是commands.Bot类的专属配置项,应移除。
修复后的代码
import discord # 配置所需的Intents,开启消息内容读取权限 intents = discord.Intents.default() intents.message_content = True client = discord.Client(intents=intents) @client.event async def on_ready(): print('logged in as {0.user}'.format(client)) # 将on_message事件移至on_ready外部,作为独立的事件处理器 @client.event async def on_message(message): # 过滤机器人自身的消息,避免循环触发 if message.author == client.user: return username = str(message.author).split('#')[0] user_message = str(message.content) channel = str(message.channel.name) print(f'{username}: {user_message} ({channel})') if user_message == 'Hello': await message.channel.send('Howdy!') # 替换为你的机器人TOKEN并启动 client.run('你的机器人TOKEN')
关键修复点说明
- 事件解嵌套:把
on_message从on_ready内部移出,作为单独的@client.event装饰函数,确保Discord.py能正确注册并触发该事件。 - 开启message_content权限:先在Discord开发者门户的机器人页面开启"Message Content Intent"权限,再在代码中设置
intents.message_content = True,保证机器人能读取消息内容。 - 移除冗余参数:删除
discord.Client()中的command_prefix='',消除无效配置。 - 添加自消息过滤:增加
if message.author == client.user: return,避免机器人响应自身发送的消息,防止逻辑循环。
内容的提问来源于stack exchange,提问作者Callmemartin_
相关产品推荐
相关产品推荐

