Discord Bot日志无法显示用户消息内容问题求助
Discord Bot消息记录为空的问题排查与修复
问题核心
你使用print(f'{username}: {user_message} ({channel})')记录用户消息时,user_message输出为空,此前@Bot时功能正常,重启程序后失效。
排查与修复步骤
检查消息内容的赋值逻辑
确认user_message变量的来源,比如用Discord.py时,正确的消息内容获取方式是message.content。检查你的代码中,是否误将空字符串或错误变量赋值给了user_message。示例正确赋值逻辑:@client.event async def on_message(message): username = str(message.author) user_message = str(message.content) # 直接从message.content获取 channel = str(message.channel) print(f'{username}: {user_message} ({channel})') # 后续回复逻辑确认Bot的消息权限与意图设置
Discord当前要求必须开启message_content意图才能读取消息内容:- 登录Discord开发者平台,进入你的Bot页面,在「Privileged Gateway Intents」中开启「Message Content Intent」;
- 代码中必须启用该意图,示例:
intents = discord.Intents.default() intents.message_content = True client = commands.Bot(command_prefix='!', intents=intents)
同时检查服务器内Bot的权限,确保它拥有「读取消息历史」「查看频道」的权限,避免因权限缺失导致无法获取消息内容。
排查消息预处理逻辑
如果你的代码中有对消息内容的预处理(比如提取@Bot后的内容),检查是否出现逻辑错误:# 错误示例:若prefix匹配失败会导致user_message为空 prefix = f'<@!{client.user.id}>' if user_message.startswith(prefix): user_message = user_message[len(prefix):].strip() else: user_message = "" # 非@消息直接置空,若prefix格式错误,@消息也会触发此分支可以打印
prefix和user_message的原始值,确认是否匹配正确,或者调整prefix的格式(比如同时兼容<@user_id>和<@!user_id>)。用最简代码复现测试
编写仅包含消息监听和打印的最简代码,排除其他逻辑干扰,验证是否能正常输出消息内容:import discord from discord.ext import commands intents = discord.Intents.default() intents.message_content = True client = commands.Bot(command_prefix='!', intents=intents) @client.event async def on_ready(): print(f'已登录为 {client.user}') @client.event async def on_message(message): if message.author == client.user: return username = message.author.name user_message = message.content channel = message.channel.name print(f'{username}: {user_message} ({channel})') await client.process_commands(message) client.run('你的Bot令牌')
内容的提问来源于stack exchange,提问作者MooseGaming
相关产品推荐
相关产品推荐

