检索语音频道中的成员

时间:2021-03-20 01:08:57

标签: node.js discord.js

我正在使用 node.js Discord bot 处理一些我正在处理的事情,但在这一点上真的卡住了。我试图在与运行命令的人相同的语音频道中检索所有成员的姓名和 ID。但是,我很难规划出从数据中提取这些内容的最后一步。这是我所拥有的:

client.on('message', message => {
  if (message.author.bot) {
    return;
  }
  if (message.content === '!tausbot sunday') {
      const channeltoCheck = message.member.voice.id;
      console.log('channeltoCheck:');
      console.log(channeltoCheck);

      const membersofChannel = message.guild.members.cache.find(channeltoCheck => channeltoCheck.id == channeltoCheck);
      console.log(membersofChannel);
  
      const myArray = {};

      membersofChannel.each(member => {
          myArray.push(`${member.user.tag} (ID: ${member.user.id})`)
      });

  message.channel.send(`**MEMBERS**\n${myArray.join("\n") || "No members found"}`);
  } 
});

membersofChannel 为我获取到 console.log 的数据,但我需要从中提取用户名和 ID 并将其发布在消息中。任何帮助将不胜感激。

我想我也可能有一个更大的问题 - 虽然我在语音频道中有自己和两个虚拟帐户,但我似乎只拉了一个成员。这是包括成员的位: console view

1 个答案:

答案 0 :(得分:0)

您似乎正在使用 .find 来查找成员。这是行不通的。以下是您应该用来替换它的内容。 .filter 将返回一个可以与之后的代码段一起使用的集合。

.filter(member => member.voice.channelID === channelToCheck);
// Filter by their voice channel

假设您返回的是一个数组或一个单独的 GuildMember,您可以将所有数据放入一个新的数组中。然后,您将使用 Array.join() 连接所有数据。这将它放入一个不错的干净列表中。

const myArray = {}; // Create an Array to put the new data in
membersofChannel.each(member => { // For each member, do...
  myArray.push(`${member.user.tag} (ID: ${member.user.id})`) // Pull the username and ID
});
message.channel.send(`**MEMBERS**\n${myArray.join("\n") || "No members found"}`)
// Separate entries with a new line
// Send the message containing the information

.join("\n") 将用新行分隔每个成员。假设 Joe#0001 和 Bob#0001 在 VC 中,他们运行命令。它将返回以下内容:

<块引用>

成员
乔#0001(ID:1234567890)
鲍勃#0001(ID:1234567890)