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

Discord.js V14适配求助:Dual Clanning检测器代码修复

Discord.js V14 适配后的双 Clan 检测代码

关键修改点

  • 导入Discord.js V14必需的EmbedBuilder和ActivityType枚举
  • 修正活动类型判断逻辑(V14中活动类型为枚举值,不再是字符串)
  • 优化频道获取方式,避免缓存未命中导致消息发送失败
  • 补充参数配置提示(需自行定义批准服务器列表、告警频道ID、提及角色ID)
  • 增加空值判断与错误捕获,提升代码稳定性

完整适配代码

const { EmbedBuilder, ActivityType } = require('discord.js');

// 请自行配置以下核心参数
const serverNames = ["允许的服务器名称1", "允许的服务器名称2"]; // 批准的服务器名称列表
const channelConfig = "告警频道ID"; // 发送告警消息的频道ID
const roleConfig = "提及角色ID"; // 需要@的告警角色ID

module.exports = {
  name: "presenceUpdate",
  once: false,
  async execute(oldPresence, newPresence) {
    try {
      const member = newPresence.member;
      if (!member) return; // 确保成员对象存在
      
      const memberId = member.id;
      const activity = newPresence.activities[0];
      if (!activity) return; // 确保存在活动数据
      
      const serverName = activity.name;
      const serverInfo = activity.details;
      const statusType = activity.type;

      const testEmbed = new EmbedBuilder()
        .setColor("#00BFC0")
        .setTitle("W.E.T Dual Clanning Logs")
        .addFields(
          { name: "用户ID:", value: memberId, inline: true },
          { name: "成员:", value: `<@${memberId}>`, inline: true },
          { name: "服务器名称:", value: serverName || "无", inline: false },
          { name: "服务器信息:", value: serverInfo || "无", inline: false }
        )
        .setFooter({
          text: `W.E.T Dual Clanning Detection`,
          iconURL: `https://cdn.discordapp.com/attachments/1055320525506871306/1204989075661258762/W.E.T_Logo.png?ex=65d6bc87&is=65c44787&hm=15eb47afb1fb3acfa378c363f5f75064865a665551576a6d61b1ecefca182a71&S`,
        })
        .setTimestamp(); // 新增时间戳,便于追溯告警时间

      if (serverInfo !== undefined && serverName !== undefined) {
        const testArr = serverName.toLowerCase().split(" ");
        let exitElemCount = 0;

        for (const server of serverNames) {
          if (testArr.includes(server.toLowerCase())) {
            exitElemCount++;
          }
        }

        const strArr = serverInfo.toLowerCase().split(" ");

        for (const server of serverNames) {
          if (strArr.includes(server.toLowerCase())) {
            exitElemCount++;
          }
        }

        let exitElem = false;

        if (testArr.length > 10) {
          exitElem = exitElemCount <= 2;
        } else if (testArr.length > 2 && testArr.length <= 10) {
          exitElem = exitElemCount <= 1;
        } else if (testArr.length <= 2) {
          exitElem = exitElemCount <= 0;
        }

        if (exitElem && statusType !== ActivityType.Custom) {
          // 使用fetch获取频道,避免缓存未命中
          const alertChannel = await newPresence.guild.channels.fetch(channelConfig).catch(err => {
            console.error("获取告警频道失败:", err);
            return null;
          });
          if (alertChannel) {
            await alertChannel.send({ 
              content: `<@&${roleConfig}>`, 
              embeds: [testEmbed] 
            }).catch(err => {
              console.error("发送告警消息失败:", err);
            });
          }
        }
      }
    } catch (err) {
      console.error("双Clan检测逻辑出错:", err);
    }
  },
};

使用说明

  1. 确保已安装Discord.js V14版本:npm install discord.js@latest
  2. 替换代码顶部的serverNames、channelConfig、roleConfig为实际业务值
  3. 将该文件放入机器人的事件目录中,确保机器人已正确加载事件模块

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:13:33