feat(lavalink): Migrate from Erela.js to Shoukaku for music playback management

This commit is contained in:
2025-04-24 00:25:02 +08:00
parent 5a29fe3d9d
commit e54c23cc63
5 changed files with 401 additions and 168 deletions

View File

@@ -1,6 +1,6 @@
const { Events } = require('discord.js');
const { Events, ActivityType } = require('discord.js');
const logger = require('../utils/logger');
const loadErelaEvents = require('../structures/ErelaEvents'); // Import the Erela event loader
const { setupPlayer } = require('../structures/ShoukakuEvents'); // Import the Shoukaku player
module.exports = {
name: Events.ClientReady,
@@ -8,37 +8,16 @@ module.exports = {
async execute(client) {
logger.info(`Ready! Logged in as ${client.user.tag}`);
// Wait a moment before initializing Erela.js to give Lavalink time to start up
// This is especially important in Docker environments
await new Promise(resolve => setTimeout(resolve, 5000)); // 5 second delay
// Initialize the Erela Manager once the client is ready
// Initialize the Shoukaku music player
try {
// Log the actual connection details being used (without exposing the password)
const node = client.manager.nodes[0];
logger.info(`Attempting to connect to Lavalink at ${node.options.host}:${node.options.port} with identifier "${node.options.identifier}"`);
client.manager.init(client.user.id);
logger.info(`Erela.js Manager initialized for user ID: ${client.user.id}`);
// Load Erela.js event handlers
loadErelaEvents(client);
// Set up the music player with the client
client.player = setupPlayer(client);
logger.info('Shoukaku music player initialized successfully');
} catch (error) {
logger.error(`Failed to initialize Erela.js Manager: ${error.message}`);
// Try to reconnect after a delay if initialization fails
setTimeout(() => {
try {
client.manager.init(client.user.id);
logger.info(`Erela.js Manager initialization retry successful`);
loadErelaEvents(client);
} catch (retryError) {
logger.error(`Retry initialization also failed: ${retryError.message}`);
}
}, 10000); // 10 second delay before retry
logger.error(`Failed to initialize Shoukaku music player: ${error.message}`);
}
// Set activity status
client.user.setActivity('Music | /play', { type: 'LISTENING' });
client.user.setActivity('Music | /play', { type: ActivityType.Listening });
},
};