presence.ts 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. const presence = new Presence({
  2. clientId: "941798064694378557",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000);
  5. const enum Assets {
  6. Logo = "https://cdn.rcd.gg/PreMiD/websites/H/Homestuck/assets/logo.png",
  7. Mspa = "https://cdn.rcd.gg/PreMiD/websites/H/Homestuck/assets/0.png",
  8. Ryan = "https://cdn.rcd.gg/PreMiD/websites/H/Homestuck/assets/1.png",
  9. Hellajeff = "https://cdn.rcd.gg/PreMiD/websites/H/Homestuck/assets/2.png",
  10. Meat = "https://cdn.rcd.gg/PreMiD/websites/H/Homestuck/assets/3.png",
  11. Candy = "https://cdn.rcd.gg/PreMiD/websites/H/Homestuck/assets/4.png",
  12. Prologue = "https://cdn.rcd.gg/PreMiD/websites/H/Homestuck/assets/5.png",
  13. }
  14. presence.on("UpdateData", async () => {
  15. const presenceData: PresenceData = {
  16. largeImageKey: Assets.Logo,
  17. startTimestamp: browsingTimestamp,
  18. },
  19. { pathname } = document.location,
  20. pathArr = pathname.split("/");
  21. switch (pathArr[1]) {
  22. case "":
  23. presenceData.details = "Viewing home page";
  24. break;
  25. case "stories":
  26. presenceData.details = "Viewing stories";
  27. break;
  28. case "jailbreak":
  29. presenceData.details = "Reading Jailbreak";
  30. presenceData.smallImageKey = Assets.Mspa;
  31. if (!pathArr[2]) presenceData.state = "Page 1 of 134";
  32. else presenceData.state = `Page ${pathArr[2]} of 134`;
  33. presenceData.smallImageText = document.querySelector("h2").textContent;
  34. presenceData.buttons = [
  35. {
  36. label: "Read Along",
  37. url: `https://www.homestuck.com${pathname}`,
  38. },
  39. ];
  40. break;
  41. case "bard-quest":
  42. presenceData.details = "Reading Bard Quest";
  43. presenceData.smallImageKey = Assets.Mspa;
  44. if (!pathArr[2]) presenceData.state = "Page 1 of 47";
  45. else presenceData.state = `Page ${pathArr[2]} of 47`;
  46. presenceData.smallImageText = document.querySelector("h2").textContent;
  47. presenceData.buttons = [
  48. {
  49. label: "Read Along",
  50. url: `https://www.homestuck.com${pathname}`,
  51. },
  52. ];
  53. break;
  54. case "problem-sleuth":
  55. presenceData.details = "Reading Problem Sleuth";
  56. presenceData.smallImageKey = Assets.Mspa;
  57. if (!pathArr[2]) presenceData.state = "Page 1 of 1674";
  58. else presenceData.state = `Page ${pathArr[2]} of 1674`;
  59. presenceData.smallImageText = document.querySelector("h2").textContent;
  60. presenceData.buttons = [
  61. {
  62. label: "Read Along",
  63. url: `https://www.homestuck.com${pathname}`,
  64. },
  65. ];
  66. break;
  67. case "ryanquest":
  68. presenceData.details = "Reading Ryanquest";
  69. presenceData.smallImageKey = Assets.Ryan;
  70. if (!pathArr[2]) presenceData.state = "Page 1 of 15";
  71. else presenceData.state = `Page ${pathArr[2]} of 15`;
  72. presenceData.smallImageText = document.querySelector("h2").textContent;
  73. presenceData.buttons = [
  74. {
  75. label: "Read Along",
  76. url: `https://www.homestuck.com${pathname}`,
  77. },
  78. ];
  79. break;
  80. case "sweet-bro-and-hella-jeff":
  81. presenceData.details = "Reading Sweet Bro and Hella Jeff";
  82. presenceData.smallImageKey = Assets.Hellajeff;
  83. if (!pathArr[2]) presenceData.state = "Page 1 of 54";
  84. else presenceData.state = `Page ${pathArr[2]} of 54`;
  85. presenceData.smallImageText = "I WARNED YOU ABOUT STAIRS BRO!!!!";
  86. presenceData.buttons = [
  87. {
  88. label: "Read Along",
  89. url: `https://www.homestuck.com${pathname}`,
  90. },
  91. ];
  92. break;
  93. case "beta":
  94. presenceData.details = "Reading Homestuck (BETA)";
  95. presenceData.smallImageKey = Assets.Mspa;
  96. if (!pathArr[2]) presenceData.state = "Page 1 of 8";
  97. else presenceData.state = `Page ${pathArr[2]} of 8`;
  98. presenceData.smallImageText = document.querySelector("h2").textContent;
  99. presenceData.buttons = [
  100. {
  101. label: "Read Along",
  102. url: `https://www.homestuck.com${pathname}`,
  103. },
  104. ];
  105. break;
  106. case "story":
  107. presenceData.details = "Reading Homestuck";
  108. presenceData.smallImageKey = Assets.Mspa;
  109. if (!pathArr[2]) presenceData.state = "Page 1 of 8130";
  110. else presenceData.state = `Page ${pathArr[2]} of 8130`;
  111. if (document.querySelector("h2"))
  112. presenceData.smallImageText = document.querySelector("h2").textContent;
  113. else {
  114. presenceData.smallImageText =
  115. document.querySelector("title").textContent;
  116. }
  117. presenceData.buttons = [
  118. {
  119. label: "Read Along",
  120. url: `https://www.homestuck.com${pathname}`,
  121. },
  122. ];
  123. break;
  124. case "epilogues":
  125. presenceData.details = "Reading The Homestuck Epilogues";
  126. presenceData.state = "Viewing select screen";
  127. presenceData.smallImageKey = Assets.Prologue;
  128. presenceData.smallImageText = "Making the choice";
  129. switch (pathArr[2]) {
  130. case "prologue":
  131. if (!pathArr[3]) presenceData.state = "Viewing epilogue content";
  132. else {
  133. presenceData.state = `Prologue Chapter ${pathArr[3]} of 3`;
  134. presenceData.buttons = [
  135. {
  136. label: "Read Along",
  137. url: `https://www.homestuck.com${pathname}`,
  138. },
  139. ];
  140. }
  141. presenceData.smallImageText = "It starts with a crack.";
  142. break;
  143. case "meat":
  144. presenceData.state = `Meat Chapter ${pathArr[3]} of 44`;
  145. presenceData.smallImageKey = Assets.Meat;
  146. presenceData.smallImageText =
  147. "Meat was definitely the right choice, you think, as grease drips down your chin.";
  148. presenceData.buttons = [
  149. {
  150. label: "Read Along",
  151. url: `https://www.homestuck.com${pathname}`,
  152. },
  153. ];
  154. break;
  155. case "candy":
  156. presenceData.state = `Candy Chapter ${pathArr[3]} of 41`;
  157. presenceData.smallImageKey = Assets.Candy;
  158. presenceData.smallImageText =
  159. "Candy was definitely the right choice, John thinks, as he munches thoughtfully on a strawberry swirl mint.";
  160. presenceData.buttons = [
  161. {
  162. label: "Read Along",
  163. url: `https://www.homestuck.com${pathname}`,
  164. },
  165. ];
  166. break;
  167. }
  168. break;
  169. case "contacts":
  170. presenceData.details = "Viewing contact information";
  171. break;
  172. case "credits":
  173. presenceData.details = "Viewing credits";
  174. switch (pathArr[2]) {
  175. case "art":
  176. presenceData.details = "Viewing art credits";
  177. break;
  178. case "sound":
  179. presenceData.details = "Viewing sound credits";
  180. break;
  181. }
  182. break;
  183. case "extras":
  184. if (!pathArr[2]) {
  185. presenceData.details = "Viewing extra 1 of 40";
  186. presenceData.smallImageKey = Assets.Mspa;
  187. presenceData.smallImageText = document.querySelector("h2").textContent;
  188. } else if (pathArr[2] === "list")
  189. presenceData.details = "Viewing extras list";
  190. else {
  191. presenceData.details = `Viewing extra ${pathArr[2]} of 40`;
  192. presenceData.smallImageKey = Assets.Mspa;
  193. if (document.querySelector("h2").textContent.length <= 128) {
  194. presenceData.smallImageText =
  195. document.querySelector("h2").textContent;
  196. } else {
  197. presenceData.smallImageText = `${document
  198. .querySelector("h2")
  199. .textContent.substring(0, 124)}...`;
  200. }
  201. }
  202. break;
  203. case "faqs":
  204. case "faqs#Q1":
  205. case "faqs#Q2":
  206. case "faqs#Q3":
  207. case "faqs#Q4":
  208. case "faqs#Q6":
  209. case "faqs#Q7":
  210. case "faqs#Q7_5":
  211. case "faqs#Q8":
  212. presenceData.details = "Viewing FAQ";
  213. switch (pathArr[2]) {
  214. case "science":
  215. case "science#Q1":
  216. case "science#Q2":
  217. case "science#Q3":
  218. case "science#Q4":
  219. case "science#Q5":
  220. case "science#Q6":
  221. case "science#Q7":
  222. presenceData.details = "Viewing science FAQ";
  223. break;
  224. }
  225. break;
  226. case "images":
  227. presenceData.details = "Viewing an image";
  228. break;
  229. case "info-games":
  230. presenceData.details = "Viewing game information";
  231. break;
  232. case "info-more":
  233. presenceData.details = "Viewing more information";
  234. break;
  235. case "info-shop":
  236. presenceData.details = "Viewing shop information";
  237. break;
  238. case "info-story":
  239. presenceData.details = "Viewing Homestuck information";
  240. break;
  241. case "log":
  242. switch (pathArr[2]) {
  243. case "jailbreak":
  244. presenceData.details = "Viewing Jailbreak adventure log";
  245. break;
  246. case "bard-quest":
  247. presenceData.details = "Viewing Bard Quest adventure log";
  248. break;
  249. case "problem-sleuth":
  250. presenceData.details = "Viewing Problem Sleuth adventure log";
  251. break;
  252. case "story":
  253. presenceData.details = "Viewing Homestuck adventure log";
  254. break;
  255. case "epilogues":
  256. presenceData.details =
  257. "Viewing The Homestuck Epilogues adventure log";
  258. break;
  259. }
  260. break;
  261. case "map":
  262. switch (pathArr[2]) {
  263. case "problem-sleuth":
  264. presenceData.details = "Viewing Problem Sleuth adventure map";
  265. break;
  266. case "story":
  267. presenceData.details = "Viewing Homestuck adventure map";
  268. break;
  269. }
  270. break;
  271. case "news":
  272. presenceData.details = "Viewing news";
  273. break;
  274. case "privacy":
  275. case "privacy#ccpa":
  276. case "privacy#tools":
  277. case "privacy#choices":
  278. case "privacy#how-we-use":
  279. presenceData.details = "Viewing privacy policy";
  280. break;
  281. default:
  282. presenceData.details = "Viewing an unsupported page";
  283. break;
  284. }
  285. if (presenceData.details) presence.setActivity(presenceData);
  286. else presence.setActivity();
  287. });