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); } }, };
使用说明
- 确保已安装Discord.js V14版本:
npm install discord.js@latest - 替换代码顶部的
serverNames、channelConfig、roleConfig为实际业务值 - 将该文件放入机器人的事件目录中,确保机器人已正确加载事件模块
内容的提问来源于stack exchange,提问作者Hector Souffront
相关产品推荐
相关产品推荐

