presence.ts 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. import { Assets } from 'premid'
  2. const presence = new Presence({
  3. clientId: '687352219598585905',
  4. })
  5. const browsingTimestamp = Math.floor(Date.now() / 1000)
  6. enum ActivityAssets {
  7. Logo = 'https://cdn.rcd.gg/PreMiD/websites/A/AnimeRadio.de/assets/logo.png',
  8. Animetreff = 'https://cdn.rcd.gg/PreMiD/websites/A/AnimeRadio.de/assets/0.png',
  9. Animenews = 'https://cdn.rcd.gg/PreMiD/websites/A/AnimeRadio.de/assets/1.png',
  10. Animekino = 'https://cdn.rcd.gg/PreMiD/websites/A/AnimeRadio.de/assets/2.png',
  11. Animemesse = 'https://cdn.rcd.gg/PreMiD/websites/A/AnimeRadio.de/assets/3.png',
  12. Animefanshop = 'https://cdn.rcd.gg/PreMiD/websites/A/AnimeRadio.de/assets/4.png',
  13. }
  14. presence.on('UpdateData', async () => {
  15. const presenceData: PresenceData = {
  16. largeImageKey: ActivityAssets.Logo,
  17. startTimestamp: browsingTimestamp,
  18. }
  19. switch (document.location.host) {
  20. case 'www.animeradio.de': {
  21. if (document.location.pathname.includes('/webplayer/')) {
  22. presenceData.details = 'Hört AnimeRadio'
  23. presenceData.smallImageKey = Assets.Play
  24. }
  25. else if (document.URL.includes('top100')) {
  26. presenceData.details = 'Betrachtet Top100'
  27. }
  28. else if (document.URL.includes('events')) {
  29. presenceData.details = 'Betrachtet Events'
  30. }
  31. else if (document.URL.includes('programm')) {
  32. presenceData.details = 'Betrachtet Programm'
  33. }
  34. break
  35. }
  36. case 'www.animetreff.de': {
  37. presenceData.largeImageKey = ActivityAssets.Animetreff
  38. if (document.URL.includes('/CustomPage/?id=1')) {
  39. presenceData.details = 'Chattet'
  40. presenceData.smallImageKey = Assets.Writing
  41. }
  42. else if (document.location.pathname.includes('/gallery/')) {
  43. if (document.location.pathname.includes('/Image/')) {
  44. presenceData.details = 'Betrachtet Bild'
  45. presenceData.state = document.querySelector(
  46. '#content > header > h1',
  47. )?.textContent ?? ''
  48. }
  49. else if (document.location.pathname.includes('/Album/')) {
  50. presenceData.details = 'Betrachtet Album'
  51. presenceData.state = document
  52. .querySelector('#content > header > h1')
  53. ?.textContent
  54. ?.replace(
  55. document.querySelector('#content > header > h1 > span')
  56. ?.textContent ?? '',
  57. '',
  58. ) ?? ''
  59. }
  60. else if (document.location.pathname.includes('/AlbumList/')) {
  61. presenceData.details = 'Betrachtet Galerie'
  62. }
  63. }
  64. else if (document.location.pathname.includes('/calendar/')) {
  65. presenceData.details = 'Betrachtet Kalender'
  66. presenceData.state = document.querySelector(
  67. '#content > header > h1',
  68. )?.textContent ?? ''
  69. }
  70. else if (document.location.pathname.includes('/MemberList/')) {
  71. presenceData.details = 'Betrachtet Mitglieder'
  72. }
  73. else if (document.location.pathname.includes('/User/')) {
  74. presenceData.details = 'Betrachtet Nutzer'
  75. }
  76. else if (document.location.pathname.includes('/Thread/')) {
  77. presenceData.details = 'Liest Beiträge:'
  78. presenceData.state = document.querySelector(
  79. '#content > header > h1 > a',
  80. )?.textContent ?? ''
  81. presenceData.smallImageKey = Assets.Reading
  82. }
  83. else if (document.location.pathname.includes('/Board/')) {
  84. presenceData.details = `Betrachtet ${
  85. document.querySelector('#content > header > h1 > a')?.textContent ?? ''
  86. }`
  87. }
  88. else if (document.location.pathname.includes('/Search/')) {
  89. if (document.querySelector('#errorMessage')) {
  90. presenceData.details = `Sucht nach ${
  91. document
  92. .querySelector('#errorMessage')
  93. ?.textContent
  94. ?.split('„')[1]
  95. ?.split('“')[0] ?? ''
  96. }`
  97. }
  98. else {
  99. presenceData.details = `Sucht nach ${
  100. document.querySelector('#content > header > p > strong')?.textContent ?? ''
  101. }`
  102. }
  103. }
  104. else {
  105. presenceData.details = 'Stöbert in den Foren'
  106. }
  107. break
  108. }
  109. case 'www.animenews.de': {
  110. presenceData.largeImageKey = ActivityAssets.Animenews
  111. presenceData.details = 'Liest Neuigkeiten'
  112. presenceData.smallImageKey = Assets.Reading
  113. break
  114. }
  115. case 'www.animekino.de': {
  116. presenceData.largeImageKey = ActivityAssets.Animekino
  117. if (document.URL.includes('partner'))
  118. presenceData.details = 'Betrachtet Partner'
  119. else if (document.URL.includes('kontakt'))
  120. presenceData.details = 'Betrachtet Kontakt'
  121. else if (document.URL.includes('ort'))
  122. presenceData.details = 'Betrachtet Ort'
  123. else if (document.URL.includes('filme'))
  124. presenceData.details = 'Betrachtet Filmvorstellungen'
  125. else presenceData.details = 'Betrachtet Kino'
  126. break
  127. }
  128. case 'www.animehamburg.de': {
  129. if (document.URL.includes('partner'))
  130. presenceData.details = 'Betrachtet Partner'
  131. else if (document.URL.includes('kontakt'))
  132. presenceData.details = 'Betrachtet Kontakt'
  133. else if (document.URL.includes('ort'))
  134. presenceData.details = 'Betrachtet Ort'
  135. else if (document.URL.includes('programm'))
  136. presenceData.details = 'Betrachtet Programm'
  137. else presenceData.details = 'Betrachtet Hanmaco'
  138. break
  139. }
  140. case 'www.animekultur.de': {
  141. if (document.URL.includes('joinus')) {
  142. presenceData.details = 'Will ein Mitglied werden'
  143. presenceData.smallImageKey = Assets.Writing
  144. }
  145. else if (document.URL.includes('projekte')) {
  146. presenceData.details = 'Betrachtet Projekte'
  147. }
  148. else if (document.URL.includes('pressemitteilungen')) {
  149. presenceData.details = 'Betrachtet Pressemitteilungen'
  150. }
  151. else if (document.URL.includes('marketing')) {
  152. presenceData.details = 'Betrachtet Marketing'
  153. }
  154. else if (document.URL.includes('kontakt')) {
  155. presenceData.details = 'Betrachtet Kontakt'
  156. }
  157. else if (document.URL.includes('hajime')) {
  158. presenceData.details = 'Betrachtet Hanjime! Anime-Con'
  159. }
  160. else {
  161. presenceData.details = 'Betrachtet Kultur / Über uns'
  162. }
  163. break
  164. }
  165. case 'www.animetickets.de': {
  166. if (document.location.pathname.includes('/event/')) {
  167. presenceData.details = 'Betrachtet Eventtickets für'
  168. presenceData.state = document.querySelector(
  169. 'body > div > div > div > div:nth-child(2) > span',
  170. )?.textContent ?? ''
  171. }
  172. else if (document.location.pathname.includes('/events')) {
  173. presenceData.details = 'Betrachtet Events'
  174. }
  175. else if (document.location.pathname.includes('contact')) {
  176. presenceData.details = 'Betrachtet Kontakt'
  177. }
  178. else if (document.location.pathname.includes('order')) {
  179. presenceData.details = 'Betrachtet Order'
  180. }
  181. break
  182. }
  183. case 'www.animemesse.de': {
  184. presenceData.largeImageKey = ActivityAssets.Animemesse
  185. presenceData.details = `Betrachtet ${
  186. document.querySelector('#content > li.active > a')?.textContent ?? ''
  187. }`
  188. break
  189. }
  190. case 'www.animefanshop.de': {
  191. presenceData.largeImageKey = ActivityAssets.Animefanshop
  192. const product = document.querySelector(
  193. '.product-info-title-desktop > span',
  194. )
  195. if (product) {
  196. presenceData.details = 'Betrachtet Produkt:'
  197. presenceData.state = product.textContent
  198. }
  199. else if (
  200. document.location.pathname.includes('/advanced_search_result')
  201. ) {
  202. presenceData.details = `Sucht nach ${
  203. document
  204. .querySelector('#main > div > h1')
  205. ?.textContent
  206. ?.split('"')[1]
  207. ?.split('"')[0] ?? ''
  208. }`
  209. }
  210. break
  211. }
  212. }
  213. if (presenceData.details)
  214. presence.setActivity(presenceData)
  215. else presence.setActivity()
  216. })