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

setTimeout js和语音通道discordjs

周阳成
2023-03-14

首先我很抱歉我的英语不好。我正在开发一个不和谐的音乐机器人,我想添加一个功能,让机器人在与语音频道断开连接之前停留30秒(当空闲=所有音乐结束时没有播放更多)

async function play(guild, song) {
    const serverQueue = queue.get(guild.id);
    if (!song) {
        setTimeout(function() {serverQueue.voiceChannel.leave();}, 30000);
        queue.delete(guild.id);
        return;
    }
    console.log(serverQueue.songs);
    const dispatcher = serverQueue.connection.playOpusStream(await ytdl(song.url))
        .on('end', reason => {
            console.log(reason)
            serverQueue.songs.shift()
            play(guild, serverQueue.songs[0])
        })
        .on('error', error => console.error(error));
    serverQueue.textChannel.send(`\`\`\`Start playing : ${song.title}\`\`\``);
}

但我想让它立即与语音通道断开,并在使用“停止”命令时结束一切

else if (command === 'play') {

    const voiceChannel = message.member.voiceChannel;
    ...
}
else if (command === 'stop') {
    if (!message.member.voiceChannel) return message.channel.send("you are not in a voice channel")
    if (!serverQueue) return message.channel.send("nothing to stop!")
    serverQueue.songs = []
    serverQueue.connection.dispatcher.end();

    serverQueue.voiceChannel.leave();

    return undefined;
}
else if (command === 'next') {
    if (!message.member.voiceChannel) return message.channel.send("you are not in a voice channel")
    if (!serverQueue) return message.channel.send("nothing!")
    serverQueue.connection.dispatcher.end();
    message.channel.send("```Next music!```");
    return undefined;
}

当它播放完一段音乐后,等待30秒,然后断开连接,好吗!但问题是:如果有人在等待30秒时使用“播放”命令,它会播放他的音乐曲目,但在30秒后它会剪切所有内容(即使第二首曲目没有结束)

.

共有1个答案

盖斌
2023-03-14

您需要将设置超时分配给变量。再次播放时,请使用clearTimeout功能。取消服务器队列。语音频道。leave()。

文档解释了如何在这里使用它

 类似资料:
  • 我正在为我朋友组的游戏服务器开发一个discord机器人。我想添加一个命令,使语音频道中的每个人都静音。我想这是可以工作,但它返回时不是一个函数,导致机器人崩溃。这是的工作原理是,它将服务器静音发送消息的成员,但显然不是我想要的整个频道。我对不和谐是全新的。js和文档有点混乱。谢谢你的时间!

  • 我目前正在制作一个音乐不和谐机器人。我的问题是在命令的第一行:即使用户在语音频道中,语音频道也被标记为未定义,并且bot返回“您必须在语音频道中才能使用此命令”

  • 我正在制作一个不和谐机器人来跟踪在语音频道上花费的时间,但我想知道我是如何做到的,它不计算在某个频道上的成员的时间,比如afk频道。 这是我现在正在使用的事件

  • 我搜索了整个Stack Overflow,发现了很多关于如何将一个或所有成员移动到语音频道的问题,但答案不符合我的需要,当我尝试让他们看看我是否可以更改它们以满足我的需要时,他们不起作用。 在我的不和谐服务器上,如果你加入了一个名为加入创建频道的语音频道,我希望我的机器人制作一个这样命名的语音频道: f'{成员}的频道',然后自动将该人移动到该频道。我可以让机器人通过使用等待克隆(名称,原因)来制

  • 我想制造一个播放音频文件的不和谐机器人。现在,它加入语音通道并播放音频文件,但之后拒绝离开。我的代码在下面。谁能建议一些修复,使我的机器人将离开语音频道?

  • 有了一个机器人,我试着用discord在一个音频通道中播放一个音频文件(mp3)。js、ffmpeg和opusscript。 基本上,这就是它的工作原理: 因此,音频播放,但在结束前停止(例如,对于5s音频文件,它在3s后停止)。机器人留在频道中,我可以再次播放,但对于我的所有文件,它在结束前停止。我怎样才能解决这个问题?