discord.py 广告屏蔽功能失效?频道推广链接自动删除代码不生效
discord.py 推广链接自动屏蔽功能失效排查
常见的失效触发点有3个,按优先级从高到低排列:
- 未开启消息内容特权意图:discord.py 2.0及以上版本默认关闭
message_content网关意图,没有这个权限的bot无法读取普通频道消息的实际文本,所有基于消息内容的判断逻辑完全不会触发。 - Bot实例初始化时未加载对应意图:仅在Discord开发者门户开启意图开关不够,代码里初始化Bot对象时如果没有显式声明需要消息内容权限,程序运行时依然无法获取消息文本。
- 频道权限不足:bot在目标频道没有「管理消息」权限时,即便检测到了推广链接,调用删除接口时会直接抛出权限报错,无法完成删除操作。
修复方案
- 登录Discord开发者后台,进入对应Bot的设置页,在「Bot」板块的Privileged Gateway Intents区域,打开
Message Content Intent开关并保存。 - 修改代码逻辑,补充意图加载、自循环拦截、权限校验的逻辑,完整可运行的代码参考如下:
import discord from discord.ext import commands # 显式初始化网关意图 intents = discord.Intents.default() intents.message_content = True Bot = commands.Bot(command_prefix="!", intents=intents) @Bot.event async def on_message(message): # 拦截Bot自身发送的消息,避免检测逻辑自触发形成死循环 if message.author.bot: return # 检测推广链接 if "discord.gg" in message.content.lower(): # 校验Bot是否有当前频道的管理消息权限 guild = message.guild if guild and message.channel.permissions_for(guild.me).manage_messages: await message.delete() await message.channel.send("Luften Reklam Yapmaurn!") # 保证指令处理流程不被拦截 await Bot.process_commands(message)
额外注意事项
- 不要遗漏
Bot.process_commands(message)调用,否则事件重写后所有注册的指令都会完全失效。 - 检测规则可以根据需求扩展,比如把广告关键词做成列表,遍历列表匹配消息内容,不用写多组重复判断。
内容的提问来源于stack exchange,提问作者Ayberk Hekim
相关产品推荐
相关产品推荐

