presence.ts 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. const presence = new Presence({
  2. clientId: "843731213893107713",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000),
  5. assets = {
  6. gryffindor:
  7. "https://cdn.rcd.gg/PreMiD/websites/W/Wizarding%20World/assets/0.png",
  8. hufflepuff:
  9. "https://cdn.rcd.gg/PreMiD/websites/W/Wizarding%20World/assets/1.png",
  10. ravenclaw:
  11. "https://cdn.rcd.gg/PreMiD/websites/W/Wizarding%20World/assets/2.png",
  12. slytherin:
  13. "https://cdn.rcd.gg/PreMiD/websites/W/Wizarding%20World/assets/3.png",
  14. };
  15. presence.on("UpdateData", async function () {
  16. const setting = {
  17. timeElapsed: await presence.getSetting<boolean>("timeElapsed"),
  18. showButtons: await presence.getSetting<boolean>("showButtons"),
  19. },
  20. urlpath = window.location.pathname.split("/"),
  21. presenceData: PresenceData = {
  22. largeImageKey:
  23. "https://cdn.rcd.gg/PreMiD/websites/W/Wizarding%20World/assets/logo.jpg",
  24. };
  25. if (setting.timeElapsed) presenceData.startTimestamp = browsingTimestamp;
  26. if (document.location.host === "www.wizardingworld.com") {
  27. if (!urlpath[1]) presenceData.details = "Home";
  28. else {
  29. switch (urlpath[1]) {
  30. case "news":
  31. case "features": {
  32. presenceData.details = urlpath[1] === "news" ? "News" : "Features";
  33. if (urlpath[2]) {
  34. presenceData.state =
  35. document.querySelector("h1.ArticleHero_title__cOam6")
  36. ?.textContent || "Unknown";
  37. if (setting.showButtons) {
  38. presenceData.buttons = [
  39. {
  40. label: "View Article",
  41. url: window.location.href,
  42. },
  43. ];
  44. }
  45. }
  46. break;
  47. }
  48. case "quiz": {
  49. presenceData.details = "Quiz";
  50. if (urlpath[2]) {
  51. presenceData.state =
  52. document.querySelector("h1.ArticleHero_title__cOam6")
  53. ?.textContent || "Unknown";
  54. if (setting.showButtons) {
  55. presenceData.buttons = [
  56. {
  57. label: "View Quiz",
  58. url: window.location.href,
  59. },
  60. ];
  61. }
  62. }
  63. break;
  64. }
  65. case "writing-by-jk-rowling": {
  66. presenceData.details = "J.K. Rowling Originals";
  67. if (urlpath[2]) {
  68. const post = document.querySelector("h1.ArticleHero_title__cOam6"),
  69. label =
  70. post?.textContent.length >= 15
  71. ? `${post?.textContent.substring(0, 15)}...`
  72. : post?.textContent;
  73. presenceData.state = post?.textContent || "Unknown";
  74. if (setting.showButtons && post) {
  75. presenceData.buttons = [
  76. {
  77. label: `View: ${label}`,
  78. url: window.location.href,
  79. },
  80. ];
  81. }
  82. }
  83. break;
  84. }
  85. case "discover": {
  86. presenceData.details = "Discover";
  87. if (
  88. urlpath[2] === "books" ||
  89. urlpath[2] === "films" ||
  90. urlpath[2] === "portkey-games" ||
  91. urlpath[2] === "on-stage" ||
  92. urlpath[2] === "experiences"
  93. ) {
  94. if (urlpath[3]) {
  95. let ctopic = "Loading...";
  96. presenceData.state =
  97. document.querySelector("h1.Header_productName__8oV2G")
  98. ?.textContent || "Unknown";
  99. switch (urlpath[2]) {
  100. case "books": {
  101. ctopic = "Book";
  102. break;
  103. }
  104. case "films": {
  105. ctopic = "Film";
  106. break;
  107. }
  108. case "portkey-games": {
  109. ctopic = "Game";
  110. break;
  111. }
  112. case "experiences":
  113. {
  114. ctopic = "Experience";
  115. // No default
  116. }
  117. break;
  118. }
  119. if (setting.showButtons && urlpath[2] !== "on-stage") {
  120. presenceData.buttons = [
  121. {
  122. label: `View ${ctopic}`,
  123. url: window.location.href,
  124. },
  125. ];
  126. }
  127. } else {
  128. presenceData.state =
  129. document.querySelector("h1.DiscoverListHeader_header__3ivqr")
  130. ?.textContent || "Unknown";
  131. }
  132. }
  133. break;
  134. }
  135. case "collections": {
  136. presenceData.details = "Collections";
  137. if (urlpath[2]) {
  138. presenceData.state =
  139. document.querySelector("h1.CollectionHero_header__3rDGu")
  140. ?.textContent || "Unknown";
  141. if (setting.showButtons) {
  142. presenceData.buttons = [
  143. {
  144. label: "View Collection",
  145. url: window.location.href,
  146. },
  147. ];
  148. }
  149. }
  150. break;
  151. }
  152. case "harry-potter-fan-club": {
  153. presenceData.details = "Fan Club";
  154. break;
  155. }
  156. default:
  157. presenceData.details = "Other";
  158. }
  159. }
  160. } else if (document.location.host === "my.wizardingworld.com") {
  161. if (urlpath[1] === "passport") presenceData.details = "Passport";
  162. if (document.querySelector("span.HogwartsHouse_houseName__CykI1")) {
  163. presenceData.smallImageKey =
  164. assets[
  165. document
  166. .querySelector("span.HogwartsHouse_houseName__CykI1")
  167. ?.textContent.toLocaleLowerCase() as keyof typeof assets
  168. ];
  169. presenceData.smallImageText = document.querySelector(
  170. "span.HogwartsHouse_houseName__CykI1"
  171. )?.textContent;
  172. }
  173. }
  174. if (presenceData.details) presence.setActivity(presenceData);
  175. else presence.setActivity();
  176. });