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
相关产品推荐
相关产品推荐

