discord.py self-bot仅回复自身消息 无法响应其他账号消息问题
问题根因
- 初始化bot实例时未正确配置
intents权限,默认配置下selfbot仅能捕获自身账号触发的事件,无法接收频道内其他账号发送的消息,这是其他账号发消息无响应的核心原因。 - 代码存在冗余逻辑:每次触发事件都硬编码调用
bot.get_channel()获取频道对象,既没必要,还可能因为缓存问题取不到正确的频道实例。 - 缺少防循环判断:如果不做过滤,selfbot发送的"hi!"也会触发
on_message事件,极易造成无限发消息的循环。 - 额外提示:Discord官方服务条款明确禁止使用selfbot,使用过程中存在账号被封禁的风险。
修复步骤
- 先配置正确的intents再初始化bot,注意跑selfbot请使用专门适配selfbot的衍生库(如discord.py-self),原版官方discord.py对selfbot做了使用限制,会出现功能异常。初始化代码参考:
import discord # 适配selfbot的衍生库导入写法和官方discord.py一致 intents = discord.Intents.default() intents.message_content = True # 开启消息内容读取权限 intents.guild_messages = True # 开启服务器公共频道消息接收权限 # 初始化bot时传入配置好的intents bot = discord.Client(intents=intents) # 如果使用commands.Bot扩展,初始化时同样传入intents参数即可
- 修正
on_message事件的处理逻辑,修复后代码如下:
@bot.event async def on_message(message): # 过滤自身发送的消息,避免无限回复循环 if message.author == bot.user: return # 匹配消息内容 if message.content == "hello": # 直接使用消息所属的频道对象发送回复,不需要硬编码查询频道 await message.channel.send("hi!")
内容的提问来源于stack exchange,提问作者StormaS
相关产品推荐
相关产品推荐

