discord.py使用on_message无法获取新消息,非管理员服务器如何解决?
解决Discord机器人在无管理员权限服务器中获取新消息的问题
核心问题拆解
你遇到的情况分为两部分:无管理员权限无法添加机器人到服务器,以及添加后确保机器人能获取消息内容,以下是具体解决步骤:
1. 让服务器管理员协助添加机器人
你自己没有目标服务器的管理员权限时,必须联系该服务器拥有「管理服务器」权限的成员,让他们完成机器人的添加操作:
- 在Discord开发者门户的OAuth2 URL Generator页面,生成正确的授权链接:
- 勾选Scopes里的
bot(如果需要用斜杠命令,可额外勾选applications.commands) - 在Bot Permissions中,只勾选必要权限:
查看频道:确保机器人能看到目标频道读取消息历史:可选,但建议勾选以兼容历史消息读取需求- 不要勾选「管理员」这类高权限,降低管理员的授权顾虑
- 勾选Scopes里的
- 把生成的链接发给服务器管理员,让他们访问链接并完成机器人的授权加入。
2. 确保机器人的意图和权限配置正确
机器人成功加入服务器后,还要确认以下配置,否则无法正常获取消息:
- 开发者门户配置:进入Bot页面,找到「Privileged Gateway Intents」,开启
Message Content Intent(仅代码中设置intents不生效,必须在门户开启) - 服务器频道权限:让管理员在目标频道的权限设置中,给机器人分配「查看频道」和「读取消息历史」权限;如果是私有频道,还要确保机器人被添加到频道的权限列表中
- 代码验证:你当前的intents设置是正确的,保留即可:
intents = discord.Intents.default() intents.messages = True intents.message_content = True
3. 验证机器人运行状态
机器人加入服务器后,重启代码:
- 控制台打印
Logged in as {机器人账号}后,在目标频道发送消息,检查控制台是否能输出消息内容和频道信息 - 如果仍无反应,让管理员检查机器人的角色权限是否被频道的权限设置覆盖(比如频道设置了拒绝机器人查看)
内容的提问来源于stack exchange,提问作者祝靖雲
相关产品推荐
相关产品推荐

