如何让我的不和谐机器人等到当前歌曲结束而不是在添加新歌曲时跳过队列中的当前歌曲

Posted

技术标签:

【中文标题】如何让我的不和谐机器人等到当前歌曲结束而不是在添加新歌曲时跳过队列中的当前歌曲【英文标题】:How do i make my discord bot wait till the current song has ended rather than skipping the current song in the queue when a new one is added 【发布时间】:2020-12-21 20:34:03 【问题描述】:

我正在尝试为我的机器人制作一个不和谐的音乐机器人功能。每当我使用播放命令时,机器人都会停止播放当前歌曲并立即开始播放我排队的新歌曲,我如何让它等待当前歌曲结束然后移动到队列中的下一首。

var servers = ;

function play(connection, message) 
    var server = servers[message.guild.id];
    const dispatcher = connection.play(ytdl(server.queue[0],  filter: 
        "audioonly" ));

    server.dispatcher = connection.play(ytdl(server.queue[0],  filter: 
    "audioonly" ));

    dispatcher.on('error', console.error);

    server.dispatcher.setVolume(0.2);

    server.dispatcher.on("end", function () 

        server.queue.shift();

    if (server.queue[0]) play(connection, message);
    else connection.disconnect();

);



Crashbot.on('message', async message =>

    let args = message.content.substring(PREFIX.length).split(" ");

switch (args[0]) 
 case "play":
        if (!args[1]) 
            message.reply(`You need to put a link after $PREFIXplay to add a song to the queue`)
            return;
        
        if (!message.member.voice.channel) 
            message.channel.send("You must be in a voice channel to use this command")
            return;
        
        if (!servers[message.guild.id]) servers[message.guild.id] = 
            queue: []
        
        var server = servers[message.guild.id];

        server.queue.push(args[1]);

        if (!message.guild.voiceConnection) message.member.voice.channel.join().then(function (connection) 
                play(connection, message);
        );
        break;
 case "skip":
        var server = servers[message.guild.id];

        if (server.dispatcher) server.dispatcher.end();
        break;

 case "stop":
        var server = servers[message.guild.id];

        if (message.guild.voiceConnection) message.guild.voiceConnection.disconnect();
        break;


)

【问题讨论】:

【参考方案1】:

您需要通过变量保持当前播放歌曲的状态,或者查看您用于播放歌曲的库以查看是否有状态检查。

选项 1

全局状态或创建一个包含状态的播放实例的类。然后当播放结束或由于有人点击停止而断开连接时,您会更改状态。

这个想法是当用户点击播放以将新歌曲添加到队列中,并且状态为paused/stopped 然后播放歌曲。如果状态是playing,那么你只需将歌曲添加到队列中,不要调用播放函数

选项 2

取决于您的图书馆,因此请查看文档以更好地了解当前播放状态的可用内容。完成后,请按照选项 1 中提供的相同状态检查

【讨论】:

以上是关于如何让我的不和谐机器人等到当前歌曲结束而不是在添加新歌曲时跳过队列中的当前歌曲的主要内容,如果未能解决你的问题,请参考以下文章

发送某些单词时如何让我的不和谐机器人发送附件

如何让我的不和谐机器人播放 YouTube 上的音乐(无链接)?

我试图向我的不和谐机器人添加播放命令,但是

如何让我的不和谐机器人回复“跟进”消息

如何让我的不和谐机器人响应没有前缀的消息

如何让我的不和谐机器人列出某个角色的人?