【发布时间】: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