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

如何编写Discord.js@特定用户时警告触发者的代码 现有代码无法运行

问题排查与修复方案

现有代码问题

  • 匹配逻辑存在缺陷:全等判断仅能匹配整条消息内容刚好为@指定用户的场景,只要消息存在其他内容就无法触发,同时没有兼容昵称提及的<@!用户ID>格式,匹配覆盖率极低
  • 未过滤机器人自身消息:没有排除机器人发送的内容,可能触发死循环
  • 缺少必要网关权限:Discord.js v13及以上版本需要主动在开发者后台开启Message Content特权意图,同时初始化客户端时注册对应意图,否则无法接收messageCreate事件、也无法获取消息内容
  • 硬编码逻辑灵活性差:直接写死用户ID和用户名,容易出现ID匹配错误,也无法适配多目标检测等场景

实现前置准备

登录Discord开发者平台,进入对应机器人应用的「Bot」设置页,在「Privileged Gateway Intents」板块开启Message Content Intent开关,否则消息读取相关功能会失效。

修正后代码

const Client = require("./Structures/Client.js");
const config = require("./Data/config.json");

// 填入需要被检测的目标用户ID,支持填入多个
const TARGET_USER_IDS = ["替换为USER2的真实用户ID"];

const client = new Client({
  // 若你自行封装的Client支持传参,需在此处注册必要意图
  intents: [
    "Guilds",
    "GuildMessages",
    "MessageContent"
  ]
});

client.on("messageCreate", message => {
  // 过滤所有机器人发送的消息
  if (message.author.bot) return;
  // 检测消息中是否提及了目标用户
  const isMentionTarget = message.mentions.users.some(user => TARGET_USER_IDS.includes(user.id));
  if (isMentionTarget) {
    // 警告发起提及的用户,可根据需求修改提示内容
    message.reply(`警告:${message.author.tag} 禁止提及指定用户`);
    // 可在此处追加删除消息、临时禁言等额外操作
  }
});

client.start(config.token);

补充说明

如果仅需要检测单个目标用户,可简化判断逻辑,直接调用message.mentions.users.has('目标用户ID')即可,无需遍历数组。
不要手动匹配消息内容字符串判断提及,使用Discord.js封装的message.mentions属性可以自动兼容各类提及格式,不会出现匹配误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:06:04