如何使用Discord.JS删除特定频道中超过1小时的消息?
实现Discord频道自动删除1小时以上旧通知的方案
每次发送新通知后自动清理频道内超过1小时的旧通知,核心逻辑是时间筛选+批量删除,以下是具体实现方案:
关键逻辑拆解
- 计算时间阈值:用当前时间减去3600000毫秒(1小时的毫秒数),得到1小时前的时间戳
- 筛选目标消息:从指定频道拉取历史消息,挑出发送时间早于阈值的消息
- 批量删除:调用Discord的批量删除接口处理符合条件的消息
代码示例(Discord.js v14)
// 封装发送通知并清理旧消息的函数 async function sendAndCleanNotifications(targetChannel, notificationContent) { // 先发送新通知 await targetChannel.send(notificationContent); // 计算1小时前的时间节点 const oneHourBefore = Date.now() - 3600 * 1000; // 拉取频道最近100条消息(Discord API单次拉取上限) const channelMessages = await targetChannel.messages.fetch({ limit: 100 }); // 筛选出超过1小时的消息 const outdatedMessages = channelMessages.filter(msg => msg.createdTimestamp < oneHourBefore); // 批量删除旧消息(需机器人有ManageMessages权限) if (outdatedMessages.size > 0) { await targetChannel.bulkDelete(outdatedMessages); } }
- 注意点
- 机器人必须拥有
ManageMessages权限,否则删除操作会失败 - 单次
bulkDelete最多处理100条消息,且只能删除14天以内的消息;如果频道旧消息超过100条,需要循环分页拉取并删除 - 若要处理超过14天的旧消息,只能逐条调用
msg.delete(),但效率较低,建议根据实际需求取舍
- 机器人必须拥有
内容的提问来源于stack exchange,提问作者ryana
相关产品推荐
相关产品推荐

