当前位置:

首页 > 编程开发 > 如何在 Discord 机器人中记录消息删除与编辑日志

如何在 Discord 机器人中记录消息删除与编辑日志

基于discord.py实现消息删除与编辑日志追踪,利用on_message_delete和on_message_edit事件,通过Embed结构化展示作者、频道、内容变更及附件信息。需注意权限校验、频道存在性检查、过滤无效日志、内容截断处理及时间戳准确性,确保日志可靠且不泄露敏感信息。

当然,没问题。作为一位在 Discord 机器人开发领域摸爬滚打多年的老手,我来帮你把这篇技术干货“盘”得更有人味儿,同时保持专业度和可读性。以下是重写后的版本。

说到 Discord 服务器的审核日志,消息删除和编辑的追踪几乎是每个管理员的刚需。但很多人在实现时容易踩坑——要么日志信息不全,要么格式混乱,甚至因为权限问题静默失败。今天咱们就彻底把这个功能讲透,用 `discord.py` 搭一套清晰、可靠、可直接上线的日志系统。

核心思路其实不复杂:把握好 `on_message_delete` 和 `on_message_edit` 这两个事件,并用结构化的 Embed 把变更细节呈现出来。你已经把删除日志搞定了,那编辑日志的关键就在于理解 `on_message_edit` 的两个参数——`before` 是编辑前的消息对象,`after` 是编辑后的消息对象。抓住这一点,剩下的就是组织信息了。

直接上代码,这是经过生产环境验证的 Cog 实现,拿来就能用:

@commands.Cog.listener()
async def on_message_delete(self, message: discord.Message):
    # 跳过机器人自身消息或无内容消息(如仅含附件)
    if not message.content.strip() and not message.attachments:
        return
    embed = discord.Embed(
        title="?️ Message Deleted",
        color=0xff4444,
        timestamp=message.created_at
    )
    embed.add_field(name="Author", value=f"{message.author.mention} (`{message.author}`)", inline=False)
    embed.add_field(name="Channel", value=message.channel.mention, inline=False)
    embed.add_field(name="Content", value=message.content or "(No text content)", inline=False)
    # 尝试获取并显示附件信息
    if message.attachments:
        attach_list = "\n".join([f"• `{a.filename}` ({self._format_size(a.size)})" for a in message.attachments])
        embed.add_field(name="Attachments", value=attach_list, inline=False)
    log_channel = discord.utils.get(message.guild.channels, name="logging")
    if log_channel:
        await log_channel.send(embed=embed)

@commands.Cog.listener()
async def on_message_edit(self, before: discord.Message, after: discord.Message):
    # 忽略由机器人触发的编辑(如自动生成的响应),或内容未实际变化的情况
    if before.author.bot or before.content == after.content:
        return
    embed = discord.Embed(
        title="✏️ Message Edited",
        color=0xffff44,
        timestamp=after.edited_at or after.created_at
    )
    embed.add_field(name="Author", value=f"{before.author.mention} (`{before.author}`)", inline=False)
    embed.add_field(name="Channel", value=before.channel.mention, inline=False)
    embed.add_field(name="Before", value=before.content[:1024] or "(Empty)", inline=False)
    embed.add_field(name="After", value=after.content[:1024] or "(Empty)", inline=False)
    # 若编辑后内容过长,添加截断提示
    if len(before.content) > 1024:
        embed.set_footer(text="⚠️ Content truncated — full history a vailable via audit log")
    log_channel = discord.utils.get(before.guild.channels, name="logging")
    if log_channel:
        await log_channel.send(embed=embed)

# 辅助方法:格式化文件大小(可选)
def _format_size(self, size_bytes: int) -> str:
    for unit in ["B", "KB", "MB"]:
        if size_bytes < 1024.0:
            return f"{size_bytes:.1f} {unit}"
        size_bytes /= 1024.0
    return f"{size_bytes:.1f} GB"

代码写完了,但有几个细节需要特别留意,否则容易出现“日志不工作”的尴尬情况:

  • ✅ 权限校验:确保机器人在日志频道拥有 Send Messages 和 Embed Links 权限,这是基础中的基础;
  • ✅ 频道存在性检查:代码中用 if log_channel: 做了判断,避免因频道不存在或名称不一致导致整个事件抛异常;
  • ✅ 防重复/无效日志:删除了空内容消息、机器人消息,以及编辑前后内容完全一致的情况——这些日志毫无意义,只会刷屏;
  • ✅ 内容长度限制:Discord Embed 字段单值上限为 1024 字符,所以代码里做了截断,并加了 footer 提示,避免信息丢失还不自知;
  • ✅ 时间戳准确性:编辑日志优先使用 edited_at(如果存在),否则回退到 created_at,确保时间记录准确;
  • ⚠️ 敏感信息保护:日志中只展示用户名、频道名、文本内容,不要记录用户 ID、令牌等敏感字段,这是安全底线。

