presence.ts 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. const presence = new Presence({
  2. clientId: '798272335035498557',
  3. })
  4. const time = Math.floor(Date.now() / 1000)
  5. presence.on('UpdateData', () => {
  6. const presenceData: PresenceData = {
  7. largeImageKey: 'https://cdn.rcd.gg/PreMiD/websites/M/Monkeytype/assets/logo.png',
  8. }
  9. presenceData.startTimestamp = time
  10. switch (document.location.pathname.toLowerCase()) {
  11. case '/': {
  12. presenceData.details = 'Idling'
  13. if (
  14. !document
  15. .querySelector('.pageTest #result')
  16. ?.classList
  17. .contains('hidden')
  18. ) {
  19. const statsElem = document.querySelector('.pageTest #result .stats')
  20. const moreStatsElem = document.querySelector(
  21. '.pageTest #result .morestats',
  22. )
  23. const stats = {
  24. wpm: statsElem?.querySelector('.wpm .bottom')?.textContent,
  25. acc: statsElem?.querySelector('.acc .bottom')?.textContent,
  26. raw: moreStatsElem?.querySelector('.raw .bottom')?.textContent,
  27. char: moreStatsElem?.querySelector('.key .bottom')?.textContent,
  28. con: moreStatsElem?.querySelector('.consistency .bottom')?.textContent,
  29. time: moreStatsElem?.querySelector('.time .bottom')?.textContent,
  30. }
  31. presenceData.details = `Finished ${document
  32. .querySelector('.testType .bottom')
  33. ?.textContent
  34. ?.replaceAll('<br>', ' ')}`
  35. presenceData.state = `${stats.wpm} wpm ${stats.acc} acc ${stats.raw} raw ${stats.char} ${stats.con} consistency ${stats.time}`
  36. }
  37. else if (
  38. document.querySelector('#words letter.correct')
  39. || document.querySelector('#words letter.incorrect')
  40. ) {
  41. presenceData.details = `Typing ${
  42. document.querySelector('.pageTest #premidTestMode')?.textContent
  43. }`
  44. presenceData.state = `${
  45. document.querySelector('.pageTest #largeLiveWpmAndAcc #liveWpm')
  46. ?.textContent
  47. } wpm ${
  48. document.querySelector('.pageTest #largeLiveWpmAndAcc #liveAcc')
  49. ?.textContent
  50. } acc`
  51. if (
  52. document
  53. .querySelector('#top .config .mode .text-button.active')
  54. ?.textContent
  55. ?.replace(/[\t\r\n]/g, '') === 'time'
  56. ) {
  57. presenceData.endTimestamp = Math.floor(Date.now() / 1000)
  58. + (Number.parseInt(
  59. document.querySelector('.pageTest #premidSecondsLeft')?.textContent ?? '0',
  60. )
  61. + 1)
  62. }
  63. }
  64. else if (
  65. !document
  66. .querySelector('#leaderboardsWrapper')
  67. ?.classList
  68. .contains('hidden')
  69. ) {
  70. presenceData.details = 'Checking leaderboards'
  71. }
  72. break
  73. }
  74. case '/about': {
  75. presenceData.details = 'Reading about page'
  76. break
  77. }
  78. case '/settings': {
  79. presenceData.details = 'Changing settings'
  80. break
  81. }
  82. case '/login': {
  83. presenceData.details = 'Logging in'
  84. break
  85. }
  86. case '/account': {
  87. presenceData.details = 'Checking stats'
  88. break
  89. }
  90. }
  91. presence.setActivity(presenceData)
  92. })