我正在制作一个不和谐的机器人,但遇到一个问题,如果我在聊天中键入$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
})
})
}
答案 0 :(得分:1)
您需要检查语音连接的频道是否与您要加入的频道相同:如果是,则无需执行任何操作(您已经在频道中),否则,请加入声音等...
您可以使用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 })
}