You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:15:00