【问题标题】:Discord.js Voice Connection TimeoutDiscord.js 语音连接超时
【发布时间】:2021-03-29 00:03:13
【问题描述】:

我目前正在努力解决我的 discord.js 机器人通过 url 播放音乐流的问题。一切正常,但大约 12 小时后,所有玩家断开连接,我收到以下错误消息:[VOICE_CONNECTION_TIMEOUT]: Connection not established within 15 seconds.

这是我加入/离开频道的代码:

function join(voiceChannel, volume = 20) {
    return new Promise((resolve, reject) => {
        voiceChannel.join().then(vc => {
            vc.voice.setSelfDeaf(true);

            const dispatcher = vc.play(streamURL);
            dispatcher.once('start', () => {
                dispatcher.setBitrate(64);
                dispatcher.setVolumeLogarithmic(volume / 100);

                setTimeout(() => {
                    if (voiceChannel.members.filter(m => !m.user.bot).size === 0) dispatcher.pause(true);
                }, 1500);

                resolve();
            });

            // Tried to reconnect on error but does not seem to work
            dispatcher.on('error', () => {
                leave(voiceChannel.guild);
                setTimeout(() => join(voiceChannel, volume), 5000);
            });
        }).catch(err => reject(err));
    });
}

function leave(guild) {
    guild.me?.voice?.connection?.disconnect();
}

如果没有人在听,我也设置了这个事件来暂停流:

client.on('voiceStateUpdate', (oldState, newState) => {
    const state = oldState || newState;
    if (state?.member.user.bot) return;

    const guild = state?.guild;
    if (!guild?.me?.voice?.connection) return;
    if (newState.channel === oldState.channel) return;

    Guild.findOne({guildId: guild.id}, (err, dbGuild) => {
        if (err || !dbGuild) return;

        const channel = guild.channels.cache.get(dbGuild.musicChannelId);
        if (!channel || !guild.me.voice.connection.dispatcher) return;

        const dispatcher = guild.me.voice.connection.dispatcher;
        if (channel.members.filter(m => !m.user.bot).size > 0 && dispatcher.paused) {
            dispatcher.resume();
            return;
        }

        if (!dispatcher.paused && channel.members.filter(m => !m.user.bot).size === 0) {
            dispatcher.pause(true);
        }
    });
});

也许有人可以帮助我解决这个问题。我不知道如何解决这个错误。

【问题讨论】:

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


    【解决方案1】:

    这个错误在 Discord.JS 包中很常见。问题是 Discord 不完全支持机器人的语音连接,因此这与您的代码无关。 Discord.JS 建议您使用他们的voice package 在语音通道中播放音频。 Here 是他们的文档,here 是他们的一些示例。

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 2021-04-10
      • 2022-01-21
      • 1970-01-01
      • 2021-11-21
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多