【问题标题】:setTimeout() countdown not working Discord JSsetTimeout() 倒计时不工作 Discord JS
【发布时间】:2020-11-20 01:03:35
【问题描述】:

我知道为什么,但是如果我跳过或停止一首歌曲并且队列变空,则机器人断开连接的 timeout2 倒计时不会继续。我在没有 clearTimeout() 的情况下对其进行了测试,并且倒计时有效,所以也许我应该在其他地方声明 cleartimeout 或者在它之外添加一些东西..帮帮我,我想不通

function play(guild, song) {

  const serverQueue = queue.get(guild.id);

  if (!song) {
   

   var timeout = setTimeout(function() {const dispatcher = serverQueue.connection.play('./911.mp3');}, 1500);
   var timeout2 = setTimeout(function() {serverQueue.voiceChannel.leave();}, 10000);
   clearTimeout(timeout2);

  queue.delete(guild.id); 
  return ;

} 

     options = {
    quality: 'highestaudio'
  };

  const dispatcher = serverQueue.connection

    .play(ytdl(song.url, { highWaterMark: 1 << 25 }))
    .on("finish", () => {
      serverQueue.songs.shift();
      play(guild, serverQueue.songs[0]);
    })
    .on("error", error => console.error(error));
  dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
  serverQueue.textChannel.send(":musical_note: Started Playing: " + `**${song.title}**`);



}

【问题讨论】:

  • 为什么会有 clearTimeout 呢?
  • @James 因为如果我在 10 秒倒计时期间播放歌曲,机器人将不再断开连接。
  • 我认为如果他们成功播放歌曲,而不是尝试播放 (!song),您想中止断开连接。也许你需要一个 else 来做 clearTimeout。

标签: javascript discord discord.js settimeout


【解决方案1】:
function play(guild, song) {
    const serverQueue = queue.get(guild.id);
    if (!song) {
        setTimeout(function () {
            const dispatcher = serverQueue.connection.play('./911.mp3');
            setTimeout(function () {
                serverQueue.voiceChannel.leave();
                queue.delete(guild.id);
            }, 8500);
        }, 1500);
    }
    else {
        options = {
            quality: 'highestaudio'
        };
        const dispatcher = serverQueue.connection
            .play(ytdl(song.url, { highWaterMark: 1 << 25 }))
            .on("finish", () => {
                serverQueue.songs.shift();
                play(guild, serverQueue.songs[0]);
            })
            .on("error", error => console.error(error));
        dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
        serverQueue.textChannel.send(":musical_note: Started Playing: " + `**${song.title}**`);
    }
}

这可能适合你的目的

【讨论】:

  • 不太好用,在停止队列之后,然后在 10 秒倒计时中再次开始播放,而不是推动下一首歌曲播放它,而是将那首歌曲放在这 10队列中的秒数(这意味着没有播放歌曲)......这是完整代码textuploader.com/1epzm
猜你喜欢
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-10
  • 2014-12-13
相关资源
最近更新 更多