(Discord.js) Как мне подключить всех участников к голосовым каналам категории? - PullRequest
0 голосов
/ 13 июня 2019

Итак, я делаю команду под названием "movedebat", чтобы переместить всех участников, подключенных к речевым каналам категории канала, в канал, предназначенный для дебатов.

Чтобы достичь своей цели, я пытаюсь получить список всех подключенных участников, затем использовать цикл for (member in members) и перемещать каждого из членов.

    let debate_channel = message.guild.channels.find(c => c.id === '497910775512563742');
    let group_of_channels = message.guild.channels.find(c => c.id === '497908108803440653');
    let connected_members = message.guild.channels.filter((c => parentID === group_of_channels.id)&&(c => c.type == 2)).members;
    if(message.member.permissions.has('ADMINISTRATOR')){
        for(connected_member in connected_members){
            console.log(connected_member.id); 
            connected_member.setVoiceChannel(debate_channel)
                .then(() => console.log(`Moved ${connected_member.displayName}`))
                .catch(console.error);
        }
    }

Проблема в том, что он вообще не работает. Я не получаю никакой ошибки, ни самим ботом в разногласиях, ни в консоли. Единственное, что я получаю, - это предупреждение DeprecationWarning: Collection#filterArray: use Collection#filter instead, но я прогуглил его, и люди, казалось, говорили, что это не важно. я думаю, что проблемная строка - это 'let connected_members (...) members;' один. Я должен упомянуть, что я ожидаю увидеть по крайней мере 1 идентификатор члена в моей консоли, но я не получаю ни одного, это означает, что цикл for не «выполняется».

Спасибо, что читаете меня, я надеюсь, что кто-то может помочь! ^^

1 Ответ

0 голосов
/ 13 июня 2019
  • Когда вы объявляете connected_members, вы должны использовать функцию single в Collection.filter().

  • Collection.filter() возвращает другую коллекцию, из которых members не является собственностью.Вам нужно будет перебрать каждый канал , чтобы получить его членов.

  • for...in "перебирает все несимвольные, перечисляемые свойства объекта"(MDN).В коллекции ( Map ) элементы являются не свойствами, а парами ключ-значение.Вместо этого в этом контексте вы можете использовать for...of.

if (message.member.permissions.missing('ADMINISTRATOR')) return;

const channels = message.guild.channels.filter(c => c.parentID === '497908108803440653' && c.type === 'voice');

for (const [channelID, channel] of channels) {
  for (const [memberID, member] of channel.members) {
    member.setVoiceChannel('497910775512563742')
      .then(() => console.log(`Moved ${member.user.tag}.`))
      .catch(console.error);
  }
}

Примечание: используйте Map.get() для нахождения значения из коллекцииего ID.

...