presence.ts 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. const presence = new Presence({
  2. clientId: "895022531868774451",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000);
  5. presence.on("UpdateData", async () => {
  6. const presenceData: PresenceData = {
  7. largeImageKey:
  8. "https://cdn.rcd.gg/PreMiD/websites/0-9/10fastfingers/assets/logo.png",
  9. startTimestamp: browsingTimestamp,
  10. },
  11. [start, end] = presence.getTimestamps(
  12. presence.timestampFromFormat("00:00"),
  13. presence.timestampFromFormat("1:00")
  14. );
  15. if (document.location.pathname === "/") presenceData.details = "In home page";
  16. else if (document.location.pathname.match(/\/typing-test\/.+\/top50/gm))
  17. presenceData.details = "Viewing top 50";
  18. else if (document.location.pathname.includes("/typing-test/")) {
  19. const timer = document.querySelector("#timer").textContent;
  20. if (timer === "1:00")
  21. presenceData.details = "Waiting to start a typing test";
  22. else if (timer === "0:00") {
  23. presenceData.details = "Finishing a typing test:";
  24. presenceData.state = `In ${
  25. document.querySelector("#switch-typing-test-language").textContent
  26. } | ${document.querySelector("#wpm").textContent.split("(")[0]} `;
  27. } else {
  28. [presenceData.startTimestamp, presenceData.endTimestamp] = [start, end];
  29. presenceData.details = "Doing a typing test:";
  30. presenceData.state = `In ${
  31. document.querySelector("#switch-typing-test-language").textContent
  32. }`;
  33. }
  34. } else if (document.location.pathname.includes("/advanced-typing-test/")) {
  35. const timer = document.querySelector("#timer").textContent;
  36. if (timer === "1:00")
  37. presenceData.details = "Waiting to start an advance Typing test";
  38. else if (timer === "0:00") {
  39. presenceData.details = "Finishing an advance typing test:";
  40. presenceData.state = `In ${
  41. document.querySelector("#switch-typing-test-language").textContent
  42. } | ${document.querySelector("#wpm").textContent.split("(")[0]} `;
  43. } else {
  44. presenceData.endTimestamp = end;
  45. presenceData.details = "Doing an advance typing test:";
  46. presenceData.state = `In ${
  47. document.querySelector("#switch-typing-test-language").textContent
  48. }`;
  49. }
  50. } else if (document.location.pathname.includes("/competition/")) {
  51. const timer = document.querySelector("#timer").textContent;
  52. if (timer === "1:00")
  53. presenceData.details = "Waiting to start a competition";
  54. else if (timer === "0:00") {
  55. presenceData.details = "Finishing a competition:";
  56. presenceData.state = `${
  57. document.querySelector("#wpm").textContent.split("(")[0]
  58. } WPM `;
  59. } else {
  60. presenceData.endTimestamp = end;
  61. presenceData.details = "Doing a competition";
  62. }
  63. } else if (document.location.pathname.includes("/text/")) {
  64. if (document.querySelector("#time").textContent === "00:00")
  65. presenceData.details = "Waiting to start a text practice";
  66. else {
  67. const finalTime = document.querySelector(".col-md-6 > p > strong");
  68. if (finalTime) {
  69. presenceData.details = "Finishing a text practice";
  70. presenceData.state = `Final time: ${finalTime.textContent}m`;
  71. } else presenceData.details = "Doing a text practice";
  72. }
  73. } else if (
  74. document.location.pathname.includes("/widget/") ||
  75. document.location.pathname.includes("/widgets/")
  76. ) {
  77. const timer = document.querySelector("#timer").textContent;
  78. if (timer.match(/([125]{1}[0]{0,1}:[0]{2})|(0:30)/))
  79. presenceData.details = "Waiting to start a custom typing test";
  80. else if (timer === "0:00") {
  81. presenceData.details = "Finishing a custom typing test:";
  82. presenceData.state = `${
  83. document.querySelector("#wpm").textContent.split("(")[0]
  84. }`;
  85. } else presenceData.details = " Doing a custom typing test";
  86. } else if (document.location.pathname.includes("/user/")) {
  87. presenceData.details = "Viewing a user profile:";
  88. presenceData.state =
  89. document.querySelector(".row > h2").lastChild.nodeValue;
  90. } else if (document.location.pathname.includes("/top1000/")) {
  91. const lang = document.location.pathname.split("/");
  92. presenceData.details = "Doing the top 1000 typing test:";
  93. presenceData.state = `In ${lang[lang.length - 3]}`;
  94. } else {
  95. switch (document.location.pathname) {
  96. case "/email_settings":
  97. presenceData.details = "Viewing email settings";
  98. break;
  99. case "/active-user-alltime":
  100. presenceData.details = "Viewing all-time records";
  101. break;
  102. case "/text-practice/new":
  103. presenceData.details = "Viewing text practice";
  104. break;
  105. case "/multiplayer":
  106. presenceData.details = "Doing a multiplayer typing test";
  107. break;
  108. case "/faq":
  109. presenceData.details = "Reading the FAQ";
  110. break;
  111. case "/forum/":
  112. presenceData.details = "Viewing the forums";
  113. break;
  114. case "/supporter":
  115. presenceData.details = "Viewing the list of supporters";
  116. break;
  117. case "/login":
  118. presenceData.details = "Logging in...";
  119. break;
  120. case "/create-account":
  121. presenceData.details = "Creating an account..";
  122. break;
  123. case "/impressum":
  124. presenceData.details = "Reading the privacy policy";
  125. break;
  126. case "/gdpr":
  127. presenceData.details = "Reading information about GDPR";
  128. break;
  129. case "/cookie-policy":
  130. presenceData.details = "Reading the cookie policy";
  131. break;
  132. case "/settings":
  133. presenceData.details = "Viewing their settings";
  134. break;
  135. case "/achievements":
  136. presenceData.details = "Viewing their achievements";
  137. break;
  138. case "/translations":
  139. presenceData.details = "Learning how to translate";
  140. break;
  141. case "/anticheat":
  142. presenceData.details = "Viewing the Anti-Cheat";
  143. break;
  144. case "/top1000":
  145. presenceData.details = "Viewing the top 1000 typing mode";
  146. break;
  147. case "/competitions":
  148. presenceData.details = "Viewing the list of competitions";
  149. break;
  150. }
  151. }
  152. if (presenceData.details) presence.setActivity(presenceData);
  153. else presence.setActivity();
  154. });