#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());
, но это не работает, и ошибок не выдается.