presence.ts 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. const presence = new Presence({
  2. clientId: '792094839414980639',
  3. })
  4. presence.on('UpdateData', async () => {
  5. const presenceData: PresenceData = {
  6. largeImageKey: 'https://cdn.rcd.gg/PreMiD/websites/S/SuperiorServers.co/assets/logo.png',
  7. startTimestamp: Math.floor(Date.now() / 1000),
  8. }
  9. if (document.location.hostname === 'superiorservers.co') {
  10. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/S/SuperiorServers.co/assets/logo.png'
  11. presenceData.details = 'Portal'
  12. if (
  13. (document.location.pathname === '/' || !document.location.pathname)
  14. && document.location.pathname.includes('/staff')
  15. ) {
  16. const DRPStaff = document
  17. .querySelector('#RP_info')
  18. ?.textContent
  19. ?.substr(
  20. (document.querySelector('#RP_info')?.textContent?.indexOf(' of') ?? 0) + 3,
  21. document.querySelector('#RP_info')?.textContent?.indexOf(' entries'),
  22. )
  23. .replace(' entries', '')
  24. const AllServersStaff = document
  25. .querySelector('#NO_ID_info')
  26. ?.textContent
  27. ?.substr(
  28. (document.querySelector('#NO_ID_info')?.textContent?.indexOf(' of') ?? 0)
  29. + 3,
  30. document
  31. .querySelector('#NO_ID_info')
  32. ?.textContent
  33. ?.indexOf(' entries'),
  34. )
  35. .replace(' entries', '')
  36. const MilRPStaff = document
  37. .querySelector('#MilRP_info')
  38. ?.textContent
  39. ?.substr(
  40. (document.querySelector('#MilRP_info')?.textContent?.indexOf(' of') ?? 0)
  41. + 3,
  42. document
  43. .querySelector('#MilRP_info')
  44. ?.textContent
  45. ?.indexOf(' entries'),
  46. )
  47. .replace(' entries', '')
  48. const SWRPStaff = document
  49. .querySelector('#SWRP_info')
  50. ?.textContent
  51. ?.substr(
  52. (document.querySelector('#SWRP_info')?.textContent?.indexOf(' of') ?? 0) + 3,
  53. document.querySelector('#SWRP_info')?.textContent?.indexOf(' entries'),
  54. )
  55. .replace(' entries', '')
  56. const totalStaff = (
  57. Number.parseInt(DRPStaff ?? '')
  58. + Number.parseInt(SWRPStaff ?? '')
  59. + Number.parseInt(MilRPStaff ?? '')
  60. + Number.parseInt(AllServersStaff ?? '')
  61. ).toString()
  62. presenceData.details = 'Viewing the Staff list'
  63. presenceData.state = `${totalStaff} total members`
  64. }
  65. if (document.location.pathname.includes('/bans')) {
  66. const numBans = document
  67. .querySelector('div.dataTables_info')
  68. ?.textContent
  69. ?.substr(
  70. (document
  71. .querySelector('div.dataTables_info')
  72. ?.textContent
  73. ?.indexOf('of ') ?? 0) + 3,
  74. document
  75. .querySelector('div.dataTables_info')
  76. ?.textContent
  77. ?.indexOf(' entries'),
  78. )
  79. .replace(' entries', '')
  80. const currentPage = document.querySelector(
  81. '#bans_paginate > ul > li.paginate_button.active > a',
  82. )
  83. const lastPage = document.querySelector(
  84. '#bans_paginate > ul > li:nth-child(8) > a',
  85. )
  86. presenceData.details = `Viewing ${numBans} bans`
  87. presenceData.state = `(${currentPage?.textContent}/${lastPage?.textContent})`
  88. }
  89. if (document.location.pathname.includes('/credits')) {
  90. presenceData.details = 'Viewing the Credits page'
  91. if (document.location.pathname.includes('/darkrp'))
  92. presenceData.state = '(DarkRP)'
  93. else if (document.location.pathname.includes('/milrp'))
  94. presenceData.state = '(MilRP)'
  95. else if (document.location.pathname.includes('/cwrp'))
  96. presenceData.state = '(CWRP)'
  97. }
  98. if (document.location.pathname.includes('/rules')) {
  99. presenceData.details = 'Reading the server rules'
  100. if (document.location.pathname.includes('/darkrp'))
  101. presenceData.state = '(DarkRP)'
  102. else if (document.location.pathname.includes('/milrp'))
  103. presenceData.state = '(MilRP)'
  104. else if (document.location.pathname.includes('/cwrp'))
  105. presenceData.state = '(CWRP)'
  106. }
  107. if (document.location.pathname.includes('/leaderboard/money')) {
  108. presenceData.details = 'Viewing money leaderboards'
  109. if (document.location.pathname.includes('/darkrp'))
  110. presenceData.state = '(DarkRP)'
  111. }
  112. if (document.location.pathname.includes('/moneyboard')) {
  113. presenceData.details = 'Viewing money leaderboards'
  114. if (document.location.pathname.includes('/cwrp'))
  115. presenceData.state = '(CWRP)'
  116. else if (document.location.pathname.includes('/milrp'))
  117. presenceData.state = '(MilRP)'
  118. }
  119. if (document.location.pathname.includes('/darkrp/leaderboard/orgs')) {
  120. presenceData.details = 'Viewing org leaderboard'
  121. presenceData.state = '(DarkRP)'
  122. }
  123. if (document.location.pathname.includes('/polls')) {
  124. presenceData.details = 'Viewing polls'
  125. if (document.location.pathname.includes('/darkrp'))
  126. presenceData.state = '(DarkRP)'
  127. else if (document.location.pathname.includes('/milrp'))
  128. presenceData.state = '(MilRP)'
  129. else if (document.location.pathname.includes('/cwrp'))
  130. presenceData.state = '(CWRP)'
  131. }
  132. if (document.location.pathname.includes('/characters')) {
  133. presenceData.details = 'Using character search'
  134. if (document.location.pathname.includes('/darkrp'))
  135. presenceData.state = '(DarkRP)'
  136. else if (document.location.pathname.includes('/milrp'))
  137. presenceData.state = '(MilRP)'
  138. else if (document.location.pathname.includes('/cwrp'))
  139. presenceData.state = '(CWRP)'
  140. }
  141. if (document.location.pathname.includes('/gamemasters')) {
  142. if (document.location.pathname.includes('/darkrp')) {
  143. presenceData.state = '(DarkRP)'
  144. }
  145. else if (document.location.pathname.includes('/milrp')) {
  146. presenceData.details = 'Viewing MilRP GMs'
  147. const GMs = document
  148. .querySelector('#gamemasters_info')
  149. ?.textContent
  150. ?.substr(
  151. (document
  152. .querySelector('#gamemasters_info')
  153. ?.textContent
  154. ?.indexOf(' of') ?? 0) + 3,
  155. document
  156. .querySelector('#gamemasters_info')
  157. ?.textContent
  158. ?.indexOf(' entries'),
  159. )
  160. .replace(' entries', '')
  161. presenceData.state = `${GMs} total members`
  162. }
  163. else if (document.location.pathname.includes('/cwrp')) {
  164. presenceData.details = 'Viewing CWRP GMs'
  165. const GMs = document
  166. .querySelector('#gamemasters_info')
  167. ?.textContent
  168. ?.substr(
  169. (document
  170. .querySelector('#gamemasters_info')
  171. ?.textContent
  172. ?.indexOf(' of') ?? 0) + 3,
  173. document
  174. .querySelector('#gamemasters_info')
  175. ?.textContent
  176. ?.indexOf(' entries'),
  177. )
  178. .replace(' entries', '')
  179. presenceData.state = `${GMs} total members`
  180. }
  181. }
  182. if (document.location.pathname.includes('/xpboard')) {
  183. presenceData.details = 'Viewing XP leaderboards'
  184. if (document.location.pathname.includes('/milrp'))
  185. presenceData.state = '(MilRP)'
  186. else if (document.location.pathname.includes('/cwrp'))
  187. presenceData.state = '(CWRP)'
  188. }
  189. if (document.location.pathname.includes('/killboard')) {
  190. presenceData.details = 'Viewing K/D leaderboards'
  191. if (document.location.pathname.includes('/milrp'))
  192. presenceData.state = '(MilRP)'
  193. else if (document.location.pathname.includes('/cwrp'))
  194. presenceData.state = '(CWRP)'
  195. }
  196. if (document.location.pathname.includes('/minigameboard')) {
  197. presenceData.details = 'Viewing Minigame leaderboards'
  198. if (document.location.pathname.includes('/milrp'))
  199. presenceData.state = '(MilRP)'
  200. else if (document.location.pathname.includes('/cwrp'))
  201. presenceData.state = '(CWRP)'
  202. }
  203. if (document.location.pathname.includes('/profile/')) {
  204. presenceData.details = `Viewing ${
  205. document.querySelector(
  206. '#app > div:nth-child(2) > div > div.panel.panel-default > div.panel-body > div > div:nth-child(1) > span',
  207. )?.textContent
  208. }'s profile`
  209. let steamID32
  210. const steamID64 = BigInt(
  211. document.location.pathname
  212. .substr(document.location.pathname.indexOf('/', 2))
  213. .replace('/', '')
  214. .replace('/', ''),
  215. )
  216. if (steamID64 % 2n === 0n) {
  217. steamID32 = `STEAM_0:0:${(
  218. (steamID64 - 76561197960265728n)
  219. / 2n
  220. ).toString()}`
  221. }
  222. else {
  223. steamID32 = `STEAM_0:1:${(
  224. (steamID64 - 76561197960265728n)
  225. / 2n
  226. ).toString()}`
  227. }
  228. presenceData.state = steamID32
  229. }
  230. }
  231. else if (document.location.hostname === 'forum.superiorservers.co') {
  232. presenceData.details = 'Forums'
  233. if (document.location.pathname === '/' || !document.location.pathname)
  234. presenceData.state = 'Home'
  235. if (document.location.pathname.includes('/topic/')) {
  236. presenceData.state = `Viewing topic: ${
  237. document.querySelector(
  238. '#ipsLayout_mainArea > div.ipsPageHeader.ipsClearfix > div.ipsPhotoPanel.ipsPhotoPanel_small.ipsPhotoPanel_notPhone.ipsClearfix > div > h1 > span > span',
  239. )?.textContent
  240. }`
  241. }
  242. if (document.location.pathname.includes('/profile/')) {
  243. presenceData.state = `Viewing profile: ${
  244. document.querySelector(
  245. '#elProfileHeader > div.ipsColumns.ipsColumns_collapsePhone > div.ipsColumn.ipsColumn_fluid > div > h1',
  246. )?.textContent
  247. }`
  248. }
  249. }
  250. presence.setActivity(presenceData)
  251. })