presence.ts 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. const presence = new Presence({
  2. clientId: "939893060672827402",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000),
  5. assets = {
  6. s90e: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/0.png",
  7. s360h: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/1.png",
  8. s360e: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/2.png",
  9. s90n: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/3.png",
  10. s90ex: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/4.png",
  11. s1sh: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/5.png",
  12. s1sn: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/6.png",
  13. s1se: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/7.png",
  14. snan: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/8.png",
  15. sn: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/9.png",
  16. s1sex: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/10.png",
  17. snaex: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/11.png",
  18. snae: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/12.png",
  19. s360ex: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/13.png",
  20. sllex: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/14.png",
  21. sep: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/15.png",
  22. s1sep: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/16.png",
  23. sllep: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/17.png",
  24. s360ep: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/18.png",
  25. sllh: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/19.png",
  26. se: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/20.png",
  27. snaep: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/21.png",
  28. sex: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/22.png",
  29. slle: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/23.png",
  30. snah: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/24.png",
  31. sh: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/25.png",
  32. s90h: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/26.png",
  33. slln: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/27.png",
  34. s360n: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/28.png",
  35. s90ep: "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/29.png",
  36. };
  37. presence.on("UpdateData", async () => {
  38. const [time, buttons, cover] = await Promise.all([
  39. presence.getSetting<boolean>("time"),
  40. presence.getSetting<boolean>("buttons"),
  41. presence.getSetting<boolean>("cover"),
  42. ]),
  43. presenceData: PresenceData = {
  44. largeImageKey:
  45. "https://cdn.rcd.gg/PreMiD/websites/H/Hitbloq/assets/logo.png",
  46. startTimestamp: browsingTimestamp,
  47. };
  48. presenceData.details = document.location.pathname.split("/")[1];
  49. switch (document.location.pathname.split("/")[1]) {
  50. case "map_pool": {
  51. presenceData.details = "Viewing map pool";
  52. presenceData.state = document
  53. .querySelector<HTMLMetaElement>("[property='og:title']")
  54. .content.replace(" Map Pool", "");
  55. presenceData.buttons = [
  56. {
  57. label: "View Page",
  58. url: document.location.href,
  59. },
  60. ];
  61. if (cover) {
  62. presenceData.largeImageKey = document.querySelector<HTMLMetaElement>(
  63. "[property='og:image']"
  64. ).content;
  65. }
  66. break;
  67. }
  68. case "ladder": {
  69. presenceData.details = "Viewing ladder";
  70. presenceData.state = document
  71. .querySelector<HTMLMetaElement>("[property='og:title']")
  72. .content.replace(" Ladder", "");
  73. break;
  74. }
  75. case "ranked_list": {
  76. presenceData.details = "Viewing ranked list";
  77. presenceData.state = document
  78. .querySelector<HTMLMetaElement>("[property='og:title']")
  79. .content.replace(" Ranked List", "");
  80. break;
  81. }
  82. case "user": {
  83. presenceData.details = `User: ${
  84. document.querySelector(".player-profile-username > b").textContent
  85. }`;
  86. presenceData.state = `Pool: ${
  87. document.querySelector("title").textContent.split("'s Profile - ")[1]
  88. }`;
  89. presenceData.largeImageKey = document.querySelector<HTMLImageElement>(
  90. ".player-profile-image"
  91. ).src;
  92. presenceData.buttons = [
  93. {
  94. label: "View Profile",
  95. url: document.location.href,
  96. },
  97. ];
  98. break;
  99. }
  100. case "leaderboard": {
  101. presenceData.details =
  102. document.querySelector(".leaderboard-title").textContent;
  103. presenceData.state =
  104. document.querySelector(".leaderboard-data").childNodes[2].textContent;
  105. presenceData.largeImageKey =
  106. document.querySelector<HTMLImageElement>(".leaderboard-cover").src;
  107. presenceData.buttons = [
  108. {
  109. label: "View Page",
  110. url: document.location.href,
  111. },
  112. ];
  113. presenceData.smallImageKey =
  114. assets[
  115. `${document.location.pathname.split("_")[2]}${
  116. document.location.pathname.split("_")[1]
  117. }` as keyof typeof assets
  118. ];
  119. let characteristic;
  120. switch (document.location.pathname.split("_")[2]) {
  121. case "s": {
  122. characteristic = "Standard";
  123. break;
  124. }
  125. case "sll": {
  126. characteristic = "Lawless";
  127. break;
  128. }
  129. case "s90": {
  130. characteristic = "90 Degree";
  131. break;
  132. }
  133. case "s360": {
  134. characteristic = "360 Degree";
  135. break;
  136. }
  137. case "s1s": {
  138. characteristic = "One Saber";
  139. break;
  140. }
  141. case "sna": {
  142. characteristic = "No Arrows";
  143. break;
  144. }
  145. }
  146. let difficulty;
  147. switch (document.location.pathname.split("_")[1]) {
  148. case "e": {
  149. difficulty = "Easy";
  150. break;
  151. }
  152. case "n": {
  153. difficulty = "Normal";
  154. break;
  155. }
  156. case "h": {
  157. difficulty = "Hard";
  158. break;
  159. }
  160. case "ex": {
  161. difficulty = "Expert";
  162. break;
  163. }
  164. case "ep": {
  165. difficulty = "Expert+";
  166. break;
  167. }
  168. }
  169. presenceData.smallImageText = `${characteristic} ${difficulty}`;
  170. break;
  171. }
  172. case "map_pools": {
  173. presenceData.details = "Browsing map pools";
  174. break;
  175. }
  176. case "about": {
  177. presenceData.details = "Viewing the about page";
  178. break;
  179. }
  180. case "contact": {
  181. presenceData.details = "Viewing the contact page";
  182. break;
  183. }
  184. case "actions": {
  185. presenceData.details = "Viewing the action queue";
  186. break;
  187. }
  188. case "add_user": {
  189. presenceData.details = "Adding user";
  190. break;
  191. }
  192. case "": {
  193. presenceData.details = "Viewing the home page";
  194. break;
  195. }
  196. }
  197. if (!time) delete presenceData.startTimestamp;
  198. if (!buttons) delete presenceData.buttons;
  199. presence.setActivity(presenceData);
  200. });