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

使用discord.py开发机器人无法接收Discord消息求助

Discord机器人无法接收消息的排查与解决

一、确认Intents配置的完整性

  • 先进入Discord开发者门户的Bot页面,找到Privileged Gateway Intents,必须开启Message Content Intent——这是获取消息内容的核心开关,代码设置再正确,门户没开也无法生效。
  • 代码里的Intents要同步配置:
import discord

intents = discord.Intents.default()
intents.message_content = True  # 必须开启此项
intents.messages = True  # 确保消息事件意图启用

bot = discord.ext.commands.Bot(command_prefix="!", intents=intents)

二、检查消息监听逻辑

  • 确保on_message事件函数没有逻辑漏洞:
@bot.event
async def on_message(message):
    if message.author.bot:  # 跳过机器人自身发送的消息
        return
    print(f"用户消息:{message.content}")  # 直接打印消息内容用于排查
    await bot.process_commands(message)  # 使用命令系统时必须添加此行,否则命令无法生效
  • 如果使用的是新的斜杠命令(discord.Bot),要改用@bot.slash_command()装饰器,on_message不会触发斜杠命令事件。

三、权限与角色验证

  • 确认机器人在服务器的角色位置高于其他成员角色,避免权限被服务器设置覆盖
  • 检查服务器权限:确保机器人拥有读取消息历史、发送消息、查看频道这些基础权限(哪怕给了管理员权限,也手动确认一遍)
  • 若需要处理用户信息,需开启成员缓存意图:
intents.members = True

四、代码结构与导入检查

  • main.py要正确初始化并启动机器人:
# main.py
from bot import bot

if __name__ == "__main__":
    bot.run("你的机器人TOKEN")
  • 确认responses.py的函数调用正确,比如在bot.py中:
import responses

@bot.event
async def on_message(message):
    if message.author.bot:
        return
    reply = responses.generate_reply(message.content)
    await message.channel.send(reply)

五、常见排查点

  • 不要漏写await bot.process_commands(message),否则基于@bot.command()的命令不会被处理
  • 验证机器人TOKEN是否正确,有没有过期或输入错误
  • 测试时发送普通文本消息,斜杠命令需要对应监听逻辑,不会触发on_message事件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 14:22:14