音频机器人在执行相同命令时离开频道

时间:2018-07-26 16:56:04

标签: javascript node.js bots discord discord.js

最近我一直在制作我的第一个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(); 
            });
        });          
    }
});

非常感谢您的帮助。

1 个答案:

答案 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);
        }     
    }
});