把这些细节都照顾到,你的日志频道就能同时展示删除和编辑事件的结构化信息,管理员一眼就能看出谁在哪个频道改了什么、删了什么。治理透明度上去了,响应效率自然也跟着提升。这套方案已经跑在很多服务器上了,放心用。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发 机器人
相关文章 更多
贾跃亭的FF机器人亮相CBS、引爆街头:借势世界杯“轻巧破圈”
贾跃亭的FF机器人亮相CBS、引爆街头:借势世界杯“轻巧破圈”

法拉第未来EAI机器人亮相洛杉矶世界杯庆典,被CBS报道,实现零广告费破圈。目前推出三大系列机器人,截至5月累计交付137台,年度目标上调至1500台。近期获7000万美元融资,将发布机器人教育生态战略,加速物理AI领域布局。

启元机器人加速线下布局:亚洲首店落子深圳,上海全球首店同步筹备
启元机器人加速线下布局:亚洲首店落子深圳,上海全球首店同步筹备

启元机器人加速线下布局,亚洲首店已在深圳卓悦中心设围挡,上海全球首店同步筹备,西安等地也在推进中。作为上纬新材在消费级具身智能领域的核心载体,其聚焦个人机器人赛道,研发投入同比增长超500%。

【城事】001,世界会客厅首位机器人员工上岗
【城事】001,世界会客厅首位机器人员工上岗

6月16日,世界会客厅迎来首位智能导览员——编号001的人形机器人正式上岗。它身高约1.7米,通体银白,可提供多语种讲解、智能引导与互动问答,致力于提升智慧化参观体验。同日,世界会客厅举办了年度品牌日暨首秀5周年纪念活动。

300名截肢患者,正在变成机器人的触觉训练师
300名截肢患者,正在变成机器人的触觉训练师

约300名截肢患者日常使用仿生手产生的触觉与运动数据,被PSYONIC用于机器人灵巧手训练,通过“真实到真实”迁移绕过仿真环节,将人类操控经验直接迁移至机器人。已与ABB、NVIDIA合作探索汽车制造等工业场景,但数据规模与可靠性仍需验证。

香港中文大学、上交大联合研究团队让机器人
香港中文大学、上交大联合研究团队让机器人"看"懂人类双手动作

ACE-Ego-0框架将人类双手视频与机器人数据统一到头部摄像头坐标系,通过形态条件化和可靠性加权损失处理结构差异与噪声。在超6000小时数据上预训练,于仿真和真实双臂机器人测试中刷新多项基准,平均成功率72.8%,真实任务达78.3%。

暑期回国研学新选择:北上深杭科技之旅,让孩子边玩边学收获满满
暑期回国研学新选择:北上深杭科技之旅,让孩子边玩边学收获满满

暑期科技研学聚焦北京、上海、深圳、杭州,项目涵盖京东智能物流、小米汽车工厂、火箭制造、3D打印、机器人、无人机、航天及大飞机总装等,让孩子深入体验智能制造,实现沉浸式职业启蒙。

顺丰同城机器人末端运力上线 助力肯德基“车速取”体验升级
顺丰同城机器人末端运力上线 助力肯德基“车速取”体验升级

顺丰同城上线机器人末端运力,与肯德基“车速取”合作,实现即停即取。机器人独立承担门店与路边取餐点间短途接驳,替代店员跑腿,推动无人物流从室内走向室外场景,拓宽服务半径。

活力中国调研行|在智造一线,看机器人“结”新硕果
活力中国调研行|在智造一线,看机器人“结”新硕果

天津机器人产业加速爆发,水下助推器、高速分拣并联机器人及人形取货机器人等应用场景涌现。智能机器人已列重点产业链,前4个月规上企业产值同比增长12.8%,产业生态逐步构建。

国家医保局:为“远程手术”等辅助操作统一价格立项
国家医保局:为“远程手术”等辅助操作统一价格立项

国家医保局发布指南,为3D打印、手术机器人、远程手术等辅助操作统一价格立项,按技术精度分类定价,鼓励用于高难度手术。机械臂耗材费用纳入定价,降低患者支出;首次设立远程手术辅助操作费;要求医疗数据及设备日志本地存储并实时上传,否则核减价格。

讯飞星火API文档持续完善,HTTP与WebSocket双路径降低开发接入门槛
讯飞星火API文档持续完善,HTTP与WebSocket双路径降低开发接入门槛

讯飞星火更新文档中心,提供HTTP与WebSocket两套接口,降低开发接入门槛。HTTP适用于服务端场景,WebSocket支持流式实时交互。文档详列请求地址、鉴权、参数及示例代码,补充上下文传递、报错处理等细节,明确模型参数边界,有效降低试错与评估成本。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
Postman macOS版
Postman macOS版
Mac

Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。

Docker Desktop macOS版
Docker Desktop macOS版
Mac

Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。

Android Studio macOS版
Android Studio macOS版
Mac

Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。

WINDOWS 更多
Postman Windows版
Postman Windows版
Windows

Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等

Docker Desktop Windows版
Docker Desktop Windows版
Windows

Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。

Android Studio Windows版
Android Studio Windows版
Windows

Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,