Attempt to fix sound player disconnect issue
This commit is contained in:
parent
8144a7a115
commit
5d8ecbf90a
2 changed files with 54 additions and 30 deletions
17
events/shardReady.js
Normal file
17
events/shardReady.js
Normal file
|
@ -0,0 +1,17 @@
|
|||
import { players, errHandle } from "../utils/soundplayer.js";
|
||||
|
||||
export default async (client, id) => {
|
||||
for (const player of players.values()) {
|
||||
if (id !== player.voiceChannel.guild.shard.id) return;
|
||||
try {
|
||||
await player.player.connection.connect({
|
||||
guildId: player.voiceChannel.guildID,
|
||||
channelId: player.voiceChannel.id,
|
||||
shardId: player.voiceChannel.guild.shard.id,
|
||||
deaf: true
|
||||
});
|
||||
} catch (e) {
|
||||
errHandle(e, client, player.player, player.playingMessage, player.voiceChannel, { type: "classic" }, true);
|
||||
}
|
||||
}
|
||||
};
|
|
@ -17,6 +17,9 @@ export function connect(client) {
|
|||
manager.on("error", (node, error) => {
|
||||
logger.error(`An error occurred on Lavalink node ${node}: ${error}`);
|
||||
});
|
||||
manager.on("debug", (node, info) => {
|
||||
logger.debug(`Debug event from Lavalink node ${node}: ${info}`);
|
||||
});
|
||||
manager.once("ready", () => {
|
||||
logger.log(`Successfully connected to ${manager.nodes.size} Lavalink node(s).`);
|
||||
connected = true;
|
||||
|
@ -150,36 +153,8 @@ export async function nextSong(client, options, connection, track, info, music,
|
|||
connection.removeAllListeners("end");
|
||||
connection.setVolume(0.70);
|
||||
connection.playTrack({ track });
|
||||
players.set(voiceChannel.guildID, { player: connection, type: music ? "music" : "sound", host: host, voiceChannel: voiceChannel, originalChannel: options.channel, loop, shuffle, playMessage: playingMessage });
|
||||
connection.once("exception", async (exception) => {
|
||||
try {
|
||||
if (playingMessage.channel.messages.has(playingMessage.id)) await playingMessage.delete();
|
||||
const playMessage = players.get(voiceChannel.guildID).playMessage;
|
||||
if (playMessage.channel.messages.has(playMessage.id)) await playMessage.delete();
|
||||
} catch {
|
||||
// no-op
|
||||
}
|
||||
try {
|
||||
connection.node.leaveChannel(voiceChannel.guildID);
|
||||
} catch {
|
||||
// no-op
|
||||
}
|
||||
connection.removeAllListeners("stuck");
|
||||
connection.removeAllListeners("end");
|
||||
players.delete(voiceChannel.guildID);
|
||||
queues.delete(voiceChannel.guildID);
|
||||
logger.error(exception.error);
|
||||
try {
|
||||
const content = `🔊 Looks like there was an error regarding sound playback:\n\`\`\`${exception.type}: ${exception.error}\`\`\``;
|
||||
if (options.type === "classic") {
|
||||
await client.rest.channels.createMessage(options.channel.id, { content });
|
||||
} else {
|
||||
await options.interaction.createFollowup({ content });
|
||||
}
|
||||
} catch {
|
||||
// no-op
|
||||
}
|
||||
});
|
||||
players.set(voiceChannel.guildID, { player: connection, type: music ? "music" : "sound", host, voiceChannel, originalChannel: options.channel, loop, shuffle, playMessage: playingMessage });
|
||||
connection.once("exception", (exception) => errHandle(exception, client, connection, playingMessage, voiceChannel, options));
|
||||
connection.on("stuck", () => {
|
||||
const nodeName = manager.getNode().name;
|
||||
connection.move(nodeName);
|
||||
|
@ -247,3 +222,35 @@ export async function nextSong(client, options, connection, track, info, music,
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
export async function errHandle(exception, client, connection, playingMessage, voiceChannel, options, closed) {
|
||||
try {
|
||||
if (playingMessage.channel.messages.has(playingMessage.id)) await playingMessage.delete();
|
||||
const playMessage = players.get(voiceChannel.guildID).playMessage;
|
||||
if (playMessage.channel.messages.has(playMessage.id)) await playMessage.delete();
|
||||
} catch {
|
||||
// no-op
|
||||
}
|
||||
players.delete(voiceChannel.guildID);
|
||||
queues.delete(voiceChannel.guildID);
|
||||
skipVotes.delete(voiceChannel.guildID);
|
||||
logger.error(exception);
|
||||
try {
|
||||
connection.node.leaveChannel(voiceChannel.guildID);
|
||||
} catch {
|
||||
// no-op
|
||||
}
|
||||
if (closed) connection.removeAllListeners("exception");
|
||||
connection.removeAllListeners("stuck");
|
||||
connection.removeAllListeners("end");
|
||||
try {
|
||||
const content = closed ? `🔊 I got disconnected by Discord and tried to reconnect; however, I got this error instead:\n\`\`\`${exception}\`\`\`` : `🔊 Looks like there was an error regarding sound playback:\n\`\`\`${exception.type}: ${exception.error}\`\`\``;
|
||||
if (options.type === "classic") {
|
||||
await client.rest.channels.createMessage(playingMessage.channel.id, { content });
|
||||
} else {
|
||||
await options.interaction.createFollowup({ content });
|
||||
}
|
||||
} catch {
|
||||
// no-op
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue