Discord.js漫游器审核日志问题(v12)

时间:2020-04-13 13:56:24

标签: javascript discord discord.js

我正在写我的第一个机器人,但是审核日志有一些问题。

我想创建审核日志,该日志将发送信息,从服务器踢出成员。

我在互联网上发现了一些东西,但是它确实工作异常。当我踢我的考试帐户时,没关系,这表明我踢了他。但是,当我想独自离开时,日志显示我正在踢这个测试帐户。而且,当我的朋友踢这个帐户时,可以说他踢了他,也可以,但是当我再次独自离开时,它说这个朋友踢了他。我不知道如何修理。

这是我的代码:

bot.on('guildMemberRemove', async member => {
    const kanal = bot.channels.cache.get("698649855727501402");
    const fetchedLogs = await member.guild.fetchAuditLogs({
        limit: 1,
        type: 'MEMBER_KICK',
    });
    const kickLog = fetchedLogs.entries.first();
    if (!kickLog)  return kanal.send(`${member.user.tag} left the guild, most likely of their own will.`);

    const { executor, target } = kickLog;

    if (target.id === member.id) {
        kanal.send(`${member.user.tag} left the guild; kicked by ${executor.tag}?`);
    } else {
        kanal.send(`${member.user.tag} left the guild, audit log fetch was inconclusive.`);
    }
});

Screenshot of 4 messages from a Discord bot

1 个答案:

答案 0 :(得分:0)

您得到的行为是由于您始终总是获取审核日志,并且始终使用最新条目所引起。当您自己离开时,根本不会生成审核日志条目。另外,每次获取时,最新的获取条目将是相同的踢,而不会出现新的踢。

为避免这种情况,您应该比较某人离开的时间以及何时生成您获取的日志。但是请注意,不必立即生成审核日志。

下面的代码片段应允许您执行所需的操作-它检查是否在提取之前的5秒钟内创建了获取的踢球日志。该时间窗口应该足够长,以解决延迟等问题,但是您可以随意减小它的时间。

const logs = await member.guild.fetchAuditLogs({ limit: 1, type: 'MEMBER_KICK' });
const log = logs.entries.first();
if (!log) return;
if (Date.now() - log.createdTimestamp < 5000) {
  kanal.send(`${member.user.tag} was kicked by ${log.executor.tag}.`);
} else {
  kanal.send(`${member.user.tag} left the guild.`);
}