Если бот находится в канале, игнорируйте команду присоединения - PullRequest
0 голосов
/ 25 мая 2020

Я создаю бота Discord, и у меня возникла проблема: если я наберу $join в чате, я хочу, чтобы бот подключился к голосовому каналу, в котором я нахожусь, и воспроизвел звук. Это работает, но когда бот уже находится в голосовом канале, и я снова набираю $join, он просто снова воспроизводит звук, и я хочу, чтобы он воспроизводил звук только один раз, когда он подключается к каналу. Я попытался решить эту проблему с помощью некоторых функций if, else и return, но это не сработало, спасибо за помощь.

Это мой код, работающий так, как я описал.

message.delete({
  timeout: 5000
})
const voiceChannel = message.member.voice.channel
if (voiceChannel) {
  const connection = await voiceChannel.join()
  const dispatcher = connection.play("./sounds/xxx.mp3")
  dispatcher.setVolume(0.5)
} else {
  message.reply("you need to be in a voice channel!").then(message => {
    message.delete({
      timeout: 5000
    })
  })
}

1 Ответ

1 голос
/ 25 мая 2020

Вам необходимо проверить, совпадает ли канал вашего голосового соединения с тем, к которому вы собираетесь присоединиться: если да, вам не нужно ничего делать (вы уже находитесь в канале), иначе вы присоединитесь, сделайте звук et c ...
Вы можете сделать это с помощью VoiceConnection.channel

Вот как я бы это сделал:

const voiceChannel = message.member.voice.channel
if (voiceChannel) { 
  // Check if any of the ALREADY EXISTING connections are in that channel, if not connect
  if (!client.voice.connections.some(conn => conn.channel.id == voiceChannel.id)) {
    const connection = await voiceChannel.join()
    const dispatcher = connection.play("./sounds/xxx.mp3")
    dispatcher.setVolume(0.5)
  } // else: you're already in the channel
} else {
  let m = await message.reply("You need to be in a voice channel!")
  m.delete({ timeout: 5000 })
}
...