You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:46:05