discord-ghost
Version:
A headless Discord-RPC client for Destiny 2
50 lines (44 loc) • 1.62 kB
text/typescript
/* istanbul ignore file: simple wrapper, tho todo eventually */
import { Client, Presence } from "discord-rpc";
const clientId = "593302206661525504";
export class DiscordRPC {
private client: Client;
private static instance: DiscordRPC;
public static readonly maxStateLength: number = 128;
/*
* Public static readonly maxLargeTe: number = 128;
* public static readonly maxStateLength: number = 128;
*/
public static getInstance(): Promise<DiscordRPC> {
DiscordRPC.instance = new DiscordRPC();
const promise = new Promise<DiscordRPC>(resolve => {
DiscordRPC.instance.client.on("ready", () => {
resolve(DiscordRPC.instance);
});
DiscordRPC.instance.client.login({ clientId });
});
return promise;
}
public async setActivity(rpcActivity: Presence): Promise<void> {
return this.client.setActivity({
...this.sanitizeActivity(rpcActivity),
instance: false
});
}
private sanitizeActivity(rpcActivity: Presence): Presence {
return {
...rpcActivity,
details: rpcActivity.details ? rpcActivity.details.substr(0, DiscordRPC.maxStateLength) : " ",
state: rpcActivity.state ? rpcActivity.state.substr(0, DiscordRPC.maxStateLength) : " ",
smallImageText: rpcActivity.smallImageText
? rpcActivity.smallImageText.substr(0, DiscordRPC.maxStateLength)
: " ",
largeImageText: rpcActivity.largeImageText
? rpcActivity.largeImageText.substr(0, DiscordRPC.maxStateLength)
: " "
};
}
private constructor() {
this.client = new Client({ transport: "ipc" });
}
}