presence.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. const presence = new Presence({
  2. clientId: "831262912815300638",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000);
  5. presence.on("UpdateData", async () => {
  6. const presenceData: PresenceData = {
  7. largeImageKey:
  8. "https://cdn.rcd.gg/PreMiD/websites/M/MangaHere/assets/logo.png",
  9. startTimestamp: browsingTimestamp,
  10. },
  11. { pathname } = document.location,
  12. ganres = [
  13. "martial-arts",
  14. "action",
  15. "school-life",
  16. "sci-fi",
  17. "yoi",
  18. "shotacon",
  19. "mystery",
  20. "shoujo",
  21. "ecchi",
  22. "doujinshi",
  23. "lolicon",
  24. "adventure",
  25. "romance",
  26. "gender-bender",
  27. "harem",
  28. "sports",
  29. "webtoons",
  30. "comedy",
  31. "shounen-ai",
  32. "josei",
  33. "shoujo-ai",
  34. "adult",
  35. "fantasy",
  36. "supernatural",
  37. "psychological",
  38. "yuri",
  39. "one-shot",
  40. "historical",
  41. "drama",
  42. "seinen",
  43. "mature",
  44. "smut",
  45. "horror",
  46. "shounen",
  47. "slice-of-life",
  48. "tragedy",
  49. "mecha",
  50. ];
  51. switch (pathname) {
  52. case "/": {
  53. presenceData.details = "Viewing the Homepage";
  54. break;
  55. }
  56. case "/latest/": {
  57. presenceData.details = "Browsing latest manga";
  58. break;
  59. }
  60. case "/ranking/": {
  61. presenceData.details = "Browsing by ranking";
  62. break;
  63. }
  64. case "/spoilers/": {
  65. presenceData.details = "Browsing spoilers and news";
  66. break;
  67. }
  68. case "/directory/": {
  69. presenceData.details = "Browsing all manga";
  70. break;
  71. }
  72. case "/on_going/": {
  73. presenceData.details = "Browsing ongoing manga";
  74. break;
  75. }
  76. default:
  77. if (pathname.endsWith("/new/")) {
  78. const splitUrl = pathname.split("/");
  79. presenceData.details =
  80. splitUrl[1] === "new"
  81. ? "Browsing new manga"
  82. : `Browsing new ${splitUrl[1]} manga`;
  83. } else if (pathname.endsWith("/completed/")) {
  84. //ganre/completed/
  85. const splitUrl = pathname.split("/");
  86. presenceData.details =
  87. splitUrl[1] === "completed"
  88. ? "Browsing completed manga"
  89. : `Browsing completed ${splitUrl[1]} manga`;
  90. } else if (pathname.endsWith("/on_going/")) {
  91. //ganre/on_going/
  92. const splitUrl = pathname.split("/");
  93. presenceData.details =
  94. splitUrl[1] === "on_going"
  95. ? "Browsing ongoing manga"
  96. : `Browsing ongoing ${splitUrl[1]} manga`;
  97. } else if (pathname.startsWith("/manga") && pathname.endsWith("/")) {
  98. //Manga Viewing
  99. presenceData.details = "Viewing manga:";
  100. presenceData.state = document.querySelector(
  101. ".detail-info-right-title-font"
  102. ).textContent;
  103. presenceData.buttons = [
  104. { label: "View Manga", url: window.location.href },
  105. ];
  106. presenceData.smallImageKey = Assets.Viewing;
  107. } else if (pathname.startsWith("/manga") && pathname.endsWith(".html")) {
  108. //Manga Reading
  109. const chapter = document.querySelector(
  110. ".reader-header-title-2"
  111. ).textContent,
  112. //setting up page progress
  113. current = document.querySelector(".pager-list-left span");
  114. if (!current) presenceData.state = chapter;
  115. else {
  116. presenceData.state = `${chapter} page ${`${
  117. document.querySelector(".pager-list-left > span > .active")
  118. .textContent
  119. }/${current.children[current.children.length - 2].textContent}`}`;
  120. }
  121. presenceData.details = document.querySelector(
  122. ".reader-header-title-1"
  123. ).textContent;
  124. presenceData.smallImageKey = Assets.Reading;
  125. } else if (pathname.startsWith("/search")) {
  126. //Searching
  127. const urlParams = new URLSearchParams(window.location.search);
  128. presenceData.details = "Searching:";
  129. presenceData.state =
  130. urlParams.get("title") === ""
  131. ? urlParams.get("name")
  132. : urlParams.get("title");
  133. presenceData.smallImageKey = Assets.Search;
  134. }
  135. }
  136. for (const ganre of ganres) {
  137. if (pathname.substring(1, pathname.length - 1) === ganre) {
  138. presenceData.details = "Browsing:";
  139. presenceData.state = `${ganre.replace("-", " ")} manga`;
  140. }
  141. }
  142. presence.setActivity(presenceData);
  143. });