presence.ts 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. const presence = new Presence({
  2. clientId: "1167822908526170153",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000);
  5. let video = {
  6. current: 0,
  7. duration: 0,
  8. paused: true,
  9. };
  10. const enum Assets {
  11. Logo = "https://cdn.rcd.gg/PreMiD/websites/V/Vizjer/assets/logo.png",
  12. }
  13. presence.on(
  14. "iFrameData",
  15. (data: { current: number; duration: number; paused: boolean }) => {
  16. video = data;
  17. }
  18. );
  19. presence.on("UpdateData", async () => {
  20. const presenceData: PresenceData = {
  21. largeImageKey: Assets.Logo,
  22. startTimestamp: browsingTimestamp,
  23. },
  24. { pathname, search, href } = document.location,
  25. series = pathname.startsWith("/series/index/") ? pathname : null,
  26. movies = pathname.startsWith("/filmy-online/") ? pathname : null;
  27. switch (pathname) {
  28. case "/wyszukiwanie":
  29. if (search) {
  30. presenceData.details = "Wyszukuje po frazie:";
  31. presenceData.state = search.split("=")[1];
  32. presenceData.smallImageKey = Assets.Search;
  33. }
  34. break;
  35. case "/logowanie":
  36. presenceData.details = "Przegląda stronę logowania...";
  37. presenceData.smallImageKey = Assets.Viewing;
  38. break;
  39. case "/rejestracja":
  40. presenceData.details = "Przegląda stronę rejestracji...";
  41. presenceData.smallImageKey = Assets.Viewing;
  42. break;
  43. case "/regulamin":
  44. presenceData.details = "Przegląda regulamin...";
  45. presenceData.smallImageKey = Assets.Viewing;
  46. break;
  47. case "/profil":
  48. presenceData.details = "Przegląda swój profil...";
  49. presenceData.smallImageKey = Assets.Viewing;
  50. break;
  51. case "/twoje-materialy":
  52. presenceData.details = "Przegląda swoje materiały...";
  53. presenceData.smallImageKey = Assets.Viewing;
  54. break;
  55. case movies:
  56. presenceData.details = "Przegląda filmy online...";
  57. if (movies.includes("sort:date")) {
  58. presenceData.details =
  59. "Przegląda ostatnio zaaktualizowane filmy online...";
  60. }
  61. if (movies.includes("sort:newlink"))
  62. presenceData.details = "Przegląda ostatnio dodane filmy...";
  63. if (movies.includes("sort:vote"))
  64. presenceData.details = "Przegląda filmy z największą liczbą głosów...";
  65. if (movies.includes("sort:premiere"))
  66. presenceData.details = "Przegląda ostatnie premiery filmów...";
  67. if (movies.includes("sort:view"))
  68. presenceData.details = "Przegląda filmy z największą liczbą odsłon...";
  69. if (movies.includes("sort:rate"))
  70. presenceData.details = "Przegląda filmy z największą liczbą ocen...";
  71. presenceData.smallImageKey = Assets.Search;
  72. presenceData.state = search
  73. ? `Strona ${search.split("=")[1]}`
  74. : "Strona 1";
  75. break;
  76. case series:
  77. presenceData.details = "Przegląda seriale online...";
  78. if (series.includes("sort:newest") || series.includes("sort:date"))
  79. presenceData.details = "Przegląda najnowsze seriale online...";
  80. if (series.includes("sort:year"))
  81. presenceData.details = "Przegląda ostatnie premiery seriali...";
  82. if (series.includes("sort:vote")) {
  83. presenceData.details =
  84. "Przegląda seriale z największą liczbą głosów...";
  85. }
  86. if (series.includes("sort:view")) {
  87. presenceData.details =
  88. "Przegląda seriale z największą liczbą odsłon...";
  89. }
  90. if (series.includes("sort:rate"))
  91. presenceData.details = "Przegląda seriale z największą liczbą ocen...";
  92. presenceData.smallImageKey = Assets.Search;
  93. presenceData.state = search
  94. ? `Strona ${search.split("=")[1]}`
  95. : "Strona 1";
  96. break;
  97. case "/dla-dzieci/":
  98. presenceData.details = "Przegląda filmy i seriale dla dzieci...";
  99. presenceData.state = search
  100. ? `Strona ${search.split("=")[1]}`
  101. : "Strona 1";
  102. presenceData.smallImageKey = Assets.Search;
  103. break;
  104. case "/premium":
  105. presenceData.details = "Przegląda zakładkę premium...";
  106. presenceData.smallImageKey = Assets.Viewing;
  107. break;
  108. case "/ranking":
  109. presenceData.details = "Przegląda ranking...";
  110. presenceData.smallImageKey = Assets.Viewing;
  111. break;
  112. case pathname.startsWith("/film/") ? pathname : null:
  113. for (const info of document.querySelectorAll("div.info>ul")) {
  114. if (info.children[0].textContent === "Rok: ") {
  115. presenceData.details = `${
  116. document.querySelector("h2>span").textContent.split("/")[0]
  117. } (${info.children[1].textContent})`;
  118. }
  119. }
  120. presenceData.buttons = [{ label: "Oglądaj", url: href }];
  121. [presenceData.startTimestamp, presenceData.endTimestamp] =
  122. presence.getTimestamps(video.current, video.duration);
  123. presenceData.smallImageKey = Assets.Play;
  124. presenceData.smallImageText = "Ogląda";
  125. if (video.paused) {
  126. presenceData.smallImageKey = Assets.Pause;
  127. presenceData.smallImageText = "Wstrzymano";
  128. delete presenceData.startTimestamp;
  129. delete presenceData.endTimestamp;
  130. }
  131. break;
  132. case pathname.startsWith("/serial-online/") ? pathname : null: {
  133. if (document.querySelector("div.btn-group")) {
  134. presenceData.details = document
  135. .querySelectorAll("h2")[1]
  136. .textContent.split("/")[0];
  137. const seasonepisode = document
  138. .querySelector("h3")
  139. .textContent.split(" ")[0],
  140. regex = /\[s(\d+)e(\d+)\]/;
  141. presenceData.state = `Sezon: ${
  142. seasonepisode.match(regex)[1]
  143. } | Odcinek: ${seasonepisode.match(regex)[2]}`;
  144. presenceData.buttons = [
  145. { label: "Oglądaj", url: href },
  146. {
  147. label: "Cały serial",
  148. url: document
  149. .querySelector("div#single-poster>a")
  150. .getAttribute("href"),
  151. },
  152. ];
  153. [presenceData.startTimestamp, presenceData.endTimestamp] =
  154. presence.getTimestamps(video.current, video.duration);
  155. presenceData.smallImageKey = Assets.Play;
  156. presenceData.smallImageText = "Ogląda";
  157. if (video.paused) {
  158. presenceData.smallImageKey = Assets.Pause;
  159. presenceData.smallImageText = "Wstrzymano";
  160. delete presenceData.startTimestamp;
  161. delete presenceData.endTimestamp;
  162. }
  163. } else {
  164. const infos = document.querySelector("div.info>ul").children;
  165. presenceData.details = `${
  166. document.querySelectorAll("h2")[1].textContent.split("/")[0]
  167. } (${infos[infos.length - 1].textContent})`;
  168. presenceData.buttons = [{ label: "Zobacz serial", url: href }];
  169. }
  170. break;
  171. }
  172. default:
  173. presenceData.details = "Przegląda stronę główną...";
  174. presenceData.smallImageKey = Assets.Viewing;
  175. break;
  176. }
  177. if (!presenceData.details) presence.setActivity();
  178. else presence.setActivity(presenceData);
  179. });