如何查看机器人当前已加入语音频道的成员规模?如何将语音频道当前连接人数集成至/info命令?
嘿,我来帮你搞定这个问题!其实获取机器人所在语音频道的成员数并整合到/info命令里很简单,咱们一步步来:
获取机器人当前已加入的语音频道成员规模
你之前尝试的client.voice.adapters是对的方向,但需要从里面拿到对应的语音频道对象才能获取成员数据。这里有个实用的代码片段:
// 遍历机器人所有的语音连接 client.voice.adapters.forEach((adapter, guildId) => { // 从连接实例中获取对应的语音频道 const voiceChannel = adapter.channel; if (voiceChannel) { // 计算频道内的成员数(减去1是排除机器人自身,不需要的话可以去掉) const onlineMembers = voiceChannel.members.size - 1; console.log(`服务器 ${guildId} 的「${voiceChannel.name}」频道当前有 ${onlineMembers} 名成员`); } });
这里的关键是voiceChannel.members——它是一个包含频道内所有成员的集合,直接用.size就能拿到总人数,再根据需求决定是否排除机器人自己。
将语音频道人数整合到/info命令中
假设你用的是Discord.js的Slash命令系统,下面是整合后的示例代码,直接就能用到你的项目里:
const { SlashCommandBuilder } = require('discord.js'); module.exports = { data: new SlashCommandBuilder() .setName('info') .setDescription('查看机器人的状态信息'), async execute(interaction) { // 获取当前服务器的语音连接实例 const voiceConnection = client.voice.adapters.get(interaction.guildId); let voiceStatus = "🤷 目前未加入任何语音频道"; if (voiceConnection) { const channel = voiceConnection.channel; const memberCount = channel.members.size - 1; voiceStatus = `🎤 当前在语音频道 **${channel.name}**,共有 ${memberCount} 名成员在线`; } // 给用户回复整合后的信息 await interaction.reply({ content: `### 🤖 机器人状态信息\n${voiceStatus}`, ephemeral: false }); }, };
额外注意事项
- 如果你用的是Discord.js v13或更早版本,
client.voice.adapters要换成client.voice.connections,逻辑完全一致。 - 确保机器人拥有
ViewChannel权限,不然无法获取语音频道的成员数据。
内容的提问来源于stack exchange,提问作者Term
相关产品推荐
相关产品推荐

