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

如何编写purge指令 实现用户输入:purge (amount)即可触发对应功能

:purge 批量清除指令实现方案

以下以最常见的 Discord.js v14 机器人场景为例,其他平台/框架核心逻辑通用。

前置要求

  • 已完成机器人基础框架搭建
  • 已开启机器人的「消息内容读取」意图权限
  • 已为机器人授予服务器的「管理消息」权限

核心实现步骤

1. 指令匹配逻辑

监听消息创建事件,通过正则匹配:purge (amount)的指令格式,提取删除数量参数:

client.on('messageCreate', async message => {
  // 忽略机器人自身发送的消息
  if (message.author.bot) return;
  // 匹配指令规则
  const purgeRule = /^:purge (\d+)$/;
  const matchResult = message.content.match(purgeRule);
  if (!matchResult) return;
  // 转换为数字格式的删除数量
  const deleteAmount = parseInt(matchResult[1]);

2. 合法性校验

执行删除前做前置校验,避免调用API报错:

// 校验指令发送者是否有管理消息权限
  if (!message.member.permissions.has('ManageMessages')) {
    return message.reply('你没有管理消息权限,无法使用该指令');
  }
  // 校验机器人自身是否有管理消息权限
  if (!message.guild.members.me.permissions.has('ManageMessages')) {
    return message.reply('机器人未被授予管理消息权限,无法执行操作');
  }
  // 校验删除数量是否在接口限制范围内(Discord API单次最多删100条,且不支持删14天以上的历史消息)
  if (deleteAmount < 1 || deleteAmount > 100) {
    return message.reply('请输入1-100之间的删除数量,单次最多删除100条消息');
  }

3. 执行删除操作

调用平台API执行批量删除,返回操作结果:

try {
    // 第二个参数设为true会自动过滤14天以上的消息,避免API报错
    const deleted = await message.channel.bulkDelete(deleteAmount, true);
    // 发送操作反馈,3秒后自动删除反馈避免刷屏
    const feedback = await message.reply(`已成功删除${deleted.size}条消息`);
    setTimeout(() => feedback.delete(), 3000);
  } catch (error) {
    console.error('删除消息出错:', error);
    message.reply('执行删除操作失败,请重试');
  }
});

其他场景通用逻辑

如果是其他平台的机器人,核心逻辑完全一致:

  • 监听消息事件,匹配:purge 数字的指令格式,提取数量参数
  • 完成操作者权限、自身权限、参数范围的三重校验
  • 调用对应平台的批量删除消息接口执行操作,返回执行结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:54:01