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

无法按指定时间戳删除消息,使用moment.js筛选7天前消息功能失效

问题根因
  • 条件判断逻辑错误:if (time) 只是判断moment实例是否存在,只要代码不报错这个条件永远为真,相当于没有任何时间过滤,所以所有拉取到的消息都会触发删除逻辑
  • 时间比对逻辑完全错误:给消息创建时间减7天的操作没有任何意义,正确逻辑应该是先算出「7天前的时间点」,再比对消息创建时间是否早于这个时间点
  • bulkDelete用法错误:不需要在遍历消息的循环里反复调用批量删除,应该先过滤出所有符合删除条件的消息集合,再统一调用批量删除接口
  • async/await和Promise.then写法混用,逻辑冗余且容易出问题
修正后可运行代码
// 计算7天前的UTC时间戳
const sevenDaysAgo = moment.utc().subtract(7, 'days').valueOf();
// 拉取最多100条频道消息
const messages = await channel.messages.fetch({ limit: 100 });
// 过滤出发送时间早于7天前的旧消息
const oldMessages = messages.filter(m => m.createdTimestamp < sevenDaysAgo);
// 批量删除符合条件的消息
if (oldMessages.size > 0) {
  await channel.bulkDelete(oldMessages, true);
}
注意事项
  • Discord原生bulkDelete接口仅支持删除发送时间距今14天以内的消息,超过14天的消息无法通过该接口批量删除,需要单独调用单条消息删除接口处理
  • 代码中bulkDelete的第二个参数传true会自动过滤掉超过14天、无法批量删除的消息,避免触发接口报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:36:04