You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Discord.js中区分服务器用户数与机器人成员数?

如何用Discord.js的filter方法区分服务器总用户数与机器人成员数

嘿,刚好我做过类似的功能,用Discord.js的filter方法区分机器人和普通用户其实超简单,我给你一步步讲清楚!

首先得明确核心逻辑:Discord.js里的每个GuildMember(服务器成员)对应的User对象,都自带一个**bot布尔属性**——机器人账号的这个属性是true,普通人类用户则是false。我们刚好可以利用这个属性来做筛选!

核心实现步骤

  • 获取总成员数:直接用guild.memberCount就能拿到,这个属性会返回服务器里的所有成员总数(包含机器人)。
  • 筛选机器人成员:通过guild.members.cache.filter()方法,传入判断条件member.user.bot,就能把所有机器人成员筛选出来,再用.size获取筛选后的数量。
  • 计算人类成员数(可选):用总成员数减去机器人数量就行,一步到位。

完整代码示例

基础版(使用缓存成员)

如果你的机器人已经缓存了服务器的成员,直接用下面的代码就行:

// 假设你在Slash命令里,已经拿到了interaction对象
const guild = interaction.guild;
if (!guild) return interaction.reply("这个命令只能在服务器内使用哦!");

// 总成员数
const totalMembers = guild.memberCount;
// 筛选机器人并统计数量
const botCount = guild.members.cache.filter(member => member.user.bot).size;
// 人类成员数
const humanCount = totalMembers - botCount;

// 回复信息
await interaction.reply(`
  📊 **服务器成员统计**
  - 总成员数:${totalMembers}
  - 人类用户:${humanCount}
  - 机器人:${botCount}
`);

进阶版(获取所有成员,包括离线)

如果服务器成员较多,缓存里可能没有加载全部成员,这时候可以先调用guild.members.fetch()来拉取所有成员(需要机器人有GUILD_MEMBERS权限):

module.exports = {
  data: new SlashCommandBuilder()
    .setName("serverinfo")
    .setDescription("显示服务器详细信息"),
  async execute(interaction) {
    const guild = interaction.guild;
    if (!guild) return interaction.reply("请在服务器内使用此命令!");

    // 先获取所有成员(包括离线)
    await guild.members.fetch();

    const totalMembers = guild.memberCount;
    const botCount = guild.members.cache.filter(member => member.user.bot).size;
    const humanCount = totalMembers - botCount;

    await interaction.reply({
      embeds: [
        new EmbedBuilder()
          .setTitle(`${guild.name} 服务器信息`)
          .addFields(
            { name: "总成员数", value: `${totalMembers}`, inline: true },
            { name: "人类用户", value: `${humanCount}`, inline: true },
            { name: "机器人", value: `${botCount}`, inline: true }
          )
          .setColor(0x2b2d31)
      ]
    });
  },
};

小提醒

  • 别搞混memberuser对象哦,判断机器人的属性是在member.user.bot上,不是member.bot
  • 上面的代码是Discord.js v14+的写法,如果是旧版本(v12及以下),语法会有小差异,比如guild.members.cache在v12里是guild.members,不过现在大部分项目都用v14+了,这个可以放心用。

内容的提问来源于stack exchange,提问作者Zachary Murphy

火山引擎 最新活动