diff --git a/app/assets/js/discordwrapper.js b/app/assets/js/discordwrapper.js index 753ea3da..0e2de3fe 100644 --- a/app/assets/js/discordwrapper.js +++ b/app/assets/js/discordwrapper.js @@ -1,37 +1,57 @@ const logger = require('./loggerutil')('%c[DiscordWrapper]', 'color: #7289da; font-weight: bold') +const {Client} = require('discord-rpc-patch') + +const user_text = document.getElementById('user_text') + const t = require("../../../package.json") -let rpc = require("discord-rpc") +let client +let activity -const client = new rpc.Client({ transport: 'ipc' }) +exports.initRPC = function(initialDetails = 'Dans le launcher..'){ + client = new Client({ transport: 'ipc' }) -client.on("ready", () => { - logger.log('Discord RPC Connected') - - client.request('SET_ACTIVITY', { - - pid: process.pid, - activity: { - assets: { - large_image: "pdp" - }, - //details: "kuku", - state: "Serveur Minecraft Communautaire !", - buttons: [{ label: "Discord", url: "https://discord.gg/RspuRbNn4M"}, { label: "Rejoins nous !", url: `https://github.com/luki-39/LukiEnLiveLauncher/releases/download/v${t.version}/LukiEnLiveLauncher-setup-${t.version}.exe`}], - } - - }) - - logger.log(`Connecté à l'utilisateur: ${client.user.username}#${client.user.discriminator}`); - -}) - - -client.login({clientId: "946067255295369248"}).catch(error => { - if(error.message.includes('ENOENT')) { - logger.log('Unable to initialize Discord Rich Presence, no client detected.') - } else { - logger.log('Unable to initialize Discord Rich Presence: ' + error.message, error) + activity = { + details: initialDetails, + state: 'Serveur: 1.18.2', + buttons: [{ label: "🎮 Discord", url: "https://discord.gg/RspuRbNn4M"}, { label: "📥 Launcher !", url: `https://github.com/luki-39/LukiEnLiveLauncher/releases/download/v${t.version}/LukiEnLiveLauncher-setup-${t.version}.exe`}], + largeImageKey: "minecraft", + largeImageText: "discord.gg/9qW6JyUMEf", + smallImageKey: "pdp", + smallImageText: `${user_text.innerHTML}`, + startTimestamp: new Date().getTime(), + instance: false } -}) \ No newline at end of file + + client.on('ready', () => { + logger.log('Discord RPC Connected') + client.setActivity(activity) + }) + + client.login({clientId: "946067255295369248"}).catch(error => { + if(error.message.includes('ENOENT')) { + logger.log('Unable to initialize Discord Rich Presence, no client detected.') + } else { + logger.log('Unable to initialize Discord Rich Presence: ' + error.message, error) + } + }) +} + +exports.resetTime = function(){ + activity.startTimestamp = new Date().getTime() + client.setActivity(activity) +} + +exports.updateDetails = function(details){ + activity.details = details + client.setActivity(activity) +} + +exports.shutdownRPC = function(){ + if(!client) return + client.clearActivity() + client.destroy() + client = null + activity = null +} \ No newline at end of file diff --git a/app/assets/js/scripts/landing.js b/app/assets/js/scripts/landing.js index 6e269f31..bf0c44e2 100644 --- a/app/assets/js/scripts/landing.js +++ b/app/assets/js/scripts/landing.js @@ -404,8 +404,8 @@ function asyncSystemScan(mcVersion, launchAfter = true){ // Keep reference to Minecraft Process let proc -// Is DiscordRPC enabled -//let hasRPC = false + +let hasRPC= false // Joined server regex // Change this if your server uses something different. const GAME_JOINED_REGEX = /\[.+\]: Sound engine started/ @@ -595,10 +595,10 @@ function dlAsync(login = true){ const onLoadComplete = () => { toggleLaunchArea(false) - /*if(hasRPC){ - DiscordWrapper.updateDetails('Loading game..') - }*/ - //proc.stdout.on('data', gameStateChange) + if (hasRPC){ + DiscordWrapper.updateDetails('Jeu en cours de chargement..') + } + proc.stdout.on('data', gameStateChange) proc.stdout.removeListener('data', tempListener) proc.stderr.removeListener('data', gameErrorListener) } @@ -619,6 +619,21 @@ function dlAsync(login = true){ } } + const gameStateChange = function(data){ + data = data.trim() + if(SERVER_JOINED_REGEX.test(data)){ + if(hasRPC){ + DiscordWrapper.updateDetails('Exploration du Serveur !') + DiscordWrapper.resetTime() + } + } else if(GAME_JOINED_REGEX.test(data)){ + if(hasRPC){ + DiscordWrapper.updateDetails('En route vers le Serveur !') + DiscordWrapper.resetTime() + } + } + } + const gameErrorListener = function(data){ data = data.trim() if(data.indexOf('Could not find or load main class net.minecraft.launchwrapper.Launch') > -1){ @@ -637,6 +652,15 @@ function dlAsync(login = true){ setLaunchDetails('Terminé. Profitez du serveur!') + proc.on('close', (code, signal) => { + if(hasRPC){ + DiscordWrapper.updateDetails('Dans le launcher..') + DiscordWrapper.resetTime() + } + proc = null + }) + + } catch(err) { loggerLaunchSuite.error('Error during launch', err) diff --git a/app/assets/js/scripts/uibinder.js b/app/assets/js/scripts/uibinder.js index 7d65ee61..d91408f5 100644 --- a/app/assets/js/scripts/uibinder.js +++ b/app/assets/js/scripts/uibinder.js @@ -68,6 +68,12 @@ function showMainUI(data){ prepareSettings(true) updateSelectedServer(data.getServer(ConfigManager.getSelectedServer())) refreshServerStatus() + + if (!hasRPC) { + DiscordWrapper.initRPC() + hasRPC = true + } + setTimeout(() => { document.getElementById('frameBar').style.backgroundColor = 'rgba(0, 0, 0, 0.5)' document.body.style.backgroundImage = `url('assets/images/backgrounds/${document.body.getAttribute('bkid')}.png')` diff --git a/app/settings.ejs b/app/settings.ejs index 1ebffa75..f024b764 100644 --- a/app/settings.ejs +++ b/app/settings.ejs @@ -299,10 +299,10 @@
- Source (GitHub) + - Original Source - Support + + Support DevTools Console
@@ -324,7 +324,7 @@