如何修改discord.js脚本实现Discord特定身份组成员数量统计展示
实现特定身份组成员统计的修改方案
前置准备
- 先获取你要统计的目标身份组的ID(Discord开启开发者模式后右键身份组即可复制ID)
- 提前创建好用来展示身份组成员数的语音频道,复制该频道的ID
- 确认机器人拥有对应频道的「管理频道」权限,以及身份组的可见权限
修改说明
原有脚本只监听了成员进出服务器的事件,我们需要额外补充两个逻辑:
- 新增成员身份组变更时的触发事件,避免用户加减身份组时统计数据不更新
- 在统计逻辑中加入特定身份组的成员数计算,同时封装公共逻辑减少重复代码
完整修改后的代码
// 替换为你要统计的目标身份组ID const TARGET_ROLE_ID = '替换为你的身份组ID'; // 展示总成员数的频道ID,保留你原来的ID即可 const TOTAL_MEMBER_CHANNEL_ID = '880082719483232276'; // 替换为你专门展示特定身份组成员数的频道ID const ROLE_COUNT_CHANNEL_ID = '替换为你的身份组统计频道ID'; // 封装统一的统计更新逻辑 async function updateCount(guild) { // 更新总成员数统计 await guild.channels.cache.get(TOTAL_MEMBER_CHANNEL_ID)?.setName(`总成员数:${guild.memberCount}`); // 拉取目标身份组 const targetRole = guild.roles.cache.get(TARGET_ROLE_ID); if (targetRole) { // 更新特定身份组的成员数统计,`targetRole.members.size`就是身份组的成员总数 await guild.channels.cache.get(ROLE_COUNT_CHANNEL_ID)?.setName(`${targetRole.name}成员数:${targetRole.members.size}`); } } // 成员加入服务器时触发更新 bot.on('guildMemberAdd', async (member) => { await updateCount(member.guild); }); // 成员离开服务器时触发更新 bot.on('guildMemberRemove', async (member) => { await updateCount(member.guild); }); // 成员身份组变更时触发更新 bot.on('guildMemberUpdate', async (oldMember, newMember) => { // 仅当身份组实际发生变化时才更新,减少不必要的接口请求 if (!oldMember.roles.cache.equals(newMember.roles.cache)) { await updateCount(newMember.guild); } });
注意事项
- Discord官方对频道名称修改有速率限制,5分钟内最多修改5次,不要频繁触发更新操作
- 如果需要统计多个身份组,只要新增对应身份组ID、统计频道ID的常量,复用身份组统计的逻辑即可
- 如果出现身份组读取不到的情况,可以调用
await guild.roles.fetch()主动拉取最新的身份组缓存数据
内容的提问来源于stack exchange,提问作者I need Help
相关产品推荐
相关产品推荐

