presence.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. const presence = new Presence({
  2. clientId: "923893773048619008",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000);
  5. let cacheMangaURL: string, cacheMangaChapter: string;
  6. presence.on("UpdateData", async () => {
  7. const presenceData: PresenceData = {
  8. details: "Browsing",
  9. largeImageKey:
  10. "https://cdn.rcd.gg/PreMiD/websites/M/Manga%20Plus/assets/logo.png",
  11. startTimestamp: browsingTimestamp,
  12. },
  13. { pathname } = document.location,
  14. mangaURL = document.querySelector<HTMLAnchorElement>(
  15. "#app div.Navigation-module_detailContainer_1aDk8 > a"
  16. ),
  17. mangaChapter = document.querySelector<HTMLParagraphElement>(
  18. "#app > div > div > div > div > div > div > p"
  19. ),
  20. buttons = await presence.getSetting<boolean>("buttons");
  21. // So that the script would stop throwing errors when the navigator collapses
  22. if (mangaURL?.href !== cacheMangaURL) cacheMangaURL = mangaURL.href;
  23. if (mangaChapter?.textContent !== cacheMangaChapter)
  24. cacheMangaChapter = mangaChapter.textContent;
  25. if (pathname.startsWith("/updates"))
  26. presenceData.details = "Browsing lastest updates";
  27. else if (pathname.startsWith("/featured"))
  28. presenceData.details = "Browsing featured mangas";
  29. else if (pathname.startsWith("/manga_list")) {
  30. if (pathname.includes("all")) presenceData.details = "Browsing all mangas";
  31. else if (pathname.includes("hot"))
  32. presenceData.details = "Browsing hottest mangas";
  33. else if (pathname.includes("updated"))
  34. presenceData.details = "Browsing updated mangas";
  35. } else if (pathname.startsWith("/favorited"))
  36. presenceData.details = "Viewing favorited mangas";
  37. else if (pathname.startsWith("/titles")) {
  38. presenceData.details = `Viewing: ${document.title.substring(
  39. 0,
  40. document.title.lastIndexOf("-") - 1
  41. )}`;
  42. presenceData.state = document.title.substring(
  43. document.title.lastIndexOf("-") + 1,
  44. document.title.lastIndexOf("|") - 1
  45. );
  46. presenceData.buttons = [{ label: "View series", url: document.URL }];
  47. } else if (pathname.startsWith("/viewer")) {
  48. presenceData.details = `Reading: ${
  49. document.querySelector<HTMLHeadingElement>("#app a > h1").textContent
  50. }`;
  51. presenceData.state = `Chapter ${cacheMangaChapter}`;
  52. presenceData.buttons = [
  53. { label: "Read chapter", url: document.URL },
  54. {
  55. label: "View series",
  56. url: cacheMangaURL,
  57. },
  58. ];
  59. }
  60. if (!buttons) delete presenceData.buttons;
  61. presence.setActivity(presenceData);
  62. });