如何在discord.py中删除包含指定词表内词汇的用户消息
discord.py 违禁词自动删消息实现与问题排查
配置端排查(无报错不删消息的常见原因)
- 机器人角色位阶必须高于所有需要监管的普通用户角色,位阶低于用户时即便授予管理消息权限也无法执行删除操作
- 检查目标频道的单独权限覆盖规则:如果频道单独给机器人设置了「管理消息」权限为拒绝,服务器全局授予的权限会被覆盖
- 必须在Discord开发者平台的机器人设置页,开启「Message Content Intent」开关,discord.py v2.0及以上版本未开启该权限时,机器人无法获取普通用户的消息明文,会出现无报错但不触发规则的情况
可运行实现代码
import discord from discord.ext import commands # 初始化意图,必须开启message_content intents = discord.Intents.default() intents.message_content = True bot = commands.Bot(command_prefix="!", intents=intents) # 自定义违禁词表,按需修改 BANNED_WORDS = {"违禁词1", "违禁词2", "测试违禁词"} @bot.event async def on_message(message): # 跳过机器人自身的消息,避免循环触发 if message.author.bot: return # 统一转小写,避免大小写绕过检测 content = message.content.lower() # 匹配违禁词 if any(word in content for word in BANNED_WORDS): try: await message.delete() # 可选:私信告知用户 await message.author.send("你发送的消息包含违禁内容,已被自动删除") except discord.Forbidden: # 权限不足时打印日志,方便排查 print(f"无权限删除用户 {message.author.name} 的消息") # 保留命令处理逻辑,不需要命令可以删掉这行 await bot.process_commands(message) bot.run("你的机器人Token")
注意事项
- 建议将
BANNED_WORDS里的词汇统一设为小写,匹配前将消息内容转小写,避免用户通过大小写变体绕过检测 - 如果需要屏蔽图片/附件中的违禁内容,需要额外对接OCR和内容检测接口,本代码仅处理文本消息
- 尽量不要给机器人授予管理员权限,仅授予「管理消息」「发送消息」必要权限即可
内容的提问来源于stack exchange,提问作者Ineedhelplol
相关产品推荐
相关产品推荐

