You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.js如何通过Audit Logs统计指定时间内创建的角色数量

核心错误点

代码共有3处问题导致结果不符合预期:

  • 等待逻辑不生效:wait(3000)前未加await,不会阻塞后续代码执行,还没等够3秒就会发起审计日志拉取请求。
  • 过滤条件写了赋值而非判断:e => e.createdAt = Date.now()中使用单等号=是赋值操作,会直接修改每条审计记录的createdAt字段,没有做合法的布尔判断,过滤逻辑完全失效。
  • 时间匹配逻辑错误:需求是统计3秒内新创建的角色,而非和执行过滤瞬间的时间戳完全相等的记录,时间戳差1毫秒就会匹配失败;且e.createdAt是Date类型对象,和Date.now()返回的数字类型毫秒值直接比较存在类型偏差。
正确实现

首先记录等待起始时间戳,等待完成后拉取审计日志,筛选创建时间在起始时间之后的角色创建记录即可:

// 记录等待开始的时间节点
const checkStartTime = Date.now();
// 等待3秒,若你已有封装好的Promise版wait工具,可替换为 await wait(3000)
await new Promise(resolve => setTimeout(resolve, 3000));

const logs = await guild.fetchAuditLogs({ type: 'ROLE_CREATE' });
if (!logs) return;

// 筛选等待期间新创建的角色记录
const newRoleEntries = logs.entries.filter(entry => entry.createdAt.getTime() >= checkStartTime);
console.log(newRoleEntries.size);

注意:如果使用自定义wait工具函数,必须确认该函数返回Promise,且调用时加await,否则等待逻辑不会生效。

内容的提问来源于stack exchange,提问作者treeqr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:33:17