当前位置: 首页 > 知识库问答 >
问题:

运行同一命令时,音频机器人离开频道

吴均
2023-03-14

我最近制作了我的第一个discord机器人,我终于用下面的代码获得了通过机器人播放的音频。但是,如果与bot处于同一频道的人再次使用同一命令,bot将停止播放其音频并离开该频道。此外,我将如何使它,使机器人无法切换频道之前,它已经完成播放其音频。(注意:bot从包含mp3文件的URL播放音频,而不是使用YouTube插件,因为我只希望它为一些私人服务器播放特定内容)以下是代码:

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个答案

季嘉良
2023-03-14

我不知道API中是否有一种方法可以获取bot的当前通道。但是,一种方法是将bot所在的通道存储在变量中。

这只是在加入通道时设置一个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);
        }     
    }
});
 类似资料:
  • 因此,这个discord机器人只是加入输入命令的人的语音通道,播放音频文件,然后离开<机器人成功加入语音频道,开始播放音频,在结束前离开。它不是在音频文件完成之前机器人离开,因为在删除机器人离开的能力后,它仍然在同一点被切断。这是我的代码: 我已经在这个问题上绞尽脑汁好几个小时了,但我似乎无法确定为什么会发生这种情况。感谢任何帮助!

  • 我正在开发一个播放音乐的discord机器人。我已经设法让机器人离开通道,但服务器中的任何人都可以断开它。 我试图添加一个if语句,该语句要求命令作者的语音通道连接等于该帮会中机器人的语音通道连接。 这返回: 我在留档上找不到任何定义机器人连接到哪个公会的语音频道的东西。

  • 问题内容: 我想知道这里是否有人知道如何将NAO机器人音频流传输到python中的远程模块,以及您是否有示例。我想直接在笔记本电脑上获取NAO音频缓冲区以进行处理,因此无需录制和scp或其他操作。 现在我的问题是这样的:aldebaran网站说,为了远程(在我的笔记本电脑上)接收音频,我必须编写一个继承自ALSoundExtractor的模块。事实是,此类未包含在python SDK中,因此,如果

  • 尝试制作一个简单的音乐机器人,只播放一个链接,但它不连接到语音通道,因此不会出现任何错误,所以我只能放入所有代码。这是我的主要内容。js公司 这是我的音乐机器人命令,我认为它是正确的,因为我已经在这里请求了一些人的帮助。

  • 所以我尝试制作一个机器人,当有人加入我的discord服务器的语音通道时,它可以通知我的线路组。问题是,我的朋友经常通过反复离开和加入语音频道来玩我的机器人,如果有人加入语音频道,我的机器人会在我的通话组中发送垃圾邮件。所以,如果用户已经离开语音频道5分钟并再次加入语音频道,我需要帮助使我的机器人只通知我的线路组

  • 这是很新的。我一直在阅读readthedocs API参考资料以了解不和谐。这对我来说没什么意义。到目前为止我有 我们的目标是让机器人加入带有的用户加入的语音频道,但我在让机器人加入频道时遇到了麻烦。