presence.ts 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. import { ActivityType, Assets } from 'premid'
  2. const presence = new Presence({
  3. clientId: '999738497546059907',
  4. })
  5. const browsingTimestamp = Math.floor(Date.now() / 1000)
  6. presence.on('UpdateData', async () => {
  7. const presenceData: PresenceData = {
  8. largeImageKey: 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/0.png',
  9. details: 'Vendo a Alura',
  10. startTimestamp: browsingTimestamp,
  11. } as PresenceData
  12. const video = document.querySelector('video')
  13. if (
  14. document.location.pathname.includes('/course')
  15. && !document.location.pathname.includes('/courses')
  16. && !document.location.pathname.includes('/task')
  17. ) {
  18. presenceData.details = 'Vendo um curso'
  19. if (
  20. !document.querySelector(
  21. 'div.container.course-header-banner-content > div > div.hreview-aggregate > h1 > strong',
  22. )
  23. ) {
  24. presenceData.state = document.querySelector(
  25. 'section.task-menu-header > div > a > h2',
  26. )?.textContent
  27. }
  28. else {
  29. presenceData.state = document.querySelector(
  30. 'div.container.course-header-banner-content > div > div.hreview-aggregate > h1 > strong',
  31. )?.textContent
  32. }
  33. switch (
  34. document
  35. .querySelector('a.course-header-banner-breadcrumb__category')
  36. ?.getAttribute('aria-label')
  37. ) {
  38. case 'Front-end': {
  39. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/1.png'
  40. break
  41. }
  42. case 'Programação': {
  43. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/2.png'
  44. break
  45. }
  46. case 'DevOps': {
  47. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/3.png'
  48. break
  49. }
  50. case 'UX & Design': {
  51. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/4.png'
  52. break
  53. }
  54. case 'Data Science': {
  55. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/5.png'
  56. break
  57. }
  58. case 'Mobile': {
  59. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/6.png'
  60. break
  61. }
  62. case 'Inovação & Gestão': {
  63. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/7.png'
  64. break
  65. }
  66. }
  67. }
  68. else if (
  69. document.location.pathname.includes('/course')
  70. && document.location.pathname.includes('/task')
  71. ) {
  72. presenceData.details = document.querySelector(
  73. 'a.task-menu-header-info-title > h2',
  74. )?.textContent
  75. presenceData.state = document.querySelector(
  76. 'span.task-body-header-title-text',
  77. )?.textContent
  78. presenceData.smallImageKey = video?.paused ? Assets.Pause : Assets.Play
  79. presenceData.smallImageText = video?.paused ? 'Pausado' : 'Reproduzindo'
  80. delete presenceData.startTimestamp
  81. if (video && !video.paused) {
  82. [presenceData.startTimestamp, presenceData.endTimestamp] = presence.getTimestampsfromMedia(video)
  83. }
  84. }
  85. else if (document.location.pathname.includes('/dashboard')) {
  86. presenceData.details = 'Vendo a dashboard'
  87. }
  88. else if (document.location.pathname.includes('/formacao')) {
  89. presenceData.details = 'Vendo uma formação'
  90. presenceData.state = document.querySelector(
  91. 'div.formacao-header-headline > h1',
  92. )?.textContent
  93. switch (
  94. document.querySelector('div.formacao__info-categoria > a')?.textContent
  95. ) {
  96. case 'Front-end': {
  97. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/1.png'
  98. break
  99. }
  100. case 'Programação': {
  101. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/2.png'
  102. break
  103. }
  104. case 'DevOps': {
  105. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/3.png'
  106. break
  107. }
  108. case 'UX & Design': {
  109. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/4.png'
  110. break
  111. }
  112. case 'Data Science': {
  113. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/5.png'
  114. break
  115. }
  116. case 'Mobile': {
  117. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/6.png'
  118. break
  119. }
  120. case 'Inovação & Gestão': {
  121. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/7.png'
  122. break
  123. }
  124. }
  125. }
  126. else if (document.location.pathname.includes('/courses')) {
  127. presenceData.details = 'Vendo meus cursos'
  128. }
  129. else if (document.location.pathname.includes('/user')) {
  130. if (document.querySelector('.profile-header-name')) {
  131. presenceData.details = 'Vendo o perfil de um usuário'
  132. presenceData.state = document.querySelector(
  133. '.profile-header-name',
  134. )?.textContent
  135. }
  136. else {
  137. if (document.location.pathname.includes('/planos-de-estudo'))
  138. presenceData.details = 'Vendo planos de estudo'
  139. else if (document.location.pathname.includes('/payments'))
  140. presenceData.details = 'Vendo pagamentos'
  141. else document.location.pathname.includes('/rank')
  142. presenceData.details = 'Vendo o ranking da comunidade'
  143. }
  144. }
  145. else if (document.location.pathname.includes('/aluraflix')) {
  146. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/8.png'
  147. presenceData.details = 'Vendo o Aluraflix'
  148. }
  149. else if (document.location.pathname.includes('/carreirasemfronteiras')) {
  150. const title = document.querySelector('.podcast-header-title')
  151. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/9.png'
  152. presenceData.details = 'Ouvindo o "Carreiras sem Fronteiras"'
  153. if (title && !document.querySelector('.--margin-left-image'))
  154. presenceData.state = `"${title.textContent}"`
  155. }
  156. else if (document.location.pathname.includes('/scubadev')) {
  157. const title = document.querySelector('.podcast-header-title')
  158. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/10.png'
  159. presenceData.details = 'Ouvindo o "ScubaDev"'
  160. if (title && !document.querySelector('.--margin-left-image'))
  161. presenceData.state = `"${title.textContent}"`
  162. }
  163. else if (document.location.pathname.includes('/layerstech')) {
  164. const title = document.querySelector('.podcast-header-title')
  165. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/11.png'
  166. presenceData.details = 'Ouvindo o "Layers.Tech"'
  167. if (title && !document.querySelector('.--margin-left-image'))
  168. presenceData.state = `"${title.textContent}"`
  169. }
  170. else if (document.location.pathname.includes('/likeaboss')) {
  171. const title = document.querySelector('.podcast-header-title')
  172. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/12.png'
  173. presenceData.details = 'Ouvindo o "Like a Boss"'
  174. if (title && !document.querySelector('.--margin-left-image'))
  175. presenceData.state = `"${title.textContent}"`
  176. }
  177. else if (document.location.pathname.includes('/hipsterstech')) {
  178. const title = document.querySelector('.podcast-header-title')
  179. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/13.png'
  180. presenceData.details = 'Ouvindo o "Hipsters.Tech"'
  181. if (title && !document.querySelector('.--margin-left-image'))
  182. presenceData.state = `"${title.textContent}"`
  183. }
  184. else if (document.location.pathname.includes('/cases')) {
  185. const title = document.querySelector('.intro__title')
  186. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/14.png'
  187. presenceData.details = 'Assistindo um case'
  188. if (title && document.location.pathname.includes('/extra'))
  189. presenceData.state = `"${title.textContent}"`
  190. }
  191. else if (document.location.pathname.includes('/alura-mais')) {
  192. presenceData.largeImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/Alura/assets/15.png'
  193. presenceData.details = 'Vendo Alura+'
  194. }
  195. else if (document.location.pathname.includes('/formacoes')) {
  196. presenceData.details = 'Vendo formações'
  197. }
  198. else if (document.location.pathname.includes('/imersoes')) {
  199. presenceData.details = 'Vendo imersões'
  200. }
  201. else if (document.location.pathname.includes('/podcasts')) {
  202. presenceData.details = 'Vendo podcasts'
  203. }
  204. else if (document.location.pathname.includes('/recommendations')) {
  205. presenceData.details = 'Vendo recomendações'
  206. }
  207. else if (
  208. document.location.pathname.includes('/forum')
  209. && !document.location.pathname.includes('/topico-')
  210. ) {
  211. presenceData.details = 'Vendo fórums'
  212. }
  213. else if (
  214. document.location.pathname.includes('/forum')
  215. && document.location.pathname.includes('/topico-')
  216. ) {
  217. presenceData.details = 'Lendo um tópico no fórum'
  218. presenceData.state = `"${
  219. document.querySelector('.topic-header-container-title')?.textContent
  220. }"`
  221. }
  222. else if (document.location.pathname.includes('/planos-estudos-publicos')) {
  223. presenceData.details = 'Vendo planos de estudo públicos'
  224. }
  225. else if (document.location.pathname.includes('/points')) {
  226. presenceData.details = 'Vendo pontos'
  227. }
  228. if (presenceData.endTimestamp)
  229. presenceData.type = ActivityType.Watching
  230. if (presenceData.details)
  231. presence.setActivity(presenceData)
  232. else presence.setActivity()
  233. })