Discord.js游戏服务器状态联动:频道名称自动修改功能实现求助
实现Discord机器人自动修改频道名称功能
Hey there! Let's get your bot to automatically update the target channel's name based on your game server's status. Here's how to integrate this feature smoothly with your existing code:
第一步:确保机器人有必要权限
首先,在Discord开发者门户的机器人权限设置中,给你的机器人勾选Manage Channels权限,否则它无法修改频道名称。同时也要在Discord服务器的角色设置里确认机器人角色拥有该权限。
第二步:添加频道名称修改函数
在你的代码里新增一个专门用于更新频道名称的函数,它会根据服务器状态和玩家数生成对应的频道名:
const updateChannelName = function(isOnline, playerCount = 0) { const channel = bot.channels.get(CHANNEL_ID); if (!channel) { log(LOG_LEVELS.ERROR, '无法找到目标频道,无法修改名称'); return; } let newName; if (isOnline) { newName = `「🟢」LustRP - ${playerCount}/${MAX_PLAYERS} 玩家`; } else { newName = `「🔴」LustRP - 服务器离线`; } // 只有当名称不同时才修改,避免不必要的API调用 if (channel.name !== newName) { channel.setName(newName) .then(() => log(LOG_LEVELS.INFO, `频道名称已更新为: ${newName}`)) .catch(err => log(LOG_LEVELS.ERROR, `修改频道名称失败: ${err.message}`)); } };
第三步:将函数整合到现有状态逻辑中
现在把这个函数调用添加到你的服务器在线和离线处理逻辑里:
1. 在离线状态函数中调用
修改你的offline()函数,在发送/更新消息后添加频道名称修改:
const offline = function() { log(LOG_LEVELS.SPAM, Array.from(arguments)); if (LAST_COUNT !== null) log(LOG_LEVELS.INFO, `Server offline ${URL_SERVER} (${URL_PLAYERS} ${URL_INFO})`); let embed = UpdateEmbed() .setColor(0xff0000) .setFooter(' LustRP') .setDescription('\n\u200b\n **我们的服务器目前处于关闭状态,将尽快重新启用。** \n\u200b\n') .setImage("https://cdn.discordapp.com/attachments/974298125407772702/987879840319414272/kafi1.png") .addField('服务器状态', ':x: 已关闭', true) .addField('排队队列', '?', true) .addField('活跃玩家数', '?\n\u200b\n', true); sendOrUpdate(embed); LAST_COUNT = null; // 新增:更新离线状态下的频道名称 updateChannelName(false); };
2. 在在线状态逻辑中调用
修改updateMessage()里的成功回调,在更新消息后调用频道名称修改:
const updateMessage = function() { getVars().then((vars) => { getPlayers().then((players) => { if (players.length !== LAST_COUNT) log(LOG_LEVELS.INFO, `${players.length} players`); let queue = vars['Queue']; let embed = UpdateEmbed() .setColor(0x00ff00) .setDescription('\n\u200b\n **我们的服务器已启用,祝您游戏愉快。** \n\u200b\n') .setFooter(' LustRP') .setImage("https://cdn.discordapp.com/attachments/974298125407772702/987879840558514186/AKIF1.png") .addField('服务器状态', ':white_check_mark: 在线', true) .addField('排队队列', queue === 'Enabled' || queue === undefined ? '0' : queue.split(':')[1].trim(), true) .addField('活跃玩家数', `${players.length}/${MAX_PLAYERS}\n\u200b\n`, true); // 玩家列表部分代码保持不变... sendOrUpdate(embed); LAST_COUNT = players.length; // 新增:更新在线状态下的频道名称,传入当前玩家数 updateChannelName(true, players.length); }).catch(offline); }).catch(offline); // 剩余代码保持不变... };
注意事项
- 速率限制:Discord对频道名称修改有频率限制,所以确保你的
updateMessage()循环间隔不要太短(建议至少1分钟以上),避免触发API限制导致请求失败。 - 频道名称长度:Discord频道名称最长不能超过100字符,所以生成的名称要控制在这个范围内,避免截断或报错。
- 异常处理:代码中已经添加了基础的错误日志,方便你排查权限不足、频道不存在等问题。
这样你的机器人就能根据游戏服务器的状态,自动修改目标频道的名称啦!
内容的提问来源于stack exchange,提问作者Canavar Site
相关产品推荐
相关产品推荐

