最近我一直在制作我的第一个Discord机器人,最后使用下面的代码获得了要在该机器人中播放的音频。但是,如果与漫游器在相同频道中的人再次使用相同的命令,则漫游器将停止播放其音频并离开该频道。 另外,我该怎么做,以使机器人无法在播放完音频之前切换频道。 (注意:该漫游器不包含YouTube插件,而是播放包含mp3文件的网址中的音频,因为我只希望它为一些私有服务器播放特定内容) 代码如下:
client.on('message', (message) => {
if (message.content == '!play EXAMPLE') {
var channel = message.member.voiceChannel;
if (!channel)
message.channel.sendMessage ('You need to be in a voice channel to use this command.');
if (!channel)
return console.error("The channel does not exist!");
channel.join().then(connection => {
const dispatcher = connection.playArbitraryInput("URL TO AUDIO FILE");
dispatcher.on("end", end => {
channel.leave();
});
});
}
});
非常感谢您的帮助。
答案 0 :(得分:0)
我不知道API中是否存在获取机器人当前通道的方法。但是,一种方法是将漫游器的频道存储在变量中。
这仅在加入频道时设置botChannel
变量,而在离开频道时取消设置。因此,在加入会员频道之前,您可以检查频道是否已设置。
我拆分了代码,以使其更易于可视化(至少对我来说是这样)
let botChannel = undefined;
const joinChannel = (channel) => {
channel.join().then(connection => {
botChannel = channel;
playAudio(connection, 'AUDIO URL');
});
}
const leaveChannel = () => {
botChannel.leave();
botChannel = undefined;
};
const playAudio = (connection, audioUrl) => {
const dispatcher = connection.playArbitraryInput(audioUrl);
dispatcher.on("end", end => {
leaveChannel();
});
};
client.on('message', (message) => {
if (message.content == '!play EXAMPLE') {
var channel = message.member.voiceChannel;
if (!channel) {
message.channel.sendMessage('You need to be in a voice channel to use this command.');
return console.error("The channel does not exist!");
}
if (!botChannel) {
joinChannel(channel);
}
}
});