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

Discord机器人实现频道特定词放行 兼容词汇大小写变体的开发问题

Discord指定频道关键词过滤实现方案

需求梳理

需要实现Discord机器人在指定文本频道内的白名单词汇校验:仅允许用户发送指定词汇,非匹配内容自动删除,同时兼容词汇的大小写变体、前后误输入空格等场景。
原有代码仅能精确匹配完全等于upgrade的消息,存在全局生效、无法兼容格式变体、未做异常处理的问题。

核心调整逻辑

  • 前置拦截机器人消息:优先判断消息发送者是否为机器人,是则直接跳过,避免循环触发删除逻辑
  • 限定生效频道:增加频道ID判断,仅在配置的目标频道执行过滤规则,不影响其他频道正常聊天
  • 文本标准化处理:对用户发送的内容先做预处理,通过trim()清除首尾空白字符,通过toLowerCase()统一转为小写,兼容UPGRADE、Upgrade、upgrade这类大小写、前后带空格的变体
  • 可扩展白名单:用数组维护允许发送的词汇列表,后续新增允许词汇直接修改数组即可
  • 异常捕获:删除消息时加错误捕获,避免机器人没有频道管理权限时控制台抛出未处理错误

调整后可直接运行的代码

// 配置项:按需修改
const TARGET_CHANNEL_ID = "替换为需要启用规则的文本频道ID";
const ALLOWED_WORD_LIST = ["upgrade"];

client.on("messageCreate", (message) => {
  // 跳过所有机器人发送的消息
  if (message.author.bot) return;
  // 非目标频道直接放行
  if (message.channel.id !== TARGET_CHANNEL_ID) return;

  // 预处理消息内容:去首尾空格 + 统一转小写
  const formatContent = message.content.trim().toLowerCase();

  // 内容不在白名单内则删除
  if (!ALLOWED_WORD_LIST.includes(formatContent)) {
    message.delete().catch(err => console.log("消息删除失败,可能缺少权限:", err));
  }
});

可选扩展建议

  • 如果需要兼容词汇中间误输入空格的场景(比如用户打了up grade),可以在预处理步骤新增一步去掉所有空白字符:const formatContent = message.content.replace(/\s/g, '').toLowerCase();
  • 如果规则允许消息中包含目标词汇即可、不需要整条消息完全匹配,可以把判断逻辑替换为!formatContent.includes("upgrade")
  • 可以在删除消息后给用户发一条临时提示,说明当前频道的发言规则,设置几秒后自动删除,减少用户困惑

注意:Discord.js v12以上版本推荐使用messageCreate事件替代旧的message事件,旧事件在v14版本已被废弃,调用后不会正常触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 00:12:15