有没有好办法找到在on_message_delete事件中删除邮件的人?

2024-09-28 05:26:46 发布

您现在位置:Python中文网/ 问答频道 /正文

Heyo,所以我尝试制作一个删除记录器,它基本上只是在一个预定义的通道中发送一条消息,说“x用户通过x个人删除了一条消息”,但是我有一个问题

因此,我目前如何通过检查最新的审核日志来获取删除邮件的人的姓名。但是,由于删除您自己的邮件不会显示在审核日志中,因此如果删除您自己的邮件,它将中断。因此,我正在检查是否创建了审核日志<;1秒前(如果不是,则将删除邮件的人指定为邮件作者)。但还有另一个问题。也就是说,如果您删除多条消息,并且这些消息都是由同一个人发送的(例如:第1个人删除第2个人的3条消息),它会将审核日志压缩为一个条目(显示“x用户从x用户删除x条消息”,而不是重复x次“x用户从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)

Tags: 用户in消息messagedatetimeiftagchannel
2条回答

不可能


…因为Discord API不会返回删除消息的用户。
正如@Chuaat所说,您可以尝试用其他方式来完成,但这可能会导致一些错误。

不和谐


Discord.py正在开发has ended,因此没有人能够做您想做的事情

编辑


可以获取消息的删除者,但仅使用discord.Message属性是不可能的。
您可以在此范围内使用公会审核日志,如下所示:

async for entry in message.guild.audit_logs(limit=1):
    deleter = entry.user
await message.channel.send(embed = discord.Embed(title="Message deleted", description=f"{deleter.mention} deleted a message"))

因此,您试图从已删除的邮件和删除该邮件的用户中获取邮件作者。 我认为这应该奏效:

@client.event
async def on_message_delete(message, member):
    async for entry in message.guild.audit_logs(limit=1,action=discord.AuditLogAction.message_delete):
        deleter = entry.user
    print(f"{deleter.name} deleted message by {message.author.name}")

输出: enter image description here

相关问题 更多 >

    热门问题