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

如何让Discord机器人在版主删除消息时发送通知?

解决Discord机器人仅在版主删除消息时发送通知的问题

要实现仅在版主删除消息时触发通知,核心是通过**审核日志(Audit Log)**判断消息的删除者身份,区分普通用户自删和版主删帖。以下是针对discord.py 2.0+版本的实现方案:

核心逻辑说明

  • 用户自行删除自己的消息时,Discord默认不会生成审核日志记录;若服务器开启了全量审核日志,记录的执行者就是消息作者本人,可直接排除。
  • 版主删除他人消息时,会生成message_delete类型的审核日志,我们需要获取这条日志,验证删除者是否拥有版主权限(如manage_messages),且删除者不是消息作者。

修改后的代码实现

import discord
from discord.ext import commands

# 初始化机器人,配置必要的意图
intents = discord.Intents.default()
intents.message_content = True  # 需开启消息内容意图
intents.messages = True
intents.guilds = True
intents.members = True  # 获取成员权限需开启此意图

client = commands.Bot(command_prefix="!", intents=intents)

@client.event
async def on_message_delete(message):
    # 排除指定频道(修正原代码逻辑错误)
    if message.channel.name not in ["│vent-help", "┗vent-no-reply"]:
        # 排除特定表情消息
        if message.content != "<:1984:1051269758164668497>":
            # 仅处理服务器内消息,DM无审核日志
            if not message.guild:
                return
            
            try:
                # 获取最近1条消息删除的审核日志
                async for entry in message.guild.audit_logs(
                    action=discord.AuditLogAction.message_delete,
                    limit=1
                ):
                    # 匹配日志对应的被删消息作者
                    if entry.target == message.author:
                        # 验证删除者是版主且不是消息作者本人
                        if entry.user != message.author and entry.user.guild_permissions.manage_messages:
                            user = str(message.author)
                            moderator = str(entry.user)
                            await message.channel.send(f"版主{moderator}删除了{user}的消息: <:1984:1051269758164668497>")
                        break
            except discord.Forbidden:
                # 机器人无审核日志权限时的提示
                await message.channel.send("机器人无查看审核日志权限,无法判断删除者身份")

# 启动机器人
client.run("你的机器人Token")

关键注意事项

  1. 权限与意图配置:
    • 机器人需要在服务器中开启查看审核日志权限。
    • 在Discord开发者门户中,必须开启消息内容意图、服务器成员意图等必要权限,否则无法获取消息内容和成员权限信息。
  2. 原代码逻辑修正:
    • 原代码中message.channel != "│vent-help" or message.channel != "┗vent-no-reply"逻辑错误,改为判断频道名不在目标列表中,避免所有频道都触发通知。
  3. 边界情况处理:
    • 加入异常捕获,处理机器人无审核日志权限的场景,防止报错崩溃。
    • 自动排除DM中的消息删除操作,因为DM会话没有审核日志。

内容的提问来源于stack exchange,提问作者Jammy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:50:31