discord.js机器人自定义状态显示服务器成员数为undefined如何解决
问题原因
- 你调用的
client.guilds是discord.js里的GuildManager集合对象,本身不存在memberCount属性,所以读取结果自然是undefined。memberCount是单个服务器(Guild实例)的属性,你需要遍历所有服务器累加成员数,或者指定你要读取的单个服务器的成员数。
解决方案
分两种适用场景选择对应代码即可:
场景1:机器人仅在单个服务器运行,展示该服务器的成员数
你需要先拿到对应服务器的实例,再读取它的memberCount属性,代码示例:
client.on('ready', () => { // 把引号内的内容替换成你目标服务器的ID const targetGuild = client.guilds.cache.get('你的服务器ID'); if (!targetGuild) return console.log('未找到目标服务器'); client.user.setActivity(`${targetGuild.memberCount} Members!`); });
场景2:机器人在多个服务器运行,展示所有服务器的总成员数
你需要遍历所有服务器的成员数累加求和,代码示例:
client.on('ready', () => { let totalMembers = 0; client.guilds.cache.forEach(guild => { totalMembers += guild.memberCount; }); client.user.setActivity(`${totalMembers} Members!`); });
注意事项
如果你使用的是discord.js v13及以上版本,需要先在Discord开发者后台的机器人设置页开启Server Members Intent权限,同时初始化client的时候要配置对应的Intents,否则无法正常读取成员数:
// 初始化client示例 const { Client, IntentsBitField } = require('discord.js'); const client = new Client({ intents: [ IntentsBitField.Flags.Guilds, IntentsBitField.Flags.GuildMembers ] });
内容的提问来源于stack exchange,提问作者Aromatic armadillo12312312
相关产品推荐
相关产品推荐

