如何在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
相关产品推荐
相关产品推荐

