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

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意图才能读取消息内容:

    1. 登录Discord开发者平台,进入你的Bot页面,在「Privileged Gateway Intents」中开启「Message Content Intent」;
    2. 代码中必须启用该意图,示例:
      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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:40:39