Discord.js 机器人审计日志问题 (v12)
Posted
技术标签:
【中文标题】Discord.js 机器人审计日志问题 (v12)【英文标题】:Discord.js bot audit logs problems (v12) 【发布时间】:2020-07-26 02:31:19 【问题描述】:我正在编写我的第一个机器人,但我在审核日志方面遇到了一些问题。
我想创建审核日志,它将发送信息,谁从服务器踢了一个成员。
我在互联网上找到了一些东西,但它的工作方式非常奇怪。踢我测试号的时候还好,说明我踢了他。但是当我想自己离开时,日志说我正在踢这个测试帐户。更何况,我朋友踢这个账号的时候,还好,说是他踢了他,但是当我再一个人离开的时候,却说是这个朋友踢了他。我不知道如何修复它。
这是我的代码:
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.`);
);
【问题讨论】:
如果你在这里发布你的代码会更好,你需要进一步澄清你的问题 我不知道你说的“澄清我的问题”是什么意思,你的意思是添加一些细节或者让它更透明? 【参考方案1】:你得到的行为是因为你总是获取审计日志,并且总是使用最新的条目。当您自己离开时,根本不会生成审核日志条目。此外,每次抓取时,您获取的最新条目将是相同的踢,而不会出现新踢。
为避免这种情况,您应该比较某人离开的时间,以及您获取的日志是何时生成的。但请注意,审核日志不必立即生成(如果有的话)。
下面的代码段应该允许你做你想做的事 - 它检查获取的踢日志是否比你的获取早 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.`);
【讨论】:
好的,我看到了问题,但还是无法解决。我怎样才能得到这个时间? 更新答案。 非常感谢!我是个白痴,我忘记了“Date.now()”,我用了 30 行高 :D 再一次,谢谢!以上是关于Discord.js 机器人审计日志问题 (v12)的主要内容,如果未能解决你的问题,请参考以下文章
v12 不会删除机器人的反应,但 v13 会删除机器人的反应 (discord.js)