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

Python Discord机器人发送消息时控制台输出"Empty message"的修复方案

问题分析与解决方案

核心原因方向

  • 消息内容提取出错:代码获取的消息内容为空字符串,可能是权限未开启或逻辑写错
  • 命令前缀处理有问题:机器人未正确识别命令前缀,把无效输入当成空命令
  • 消息监听逻辑有漏洞:比如误过滤了有效消息,或未正确读取message.content

排查修复步骤

1. 确认消息内容是否能正常获取

在消息监听事件里加调试打印,查看实际收到的消息内容:

@client.event
async def on_message(message):
    print(f"实际收到的消息: '{message.content}'")
    # 原有代码逻辑...

如果打印结果为空,但你确实发送了命令,大概率是机器人无读取消息内容的权限。去Discord开发者门户找到你的机器人,在Privileged Gateway Intents中开启Message Content Intent,同时代码里也要启用该权限:

intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)

2. 检查命令前缀处理逻辑

如果用前缀(比如!)触发命令,排查是否在提取命令时丢失了内容:

prefix = "!"
if message.content.startswith(prefix):
    command = message.content[len(prefix):].strip()
    # 增加空命令判断,避免无效处理
    if not command:
        await message.channel.send("请输入有效命令!")
        return
    # 命令处理逻辑...

3. 校验响应函数的输入合法性

如果responses.py中的响应函数依赖非空输入,调用前先做校验:

# 调用响应函数前的判断
user_input = message.content.strip()
if not user_input:
    await message.channel.send("输入不能为空!")
    return
response = get_response(user_input)
await message.channel.send(response)

4. 排查消息过滤逻辑

检查是否有代码误过滤了有效消息,比如忽略机器人消息的逻辑写错:

@client.event
async def on_message(message):
    # 正确写法:仅忽略机器人自身发送的消息
    if message.author.bot:
        return
    # 原有逻辑...

避免写成if message.author: return,这种错误会过滤掉所有消息。

总结

先通过调试打印确认实际收到的消息内容,优先排查权限问题(开启Message Content Intent),再检查命令提取和响应逻辑中的空值判断,确保有效命令能被正确识别处理。

内容的提问来源于stack exchange,提问作者vaclavak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:35:24