discordwrapper.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { LoggerUtil } from './loggerutil'
  2. import { Client, Presence } from 'discord-rpc'
  3. // Work in progress
  4. const logger = new LoggerUtil('%c[DiscordWrapper]', 'color: #7289da; font-weight: bold')
  5. let client: Client
  6. let activity: Presence
  7. // TODO types for these settings
  8. export function initRPC(genSettings: any, servSettings: any, initialDetails = 'Waiting for Client..'){
  9. client = new Client({ transport: 'ipc' })
  10. activity = {
  11. details: initialDetails,
  12. state: 'Server: ' + servSettings.shortId,
  13. largeImageKey: servSettings.largeImageKey,
  14. largeImageText: servSettings.largeImageText,
  15. smallImageKey: genSettings.smallImageKey,
  16. smallImageText: genSettings.smallImageText,
  17. startTimestamp: new Date().getTime(),
  18. instance: false
  19. }
  20. client.on('ready', () => {
  21. logger.log('Discord RPC Connected')
  22. client.setActivity(activity)
  23. })
  24. client.login({clientId: genSettings.clientId}).catch(error => {
  25. if(error.message.includes('ENOENT')) {
  26. logger.log('Unable to initialize Discord Rich Presence, no client detected.')
  27. } else {
  28. logger.log('Unable to initialize Discord Rich Presence: ' + error.message, error)
  29. }
  30. })
  31. }
  32. export function updateDetails(details: string){
  33. activity.details = details
  34. client.setActivity(activity)
  35. }
  36. export function shutdownRPC(){
  37. if(!client) return
  38. client.clearActivity()
  39. client.destroy()
  40. client = null as unknown as Client // TODO cleanup
  41. activity = null as unknown as Presence // TODO cleanup
  42. }