Discord Rich Presence – JavaScript – Foros de SitePoint
¡Hola! Extremadamente nuevo en javascript y estoy tratando de usar discordjs-rpc, que cambiará mi estado para algunas ventanas seleccionadas según la ventana que esté activa actualmente. (alrededor de 4 o más)
Pude obtener una secuencia de comandos separada que podía hacer esto, pero solo bajo un “rpc.login ({ clientId })”… El problema con esto es que realmente me gustaría tener una ID de cliente separada para cada aplicación. para que el nombre del estado pueda reflejar correctamente qué ventana está activa. No tuve suerte con comandos como rpc.logout (que dice que no existe como comando)
He intentado tantas cosas pero parece que no puedo hacer que funcione, en este momento solo da errores y sigo recibiendo ventanas emergentes de Power-Shell que rápidamente no hacen nada después de cambiar a este nuevo método de prueba spawn.node. y cerrarlos obligándolos a terminar en el administrador de tareas. No estoy seguro de como arreglar esto. El código es un poco largo, creo que probablemente debería publicarlo todo para que la gente pueda tener una idea de lo que estoy tratando de hacer.
Ejecuto esto usando ‘npm run’ en la ventana de git bash. Todavía no he aprendido a hacer esto con Visual Studio. Esta es la biblioteca que uso, discordjs rpc
Script principal principal (me gustaría realizar un seguimiento de cuándo ciertas ventanas están activas, y cuando están activas debería ejecutar otro script que idealmente ejecute rpc.login).
const DiscordRPC = require('discord-rpc');
const monitor = require('node-active-window');
const { spawn } = require('child_process');
const clientIdGame1 = '00000000000000000';
//const clientIdGame2 = '00000000000000000000';
//const clientIdGame3 = '000000000000000000000';
//const clientIdGame4 = '0000000000000000000000';
const rpcGame1 = new DiscordRPC.Client({ transport: 'ipc' });
const rpcGame2 = new DiscordRPC.Client({ transport: 'ipc' });
const rpcGame3 = new DiscordRPC.Client({ transport: 'ipc' });
const rpcGame4 = new DiscordRPC.Client({ transport: 'ipc' });
DiscordRPC.register(clientIdGame1);
//DiscordRPC.register(clientIdGame2);
//DiscordRPC.register(clientIdGame3);
//DiscordRPC.register(clientIdGame4);
let activeRpc;
async function setActivity() {
monitor.getActiveWindow((err, window) => {
if (err) {
console.error(err);
return;
}
const windowTitle = window.title;
if (windowTitle.includes('Game1')) {
activeRpc = rpcGame1;
spawn('node', ['Game1.js'], { detached: true, stdio: 'ignore' });
}
});
}
rpcGame1.on('ready', async () => {
setActivity();
setInterval(() => {
setActivity();
}, 15 * 1000);
});
rpcGame2.on('ready', async () => {
setActivity();
setInterval(() => {
setActivity();
}, 15 * 1000);
});
rpcGame3.on('ready', async () => {
setActivity();
setInterval(() => {
setActivity();
}, 15 * 1000);
});
rpcGame4.on('ready', async () => {
setActivity();
setInterval(() => {
setActivity();
}, 15 * 1000);
});
rpcGame1.login({ clientId: clientIdGame1 }).catch(console.error);
//rpcGame2.login({ clientId: clientIdGame2 }).catch(console.error);
//rpcGame3.login({ clientId: clientIdGame3 }).catch(console.error);
//rpcGame4.login({ clientId: clientIdGame4 }).catch(console.error);
Uno de los 4 guiones del juego:
const DiscordRPC = require('discord-rpc');
const monitor = require('node-active-window');
const { spawn, exec } = require('child_process');
const clientId = '00000000000000'; //my client id
const rpc = new DiscordRPC.Client({ transport: 'ipc' });
DiscordRPC.register(clientId);
let Game1Process, Game2Process, Game3Process;
async function setActivity() {
if (!rpc) return;
monitor.getActiveWindow((err, window) => {
if (err) {
console.error(err);
return;
}
const windowTitle = window.title;
if (windowTitle.includes('Game1')) {
rpc.setActivity({
details: 'Game1',
state: ' ',
// startTimestamp: Date.now(),
largeImageKey: 'Game1',
largeImageText: 'Game1',
});
killOtherProcesses();
}
});
}
function killOtherProcesses() {
if (Game2Process) {
Game1Process.kill();
}
if (Game3Process) {
Game2Process.kill();
}
if (Game4Process) {
GenshinProcess.kill();
}
}
rpc.on('ready', async () => {
setActivity();
setInterval(() => {
setActivity();
}, 15 * 1000);
});
rpc.login({ clientId }).catch(console.error);