presence.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import { Assets } from 'premid'
  2. const presence = new Presence({
  3. clientId: '1334576902081351761',
  4. })
  5. const browsingTimestamp = Math.floor(Date.now() / 1000)
  6. const adressedToTable: { [key: string]: string } = {} // Table to store AdressedTo by letter ID
  7. function isModalOpen(): boolean {
  8. return !!document.querySelector('#modalCreateLetter')
  9. }
  10. presence.on('UpdateData', async () => {
  11. const presenceData: PresenceData = {
  12. largeImageKey: 'https://cdn.rcd.gg/PreMiD/websites/E/Envolya/assets/logo.png',
  13. startTimestamp: browsingTimestamp,
  14. }
  15. if (document.location.pathname.includes('/letters')) {
  16. const currentLetterValueElement = document.querySelector('#currentLetterValue')
  17. const maxLetterValueElement = document.querySelector('#maxLetterValue')
  18. const letterCount = `${
  19. currentLetterValueElement ? currentLetterValueElement.textContent : '0'
  20. }/${maxLetterValueElement ? maxLetterValueElement.textContent : '5'}`
  21. presenceData.state = `Viewing letters (${letterCount})`
  22. if (isModalOpen())
  23. presenceData.state = 'Creating a new letter'
  24. }
  25. else if (document.location.pathname.includes('/letter/')) {
  26. const letterTitle = document.querySelector(
  27. '#letterEditPageTitle',
  28. )?.textContent
  29. presenceData.state = `Writing a letter${
  30. letterTitle ? `: “${letterTitle}”` : ''
  31. }`
  32. presenceData.smallImageKey = Assets.Writing
  33. if (isModalOpen())
  34. presenceData.state = 'Creating a new letter'
  35. }
  36. else if (document.location.pathname.includes('/l/')) {
  37. const letterId = document.location.pathname.split('/l/')[1]
  38. const letterAuthor = document.title
  39. .split(' - ')[1]
  40. ?.split(' sent you a letter!')[0]
  41. const AdressedToElement = document.querySelector('#letterAdressedTo')
  42. const AdressedTo = AdressedToElement
  43. ? AdressedToElement.textContent
  44. : letterId
  45. ? adressedToTable[letterId]
  46. : ''
  47. presenceData.smallImageKey = Assets.Reading
  48. if (AdressedToElement) {
  49. if (letterId) {
  50. adressedToTable[letterId] = AdressedToElement.textContent || ''
  51. }
  52. }
  53. if (letterAuthor && AdressedTo) {
  54. presenceData.state = `Reading a letter from ${letterAuthor}: “${AdressedTo}”`
  55. }
  56. else if (letterAuthor) {
  57. presenceData.state = `Reading a letter from ${letterAuthor}`
  58. }
  59. else if (AdressedTo) {
  60. presenceData.state = `Reading a letter: “For: ${AdressedTo}”`
  61. }
  62. else {
  63. presenceData.state = 'Reading a letter'
  64. }
  65. }
  66. else if (document.location.pathname === '/') {
  67. presenceData.state = 'Viewing the homepage'
  68. }
  69. else if (document.location.pathname.includes('/register')) {
  70. presenceData.state = 'Registering'
  71. }
  72. else if (document.location.pathname.includes('/login')) {
  73. presenceData.state = 'Logging in'
  74. }
  75. else if (document.location.pathname.includes('/upgrade')) {
  76. presenceData.state = 'Buying premium'
  77. }
  78. else if (document.location.pathname.includes('/settings')) {
  79. presenceData.state = 'Account settings'
  80. }
  81. if (presenceData.state)
  82. presence.setActivity(presenceData)
  83. })