Discord.py开发消息抓取机器人获取非自身/被@消息内容为空如何解决
问题原因
- Discord从2022年开始对所有API接入方施加消息内容访问限制:默认仅能获取**@你的消息、你自己发送的消息**的明文内容,其余普通群聊、非提及你的私信消息的
content类字段都会返回空字符串,和你调用哪个属性无关。 - 你的代码未显式声明消息相关的访问意图,且如果你使用的是个人用户账号登录(即代码中
bot=False的自机器人场景),该限制为Discord强制限制,无官方解除渠道。
解决方法
场景1:使用官方注册的机器人账号(推荐,符合平台规则)
- 首先修改初始化Bot的代码,显式开启消息内容访问权限:
import discord from discord.ext import commands # 声明所需权限,核心开启message_content意图 intents = discord.Intents.default() intents.messages = True intents.message_content = True bot = commands.Bot(command_prefix='', intents=intents) @bot.event async def on_ready(): print("ready") @bot.event async def on_message(message): print(message) print(message.clean_content) print(message.system_content) print(message.content) bot.run(你的机器人token) # 移除bot=False参数,填入官方机器人账号的token
- 登录Discord开发者后台,进入对应机器人应用的「Bot」设置页,在Privileged Gateway Intents分类下开启
Message Content Intent开关,保存后重启机器人即可正常获取所有消息内容。
场景2:使用个人用户账号(自机器人)
- 注意:自机器人违反Discord服务条款,检测到会直接封禁你的个人账号,不建议使用。
- 若必须使用,可将discord.py降级到1.7.3及以下版本,该版本发布早于Discord消息内容限制生效时间,部分场景可绕过限制获取内容,但账号封禁风险极高。
内容的提问来源于stack exchange,提问作者uga gams
相关产品推荐
相关产品推荐

