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

如何在Discord日志频道发送两个独立Embed分别记录删除的消息与图片?

解决方法

调整逻辑,让文本内容和附件分别触发独立的Embed发送,而非互斥判断,即可实现同时发送两个Embed的需求。

修改后的代码

import datetime
import discord
from discord.ext import commands

@commands.Cog.listener()
async def on_message_delete(self, message: discord.Message):
    channel = self.bot.get_channel(logs_channel_id)
    color = discord.Color.red()  # 可替换为你需要的颜色值

    # 发送文本内容Embed(仅当消息有非空文本时)
    if message.content.strip():
        text_embed = discord.Embed(color=color)
        text_embed.set_author(
            name=message.author.name,
            icon_url=message.author.avatar.url if message.author.avatar else None
        )
        text_embed.add_field(
            name="",
            value=f"{message.author.mention} 删除了一条消息于 {message.channel.mention}",
            inline=False
        )
        text_embed.add_field(
            name="消息内容",
            value=message.content,
            inline=False
        )
        text_embed.set_footer(text=f"消息作者ID: {message.author.id} | 频道ID: {message.channel.id}")
        text_embed.set_thumbnail(url=self.bot.user.avatar.url if self.bot.user.avatar else None)
        text_embed.timestamp = datetime.datetime.now(datetime.timezone.utc)
        await channel.send(embed=text_embed)

    # 发送图片附件Embed(支持单/多张图片)
    if message.attachments:
        for attachment in message.attachments:
            # 仅处理图片类型附件,可根据需求扩展其他类型
            if attachment.content_type.startswith('image/'):
                image_embed = discord.Embed(color=color)
                image_embed.set_author(
                    name=message.author.name,
                    icon_url=message.author.avatar.url if message.author.avatar else None
                )
                image_embed.add_field(
                    name="",
                    value=f"{message.author.mention} 删除了一张图片于 {message.channel.mention}",
                    inline=False
                )
                image_embed.set_image(url=attachment.url)
                image_embed.set_footer(text=f"消息作者ID: {message.author.id} | 频道ID: {message.channel.id}")
                image_embed.set_thumbnail(url=self.bot.user.avatar.url if self.bot.user.avatar else None)
                image_embed.timestamp = datetime.datetime.now(datetime.timezone.utc)
                await channel.send(embed=image_embed)

关键改进点

  • 拆分独立逻辑:将文本和附件的处理拆为两个无互斥的判断分支,只要满足条件就发送对应Embed
  • 文本内容校验:用message.content.strip()过滤空文本,避免冗余日志
  • 多附件支持:遍历所有附件,每张图片发送一个独立Embed
  • 空值安全处理:增加头像URL的空值判断,避免用户无头像时抛出错误
  • 规范时间戳:使用UTC时间戳,匹配Discord的时间显示标准

效果

  • 纯文本消息删除:仅发送文本内容Embed
  • 仅图片消息删除:仅发送图片Embed
  • 文本+图片消息删除:先后发送文本Embed和图片Embed,实现与Dyno一致的日志效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:05:15