【发布时间】:2021-11-02 03:59:59
【问题描述】:
嘿嘿,所以我正在尝试制作一个删除记录器,它实际上只是在预定义的频道中发送一条消息,说“x 用户删除了 x 人的消息”但是我有一个问题。
因此,我目前如何通过检查最近的审核日志来了解删除邮件的人的姓名。但是,由于删除您自己的消息不会显示在审核日志中,因此如果您删除自己的消息,它会中断。因此,我正在检查审核日志是否创建于
所以现在我不完全确定如何解决这个问题。真的什么都没有想到。这是我当前的 on_message_delete 事件代码。
@client.event
async def on_message_delete(message):
pst = pytz.timezone('US/Pacific')
psttime = datetime.datetime.now(pst)
current_pst_date = psttime.strftime('%Y/%m/%d, %I:%M %p PST.')
delete_channel = message.channel.mention
nsfw_tag = ''
spoiler_tag = ''
in_nsfw = False
channel = client.get_channel(863957409293664266)
message_author = message.author
if message.content.startswith("^"):
return
delete_author = None
delta = datetime.datetime.utcnow() - datetime.timedelta(seconds=1)
print(delta)
async for entry in message.guild.audit_logs(action=discord.AuditLogAction.message_delete, limit=1):
print(entry.created_at)
if entry.created_at > delta:
delete_author = "{0.user}".format(entry)
else:
delete_author = message.author
if delete_author is None:
await ctx.send("Test: Some random error ocurred.")
return
if 'nsfw=True' in str(message):
nsfw_tag = '**:warning: NSFW :warning:**'
in_nsfw = True
spoiler_tag = '||'
e = discord.Embed(title='',
description=f"{nsfw_tag}\n{delete_author.mention} Deleted a Message by {message_author.name} in {spoiler_tag}{delete_channel}{spoiler_tag}\n||\n||")
if in_nsfw is True:
e.color = Color.red()
else:
e.color = Color.gold()
e.set_author(name=f"{message_author}", icon_url=f"{message_author.avatar_url}")
e.set_footer(text=f"• {current_pst_date}")
await channel.send(embed=e)
【问题讨论】:
-
discord.Message对象没有关于谁删除它的任何属性。删除的消息被视为discord.DeletedReferencedMessage对象,但只有channel_id、guild_id和id属性。所以,因为我不知道你的答案,所以我赞成你的答案,如果没有人在 2 天内回答,我会悬赏。 -
discord API 不会返回删除消息的用户,因此最好的方法是获取最新的审核日志操作,检查它是否在同一个频道中如果不是,则假定删除者是消息的作者。这可能会导致一些错误,例如如果 P1 在通道 A 中删除 P2 的消息,然后 P3 在通道 A 中删除自己的消息,bot 会认为 P1 删除了 P3 的消息。
标签: python discord.py audit-logging