Discord Bot调用message.content输出空字符串,求排查解决方法
问题排查:Discord Bot获取消息内容为空的原因
以下是几种可能导致message.content返回空字符串的情况及解决方法:
消息本身不含纯文本内容
如果目标消息仅包含图片、文件、嵌入卡片或自定义表情,message.content就会是空字符串。可以在代码中添加额外验证逻辑确认:@client.event async def on_message(message): if message.channel.id == 你的频道ID: print(colored(message.content, 'green')) # 检查消息是否有附件 if message.attachments: print(f"存在附件: {[att.filename for att in message.attachments]}") # 检查消息是否有嵌入内容 if message.embeds: print(f"存在嵌入内容: {len(message.embeds)}个")discord.py版本与意图配置不兼容
在discord.py v2.0及以上版本中,Message Content Intent需要单独显式开启。你当前代码中先定义了intents变量但未使用,直接调用Intents.all()虽然理论上包含该意图,但统一配置更稳妥。修改代码如下:intents = discord.Intents.default() intents.members = True intents.messages = True intents.message_content = True # 必须显式开启消息内容意图 client = discord.Client(intents=intents)确保Discord开发者门户中已开启
Message Content Intent,同时保持代码与后台配置一致。频道ID匹配错误或消息来自线程频道
若你填写的是父频道ID,但消息实际发送在该频道下的子线程中,message.channel.id会对应线程ID而非父频道ID。如果恰好线程中有空消息,就会出现打印空字符串的情况。请确认目标消息所在频道的ID是否准确。未过滤机器人自身消息
如果你的Bot自己发送了空内容消息,on_message事件会捕获到这条消息并打印空字符串。可以在事件开头添加过滤逻辑:@client.event async def on_message(message): if message.author == client.user: return # 跳过Bot自身发送的消息 if message.channel.id == 你的频道ID: print(colored(message.content, 'green'))
内容的提问来源于stack exchange,提问作者Nikos Sakellariou
相关产品推荐
相关产品推荐

