presence.ts 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. const presence = new Presence({
  2. clientId: "739290632463319141",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000);
  5. interface FilmData {
  6. "@type": string;
  7. name: string;
  8. image: string;
  9. }
  10. presence.on("UpdateData", async () => {
  11. const presenceData: PresenceData = {
  12. largeImageKey:
  13. "https://cdn.rcd.gg/PreMiD/websites/M/MyDramaList/assets/logo.png",
  14. startTimestamp: browsingTimestamp,
  15. },
  16. coverEnabled = await presence.getSetting("cover");
  17. if (document.location.pathname === "/") {
  18. presenceData.details = "Viewing the homepage";
  19. presenceData.smallImageKey = Assets.Reading;
  20. presenceData.smallImageText = "Browsing";
  21. } else if (document.location.pathname.startsWith("/episode-calendar")) {
  22. presenceData.details = "Viewing Upcomming Shows";
  23. presenceData.smallImageKey = Assets.Reading;
  24. presenceData.smallImageText = "MDL";
  25. } else if (document.location.pathname.startsWith("/search")) {
  26. let searchThing = decodeURIComponent(
  27. document.location.search.substring(3)
  28. ).replaceAll("+", " ");
  29. if (searchThing.includes("&"))
  30. searchThing = searchThing.substring(0, searchThing.indexOf("&"));
  31. presenceData.details = "Searching for a show...";
  32. presenceData.state = searchThing;
  33. presenceData.smallImageKey =
  34. "https://cdn.rcd.gg/PreMiD/websites/M/MyDramaList/assets/logo.png";
  35. presenceData.smallImageText = "MDL";
  36. } else if (document.location.pathname.startsWith("/article/")) {
  37. presenceData.details = "Reading an article:";
  38. presenceData.state = document.querySelector(
  39. "#article > div.box-header > h1 > a"
  40. ).textContent;
  41. presenceData.smallImageKey = Assets.Reading;
  42. presenceData.smallImageText = "Reading and article";
  43. } else if (document.location.pathname === "/articles") {
  44. presenceData.details = "Browsing articles";
  45. presenceData.smallImageKey =
  46. "https://cdn.rcd.gg/PreMiD/websites/M/MyDramaList/assets/logo.png";
  47. presenceData.smallImageText = "MDL";
  48. } else if (document.location.pathname.startsWith("/trailers")) {
  49. presenceData.details = "Looking at Trailers";
  50. presenceData.smallImageKey =
  51. "https://cdn.rcd.gg/PreMiD/websites/M/MyDramaList/assets/logo.png";
  52. presenceData.smallImageText = "MDL";
  53. } else if (document.location.pathname.startsWith("/feeds")) {
  54. presenceData.details = "Browsing through feeds";
  55. presenceData.smallImageKey =
  56. "https://cdn.rcd.gg/PreMiD/websites/M/MyDramaList/assets/logo.png";
  57. presenceData.smallImageText = "MDL";
  58. } else if (document.location.pathname.startsWith("/list")) {
  59. presenceData.details = "Looking at user lists";
  60. presenceData.smallImageKey =
  61. "https://cdn.rcd.gg/PreMiD/websites/M/MyDramaList/assets/logo.png";
  62. presenceData.smallImageText = "MDL";
  63. } else if (document.location.pathname.startsWith("/contributors")) {
  64. presenceData.details = "Looking at Top Contributors";
  65. presenceData.smallImageKey =
  66. "https://cdn.rcd.gg/PreMiD/websites/M/MyDramaList/assets/logo.png";
  67. presenceData.smallImageText = "MDL";
  68. } else if (document.location.pathname.startsWith("/discussions")) {
  69. presenceData.details = "Browsing forums";
  70. presenceData.smallImageKey =
  71. "https://cdn.rcd.gg/PreMiD/websites/M/MyDramaList/assets/logo.png";
  72. presenceData.smallImageText = "MDL";
  73. } else if (document.location.pathname.startsWith("/shows/")) {
  74. presenceData.details = "Browsing Shows List";
  75. presenceData.smallImageKey =
  76. "https://cdn.rcd.gg/PreMiD/websites/M/MyDramaList/assets/logo.png";
  77. presenceData.smallImageText = "MDL";
  78. } else if (document.location.pathname.startsWith("/reviews/")) {
  79. presenceData.details = "Reading Reviews";
  80. presenceData.smallImageKey =
  81. "https://cdn.rcd.gg/PreMiD/websites/M/MyDramaList/assets/logo.png";
  82. presenceData.smallImageText = "MDL";
  83. } else if (document.location.pathname.startsWith("/profile/")) {
  84. const profilePicture = document.querySelector(
  85. ".box-user-profile :is(video, img)"
  86. );
  87. presenceData.details = `Viewing ${document
  88. .querySelector(".profile-header h1")
  89. .textContent.trim()}'s profile`;
  90. presenceData.largeImageKey =
  91. profilePicture.getAttribute("poster") ??
  92. profilePicture.getAttribute("src");
  93. presenceData.smallImageKey =
  94. "https://cdn.rcd.gg/PreMiD/websites/M/MyDramaList/assets/logo.png";
  95. presenceData.smallImageText = "MDL";
  96. } else if (document.location.pathname.startsWith("/recommendations")) {
  97. presenceData.details = "Looking at personailized recommendations";
  98. presenceData.smallImageKey =
  99. "https://cdn.rcd.gg/PreMiD/websites/M/MyDramaList/assets/logo.png";
  100. } else if (document.location.pathname.startsWith("/people/")) {
  101. presenceData.details = "Viewing actor:";
  102. presenceData.state = document.querySelector(".box-header > h1").textContent;
  103. presenceData.largeImageKey =
  104. document.querySelector<HTMLImageElement>(".box-body > img").src;
  105. presenceData.smallImageKey =
  106. "https://cdn.rcd.gg/PreMiD/websites/M/MyDramaList/assets/logo.png";
  107. presenceData.smallImageText = "MDL";
  108. } else if (document.location.href.match("/[^-][0-9]{1,5}")) {
  109. const filmData: FilmData = (() => {
  110. const title = document.querySelector(".film-title > a")?.textContent;
  111. if (!title) {
  112. const jsonData = document.querySelector(
  113. '[type="application/ld+json"]'
  114. )?.textContent;
  115. if (!jsonData) return;
  116. else return JSON.parse(jsonData);
  117. }
  118. return {
  119. name: title,
  120. image: document.querySelector<HTMLImageElement>(
  121. ".box-body > .row > div img"
  122. )?.src,
  123. "@type": document
  124. .querySelector(".container-fluid.title-container")
  125. ?.getAttribute("itemtypex")
  126. ?.split("/")
  127. ?.pop(),
  128. };
  129. })();
  130. if (filmData) {
  131. presenceData.details = `Viewing ${
  132. filmData["@type"] === "Movie" ? "movie" : "show"
  133. }:`;
  134. presenceData.state = filmData.name;
  135. presenceData.largeImageKey = filmData.image;
  136. presenceData.smallImageKey =
  137. "https://cdn.rcd.gg/PreMiD/websites/M/MyDramaList/assets/logo.png";
  138. presenceData.smallImageText = "MDL";
  139. }
  140. }
  141. if (
  142. (presenceData.largeImageKey as string).includes("http") &&
  143. !coverEnabled
  144. ) {
  145. presenceData.largeImageKey =
  146. "https://cdn.rcd.gg/PreMiD/websites/M/MyDramaList/assets/logo.png";
  147. }
  148. if (presenceData.details) presence.setActivity(presenceData);
  149. else presence.setActivity();
  150. });