如何实现Discord bot通过指定命令清除特定频道的所有消息
Discord Bot 手动触发频道消息清理功能实现方案
先讲死硬性限制
按照Discord接口的固定规则:
- 批量删消息的
bulk_delete接口,只能删发出去14天以内的消息,单次最多一次删100条 - 超过14天的老消息,没法走批量通道,只能一条条删,这个操作有严格的调用频率限制,刷太快直接触发风控封接口权限
实现步骤
1. 基础权限配全
- 在Discord开发者后台的Bot设置页,把
Message Content Intent的开关打开 - 给Bot在目标服务器的角色勾上必须的权限:「管理消息」「查看频道」「读取消息历史」「发临时消息」,缺任何一个都可能跑不动
- 清理命令直接绑到对应服务器做私有命令,别搞全局命令,不然等命令同步要等好久
2. 命令交互逻辑
- 命令参数至少留两个可选项:要清理的目标频道、要删的消息数量
比如命令格式做成/clear #目标频道 消息数量,不填数量的话默认每次拉最近100条处理 - 触发命令先做权限校验:只有服务器里本身有「管理消息」权限的用户才能执行,普通用户点了直接弹权限不足的提示
- 加个防误触的确认弹窗:点了清理命令先弹个确认按钮,真的点「确认删除」才跑后续流程,点取消就直接停,别手滑把别的频道清了
3. 核心删除流程
- 分批拉目标频道的消息,每攒够100条就调一次批量删除接口,循环处理直到拉到的消息超过14天的时间线
- 碰到14天以上的老消息,切换成单条删除模式,每次调用加固定延迟,别刷太快触发风控
- 删完之后,给发命令的人发个只有他能看见的临时提示,说清楚这次一共删了多少条,这个提示设10秒后自动消失,别往目标频道里堆垃圾消息
容易踩的坑
- 别为了删得快,对着老消息疯狂刷单条删除接口,分分钟被判定成接口滥用,直接封Bot的调用权限
- 别把清理日志直接发在目标频道里,不然你刚清完频道,又留了条日志,等于白忙活
- 删消息是找不回来的,建议在确认环节再卡一步,比如让用户手动输入频道名匹配上了才真的执行,把误操作概率压到最低
内容的提问来源于stack exchange,提问作者Honda Guy VTEC
相关产品推荐
相关产品推荐

