Как ожидать, чтобы получить все голосовые каналы с X людьми в discord.js V12?

#javascript #node.js #async-await #fetch #discord.js

#javascript #node.js #асинхронный-ожидание #извлечение #discord.js

Вопрос:

Я создаю Discord-бота с discord.js V12. Я хочу создать команду для ожидания, чтобы получить все каналы с X людьми или более, но я не знаком с ожиданием и извлечением. Вот мой код на данный момент:

Команда:

     else if (command === 'find') {
        if (!args.length) {
            const findHelp = new Discord.MessageEmbed()
            .setTitle('Finding')
            .setDescription('Help')
            .addField('Usage', 'Find a free spot on a voice channel amp; automaticly join for best Among Us experience!')
            .addField('Commands', '`/find <members>` Find a voice channel with minimum of `<members>` people in it.')
            .setColor(0xE92323);
            message.channel.send(findHelp);
        } else if (args.length === 1) {
            const memberMin = args[0];
            const channel = await (fetch(channels.first.members.length(memberMin)))
            message.author.join(channel);
        }
    }
  

Я пробовал без ожидания или выборки, но это все равно не работает, выдавая ошибку.

Спасибо, что нашли время, чтобы помочь мне 🙂

Ответ №1:

Предполагая, что ваше сообщение исходит от гильдии, вы можете использовать кэш каналов.

 const memberMin = args[0]
const voiceChannels = message.guild.channels.cache.filter(c => c.type == 'voice') // Collection<VoiceChannel>

const yourVoiceChannels = voiceChannels.filter(c => c.members.length >= memberMin) // Collection<VoiceChannel>
  

Если вы отредактировали поведение кэширования, вам нужно будет получить каналы и / или гильдию, прежде чем читать их свойства. Вы можете сделать это, например, с помощью:

 const guild = await message.guild.fetch()
  

Комментарии:

1. Я думаю, что это сработает, но у меня другая проблема — как отправить автора сообщения на первый выбранный канал? Я пытался message.member.voice.setChannel(yourVoiceChannels.first()); , но это не работает, и ошибок не выдается.