presence.ts 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. import { Assets } from 'premid'
  2. const presence = new Presence({
  3. clientId: '702375041320484944',
  4. })
  5. const browsingTimestamp = Math.floor(Date.now() / 1000)
  6. function getSeconds(videoTime: string, videoDuration: string) {
  7. const a = videoTime.split(':')
  8. const b = videoDuration.split(':')
  9. return presence.getTimestamps(
  10. Math.floor(+a[0]! * 60 * 60 + +a[1]! * 60 + +a[2]!),
  11. Math.floor(+b[0]! * 60 * 60 + +b[1]! * 60 + +b[2]!),
  12. )
  13. }
  14. presence.on('UpdateData', async () => {
  15. const presenceData: PresenceData = {
  16. largeImageKey: 'https://cdn.rcd.gg/PreMiD/websites/E/Einthusan/assets/logo.jpg',
  17. startTimestamp: browsingTimestamp,
  18. }
  19. switch (document.location.pathname) {
  20. case '/movie/browse/': {
  21. presenceData.details = 'Browsing Movies'
  22. break
  23. }
  24. case '/movie/results/': {
  25. // Searching Part
  26. const search = document.querySelector(
  27. '#content > div.results-info > h5 > span',
  28. )?.textContent
  29. presenceData.details = `Searching: ${search}`
  30. presenceData.smallImageKey = Assets.Search
  31. presenceData.smallImageText = 'searching'
  32. presenceData.state = 'Movie'
  33. break
  34. }
  35. case '/movie-clip/results/music-video/': {
  36. const search = document.querySelector(
  37. '#content > div.results-info > h5 > span',
  38. )?.textContent
  39. presenceData.details = `Searching: ${search}`
  40. presenceData.smallImageKey = Assets.Search
  41. presenceData.smallImageText = 'searching'
  42. presenceData.state = 'Music Video'
  43. break
  44. }
  45. case '/movie-clip/playlist/results/music-video/': {
  46. const search = document.querySelector(
  47. '#content > div.results-info > h5 > span',
  48. )?.textContent
  49. presenceData.details = `Searching: ${search}`
  50. presenceData.smallImageKey = Assets.Search
  51. presenceData.smallImageText = 'searching'
  52. presenceData.state = 'Music Video Playlist'
  53. break
  54. }
  55. case '/movie-clip/results/clip/': {
  56. const search = document.querySelector(
  57. '#content > div.results-info > h5 > span',
  58. )?.textContent
  59. presenceData.details = `Searching: ${search}`
  60. presenceData.smallImageKey = Assets.Search
  61. presenceData.smallImageText = 'searching'
  62. presenceData.state = 'Movie Clip'
  63. break
  64. }
  65. case '/movie-clip/playlist/results/clip/': {
  66. const search = document.querySelector(
  67. '#content > div.results-info > h5 > span',
  68. )?.textContent
  69. presenceData.details = `Searching: ${search}`
  70. presenceData.smallImageKey = Assets.Search
  71. presenceData.smallImageText = 'searching'
  72. presenceData.state = 'Movie Clip Playlist'
  73. break
  74. }
  75. default:
  76. if (document.location.pathname.indexOf('/movie/watch/') === 0) {
  77. // Watching Movie
  78. const title = document.querySelector(
  79. '#UIMovieSummary > ul > li > div.block2 > a > h3',
  80. )?.textContent
  81. const count = document
  82. .querySelector('div.professionals')
  83. ?.querySelectorAll('div')
  84. ?.length ?? 0
  85. const director = document.querySelector(
  86. `div.professionals > div:nth-child(${
  87. count - count / 3
  88. } ) > div.prof > p`,
  89. )?.textContent
  90. const video = document.querySelector('#icons-and-text > div#play.show')
  91. const end = document.querySelector(
  92. '#controlbar > div.durations > div.content-duration',
  93. )?.textContent
  94. const Name = document.querySelector(
  95. '#UIMovieSummary > ul > li > div.block2 > div.info > p:nth-child(1)',
  96. )?.firstChild?.nodeValue
  97. if (!video && end !== '--:--:--') {
  98. [presenceData.startTimestamp, presenceData.endTimestamp] = getSeconds(
  99. document.querySelector(
  100. '#controlbar > div.durations > div.watched-duration',
  101. )?.textContent ?? '',
  102. end ?? '',
  103. )
  104. presenceData.details = `${title} (${Name})`
  105. presenceData.state = director
  106. presenceData.smallImageKey = Assets.Play
  107. presenceData.smallImageText = 'playing'
  108. }
  109. else if (video && end !== '--:--:--') {
  110. presenceData.details = `${title} (${Name})`
  111. presenceData.state = director
  112. delete presenceData.startTimestamp
  113. delete presenceData.endTimestamp
  114. presenceData.smallImageKey = Assets.Pause
  115. presenceData.smallImageText = 'paused'
  116. }
  117. else {
  118. presenceData.details = `${title} (${Name})`
  119. presenceData.state = director
  120. presenceData.smallImageKey = Assets.Search
  121. presenceData.smallImageText = 'Browsing'
  122. }
  123. }
  124. else {
  125. switch (document.location.pathname) {
  126. case '/privacy/': {
  127. // Viewing other non-important pages
  128. presenceData.details = 'Viewing privacy'
  129. break
  130. }
  131. case '/terms/': {
  132. presenceData.details = 'Viewing terms of service'
  133. break
  134. }
  135. case '/adblocker/': {
  136. presenceData.details = 'Look at the adblock turn off page'
  137. presenceData.smallImageKey = Assets.Search
  138. presenceData.smallImageText = 'Turning off Adblock'
  139. break
  140. }
  141. case '/intro/': {
  142. presenceData.details = 'Selecting Language'
  143. break
  144. }
  145. case '/launcher/': {
  146. presenceData.details = 'Viewing Menu'
  147. break
  148. }
  149. case '/login/': {
  150. presenceData.details = 'Logining In'
  151. break
  152. }
  153. case '/register/': {
  154. presenceData.details = 'Signing Up'
  155. break
  156. }
  157. case '/movie/speedtest/': {
  158. presenceData.details = 'Running A Speed Test'
  159. break
  160. }
  161. case '/e500/': {
  162. presenceData.details = 'Logging a Bug.'
  163. presenceData.smallImageKey = Assets.Search
  164. presenceData.smallImageText = 'Logging a Bug'
  165. break
  166. }
  167. case '/movie-clip/playlist/browse/clip/': {
  168. presenceData.details = 'Viewing Movie Clips'
  169. break
  170. }
  171. default:
  172. if (document.location.pathname.includes('/feed')) {
  173. if (document.location.pathname === '/feed/home/') {
  174. presenceData.details = 'Viewing your feed.'
  175. }
  176. else {
  177. presenceData.details = `Viewing: ${
  178. document.querySelector('#UIFeedSidebar > div.quickinfo > h2')
  179. ?.textContent
  180. }`
  181. }
  182. }
  183. else if (
  184. document.location.pathname
  185. === '/movie-clip/playlist/browse/music-video/'
  186. ) {
  187. presenceData.details = 'Viewing music videos'
  188. }
  189. else if (document.location.pathname === '/account/') {
  190. presenceData.details = 'Viewing account details'
  191. }
  192. else {
  193. presenceData.details = 'Unable to Read Page'
  194. }
  195. }
  196. }
  197. }
  198. if (presenceData.details)
  199. presence.setActivity(presenceData)
  200. else presence.setActivity()
  201. })