presence.ts 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. import { Assets } from 'premid'
  2. const presence = new Presence({
  3. clientId: '631566704648126503',
  4. })
  5. const browsingTimestamp = Math.floor(Date.now() / 1000)
  6. presence.on('UpdateData', async () => {
  7. const sections = [
  8. 'u',
  9. 'gag',
  10. 'hot',
  11. 'trending',
  12. 'fresh',
  13. 'tag',
  14. 'search',
  15. 'settings',
  16. 'interest',
  17. 'top',
  18. ]
  19. const presenceData: PresenceData = {
  20. largeImageKey: 'https://cdn.rcd.gg/PreMiD/websites/0-9/9GAG/assets/logo.png',
  21. startTimestamp: browsingTimestamp,
  22. }
  23. switch (document.location.hostname) {
  24. case '9gag.com': {
  25. if (document.location.pathname === '/') {
  26. presenceData.details = 'Viewing home page'
  27. }
  28. else if (!sections.includes(document.location.pathname.split('/')[1]!)) {
  29. presenceData.details = `Viewing section: ${
  30. document.querySelector('h2')?.textContent
  31. }`
  32. }
  33. else if (document.location.pathname.includes('/settings')) {
  34. presenceData.details = `Settings: ${
  35. document.querySelector('h2')?.textContent
  36. }`
  37. }
  38. else if (document.location.pathname.includes('/interest')) {
  39. presenceData.details = 'Viewing interest:'
  40. presenceData.state = document
  41. .querySelector('title')
  42. ?.textContent
  43. ?.split('9GAG ')[1]
  44. }
  45. else if (document.location.pathname.includes('/top')) {
  46. presenceData.details = 'Viewing top gags'
  47. }
  48. else if (document.location.pathname.includes('/u/')) {
  49. presenceData.details = 'Viewing Profile:'
  50. presenceData.state = `${
  51. document.querySelector('title')?.textContent?.split(' - 9GAG')[0]
  52. } - ${document.querySelector('a[class=\'selected\']')?.textContent}`
  53. presenceData.largeImageKey = document.querySelector('img')?.src
  54. }
  55. else if (
  56. document.querySelector(
  57. '#container > div.page > div.main-wrap > div.profile > section > header > h2',
  58. )
  59. ) {
  60. const user = document.querySelector(
  61. '#container > div.page > div.main-wrap > div.profile > section > header > h2',
  62. )
  63. presenceData.details = 'Viewing catagory:'
  64. presenceData.state = user?.textContent
  65. }
  66. else if (document.location.pathname.includes('/gag/')) {
  67. const title = document.querySelector(
  68. '#individual-post > article > header > h1',
  69. )
  70. presenceData.details = 'Viewing gag:'
  71. presenceData.largeImageKey = document.querySelector<HTMLLinkElement>(
  72. 'link[rel=\'image_src\']',
  73. )?.href
  74. if ((title?.textContent?.length ?? 0) > 128)
  75. presenceData.state = `${title?.textContent?.substring(0, 125)}...`
  76. else presenceData.state = title?.textContent
  77. }
  78. else if (document.location.pathname.includes('/hot')) {
  79. presenceData.details = 'Viewing what\'s hot'
  80. }
  81. else if (document.location.pathname.includes('/trending')) {
  82. presenceData.details = 'Viewing what\'s trending'
  83. }
  84. else if (document.location.pathname.includes('/fresh')) {
  85. presenceData.details = 'Viewing what\'s fresh'
  86. }
  87. else if (document.location.pathname.includes('/tag')) {
  88. const title = document.querySelector(
  89. '#container > div.page > div.main-wrap > div.profile > section > header > h1',
  90. )
  91. presenceData.details = 'Viewing tag:'
  92. presenceData.state = title?.textContent
  93. }
  94. else if (document.location.pathname.includes('/search')) {
  95. const search = document.querySelector<HTMLInputElement>('#search-hero')
  96. presenceData.details = 'Searching for:'
  97. presenceData.state = search?.value
  98. presenceData.smallImageKey = Assets.Search
  99. }
  100. break
  101. }
  102. case 'about.9gag.com': {
  103. presenceData.details = 'Reading all about 9GAG'
  104. presenceData.smallImageKey = Assets.Reading
  105. break
  106. }
  107. case 'shop.9gag.com': {
  108. if (document.location.pathname === '/') {
  109. presenceData.details = 'Viewing store page'
  110. }
  111. else if (document.location.pathname.includes('/products/')) {
  112. const title = document.querySelector(
  113. '#ProductSection-product-template > div > div:nth-child(2) > div.product-single__meta > h1',
  114. )
  115. presenceData.details = 'Shop - Viewing product:'
  116. presenceData.state = title?.textContent
  117. }
  118. else if (document.location.pathname.includes('/collections/')) {
  119. const title = document.querySelector(
  120. '#shopify-section-collection-template > div > header > div > div > h1 > span',
  121. )
  122. const replace = document.querySelector(
  123. '#shopify-section-collection-template > div > header > div > div > h1 > span > span',
  124. )
  125. presenceData.details = 'Shop - Viewing collection:'
  126. presenceData.state = title?.textContent?.replace(replace?.textContent ?? '', '')
  127. }
  128. else if (document.location.pathname.includes('/cart')) {
  129. presenceData.details = 'Shop - Viewing their cart'
  130. }
  131. else if (document.location.pathname.includes('/search')) {
  132. const search = document.querySelector<HTMLInputElement>('#SearchInput')
  133. presenceData.details = 'Shop - Searching for:'
  134. presenceData.state = search?.value
  135. presenceData.smallImageKey = Assets.Search
  136. }
  137. break
  138. }
  139. }
  140. if (presenceData.details)
  141. presence.setActivity(presenceData)
  142. else presence.setActivity()
  143. })