selfbot中message.content或ctx.content无法正常运行问题咨询
故障诱因
- 核心原因是Discord API v10及更高版本默认关闭消息内容访问权限,未显式配置
message_content权限的情况下,所有消息的content字段都会返回空字符串,普通机器人和用户SelfBot都会触发该限制。 - 代码存在潜在逻辑问题:
channel变量仅在获取到指定ID的服务器时才会被赋值,若代码运行环境不在目标服务器中,channel未定义会直接抛出运行错误,也可能间接导致消息内容读取相关逻辑执行异常。 - 变量名使用不规范:
on_message事件的默认接收参数为消息对象message,ctx通常为命令框架的上下文对象,虽然变量名本身不影响属性取值,但如果同时使用discord.py的命令扩展功能,可能出现对象混淆导致属性读取失败。
修复方案
- 第一步:版本适配与权限开启
- 若使用discord.py v1.x及更低版本,先升级到v2.0及以上版本,升级命令:
pip install -U discord.py - 普通机器人前往Discord开发者后台,在对应应用的「Bot」设置页打开「Message Content Intent」开关;SelfBot无需后台操作,直接在代码中配置intents即可。
- 初始化Client时显式声明启用
message_content权限,参考代码:
import discord intents = discord.Intents.default() intents.message_content = True intents.guilds = True intents.messages = True client = discord.Client(intents=intents) - 若使用discord.py v1.x及更低版本,先升级到v2.0及以上版本,升级命令:
- 第二步:修正事件代码逻辑缺陷,补全非空判断,规范变量命名,修正后的代码如下:
@client.event async def on_message(message): if message.author == client.user: return # 提前校验目标服务器和频道是否存在,避免运行报错 target_guild = client.get_guild(544102306740699136) target_channel = client.get_channel(875779623638663192) if not target_guild or not target_channel: return await target_channel.send(f"{message.author.mention} just send message in channel {message.channel.mention}: {message.content}")
- 补充提示:SelfBot属于Discord官方明确禁止的使用方式,持续使用存在账号被永久封禁的风险。
内容的提问来源于stack exchange,提问作者TORI
相关产品推荐
相关产品推荐

