presence.ts 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. const presence = new Presence({
  2. clientId: "717795432251654200",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000),
  5. // This is better than having a lot of (almost) empty switch cases
  6. // Assigning details to type any made ESLint scream, and setting it to type string made the compiler scream
  7. details: { [k: string]: string } = {
  8. "/stories/": "Searching for an adventure",
  9. // This is just error handling because /random/ redirects you
  10. "/random/": "Finding a random adventure",
  11. "/stats/": "Looking at site stats",
  12. "/my/": "Looking at their profile",
  13. "/user/": "Looking at a profile",
  14. "/my/profile/": "Editing their profile",
  15. "/my/settings/": "Editing their profile",
  16. "/my/stories/": "Editing an adventure",
  17. "/my/stories/info/": "Editing an adventure",
  18. "/my/stories/pages/": "Editing an adventure",
  19. "/favs/": "Browsing favorite adventures",
  20. "/my/messages/": "Reading private messages",
  21. "/achivements/": "Looking at someone's achievements",
  22. "/donate/": "Considering donating",
  23. "/privacy/": "Reading the privacy policy",
  24. "/terms/": "Reading the ToS",
  25. "/log/": "Reading an adventure log",
  26. "/search/": "Searching an adventure",
  27. };
  28. presence.on("UpdateData", async () => {
  29. const presenceData: PresenceData = {
  30. largeImageKey: "https://cdn.rcd.gg/PreMiD/websites/M/MSPFA/assets/logo.png",
  31. startTimestamp: browsingTimestamp,
  32. };
  33. switch (document.location.pathname) {
  34. case "/stories/":
  35. presenceData.smallImageKey = Assets.Search;
  36. break;
  37. case "/user/":
  38. presenceData.state = `User: ${
  39. document.querySelector("h2#username").textContent
  40. }`;
  41. break;
  42. case "/my/profile/":
  43. presenceData.smallImageKey = Assets.Writing;
  44. break;
  45. case "/my/settings/":
  46. presenceData.smallImageKey = Assets.Writing;
  47. break;
  48. case "/my/stories/":
  49. presenceData.smallImageKey = Assets.Writing;
  50. break;
  51. case "/my/stories/info/":
  52. presenceData.smallImageKey = Assets.Writing;
  53. break;
  54. case "/my/stories/pages/":
  55. presenceData.smallImageKey = Assets.Writing;
  56. presenceData.state =
  57. document.querySelector("a#storyname.major").textContent;
  58. break;
  59. case "/achievements/":
  60. presenceData.state = `User: ${
  61. document.querySelector("a#username").textContent
  62. }`;
  63. break;
  64. case "/log/":
  65. presenceData.state =
  66. document.querySelector("a#storyname.major").textContent;
  67. break;
  68. case "/search/":
  69. presenceData.state =
  70. document.querySelector("a#storyname.major").textContent;
  71. break;
  72. default:
  73. break;
  74. }
  75. if (document.location.pathname === "/" && document.location.search === "")
  76. presenceData.details = "Viewing home page";
  77. else if (
  78. document.location.pathname === "/" &&
  79. document.location.search !== ""
  80. ) {
  81. presenceData.details = "Reading an adventure";
  82. presenceData.state = document.querySelector("title").textContent;
  83. presenceData.smallImageKey = Assets.Reading;
  84. let { search } = document.location;
  85. search = new URLSearchParams(search).get("p");
  86. presenceData.smallImageText = `On page ${search}`;
  87. }
  88. if (document.location.pathname in details)
  89. presenceData.details = details[document.location.pathname];
  90. if (presenceData.details) presence.setActivity(presenceData);
  91. else presence.setActivity();
  92. });