presence.ts 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. const presence = new Presence({
  2. clientId: "643593006821408778",
  3. }),
  4. strings = presence.getStrings({
  5. play: "general.playing",
  6. pause: "general.paused",
  7. }),
  8. pages: { [k: string]: string } = {
  9. "/": "Ana Sayfa",
  10. "/vip": "Ana Sayfa",
  11. "/kesfet": "Keşfet",
  12. "/kesfet/eyJjb250ZW50IjoiMSJ9": "Keşfet (Film)",
  13. "/trend": "Trendler",
  14. "/takvim": "Dizi Takvimi",
  15. "/dizi-izle": "TV Dizileri",
  16. "/forum": "Forum",
  17. "/koleksiyon": "Koleksiyon",
  18. "/birlikte-izle": "Birlikte İzle",
  19. "/profil/ayarlar": "Hesap Ayarları",
  20. };
  21. let video: {
  22. dataAvailable?: boolean;
  23. currentTime?: number;
  24. duration?: number;
  25. paused?: boolean;
  26. } = {};
  27. presence.on(
  28. "iFrameData",
  29. (data: {
  30. error?: boolean;
  31. currentTime: number;
  32. duration: number;
  33. paused: boolean;
  34. }) => {
  35. if (!data.error) video = { ...data, dataAvailable: true };
  36. }
  37. );
  38. presence.on("UpdateData", async () => {
  39. const page = document.location.pathname,
  40. _video = document.querySelector("video") as HTMLVideoElement,
  41. isVideoData = Object.keys(video).length > 0 ? true : false,
  42. categoryTitle = document.querySelector(
  43. "#router-view > div.ui.grid.mb-0 > div.left.floated.sixteen.wide.tablet.twelve.wide.computer.column.pb-0 > h1"
  44. ),
  45. categoryTitle2 = document.querySelector(
  46. "#router-view > div.ui.grid.mb-0 > div.left.floated.sixteen.wide.tablet.ten.wide.computer.column.pb-0 > h1"
  47. ),
  48. showName = document.querySelector(
  49. "#router-view > div.bg-cover-faker > div.ui.grid > div.left.floated.sixteen.wide.tablet.nine.wide.computer.column > a > h1"
  50. ),
  51. movieTitle = document.querySelector(
  52. "#router-view > div.bg-cover-faker > div:nth-child(3) > div.left.floated.sixteen.wide.tablet.eight.wide.computer.column > a > h1"
  53. ),
  54. userName = document.querySelector(
  55. "#router-view > section > div.ui.grid > div.left.floated.sixteen.wide.tablet.four.wide.computer.column > div > section:nth-child(1) > h2 > a"
  56. );
  57. if (!isVideoData && !_video) {
  58. if (page.includes("/kesfet")) {
  59. presence.setActivity({
  60. largeImageKey:
  61. "https://cdn.rcd.gg/PreMiD/websites/Y/yabanc%C4%B1dizi/assets/logo.png",
  62. details: "Bir sayfaya göz atıyor:",
  63. state: "Keşfet",
  64. startTimestamp: Math.floor(Date.now() / 1000),
  65. });
  66. } else if (page.includes("/oyuncu/")) {
  67. const actorName = document.querySelector(
  68. "#router-view > div > div.profile-header > div.heading-user-title > h1"
  69. );
  70. presence.setActivity({
  71. largeImageKey:
  72. "https://cdn.rcd.gg/PreMiD/websites/Y/yabanc%C4%B1dizi/assets/logo.png",
  73. details: "Bir aktöre göz atıyor:",
  74. state: actorName ? actorName.textContent.trim() : "Belirsiz",
  75. startTimestamp: Math.floor(Date.now() / 1000),
  76. });
  77. } else if (
  78. page.includes("/film/tur/") &&
  79. categoryTitle &&
  80. categoryTitle.textContent !== ""
  81. ) {
  82. presence.setActivity({
  83. largeImageKey:
  84. "https://cdn.rcd.gg/PreMiD/websites/Y/yabanc%C4%B1dizi/assets/logo.png",
  85. details: "Bir kategoriye göz atıyor:",
  86. state: categoryTitle.textContent,
  87. startTimestamp: Math.floor(Date.now() / 1000),
  88. });
  89. } else if (
  90. page.includes("/dizi/tur") &&
  91. categoryTitle &&
  92. categoryTitle.textContent !== ""
  93. ) {
  94. presence.setActivity({
  95. largeImageKey:
  96. "https://cdn.rcd.gg/PreMiD/websites/Y/yabanc%C4%B1dizi/assets/logo.png",
  97. details: "Bir kategoriye göz atıyor:",
  98. state: categoryTitle.textContent,
  99. startTimestamp: Math.floor(Date.now() / 1000),
  100. });
  101. } else if (
  102. page.includes("/film-izle") &&
  103. categoryTitle2 &&
  104. categoryTitle2.textContent !== ""
  105. ) {
  106. presence.setActivity({
  107. largeImageKey:
  108. "https://cdn.rcd.gg/PreMiD/websites/Y/yabanc%C4%B1dizi/assets/logo.png",
  109. details: "Bir kategoriye göz atıyor:",
  110. state: categoryTitle2.textContent,
  111. startTimestamp: Math.floor(Date.now() / 1000),
  112. });
  113. } else if (
  114. page.includes("/dizi/") &&
  115. showName &&
  116. showName.textContent !== ""
  117. ) {
  118. presence.setActivity({
  119. largeImageKey:
  120. "https://cdn.rcd.gg/PreMiD/websites/Y/yabanc%C4%B1dizi/assets/logo.png",
  121. details: "Bir diziye göz atıyor:",
  122. state: showName.textContent,
  123. startTimestamp: Math.floor(Date.now() / 1000),
  124. });
  125. } else if (
  126. page.includes("/profil/") &&
  127. userName &&
  128. userName.textContent !== ""
  129. ) {
  130. presence.setActivity({
  131. largeImageKey:
  132. "https://cdn.rcd.gg/PreMiD/websites/Y/yabanc%C4%B1dizi/assets/logo.png",
  133. details: "Bir profile göz atıyor:",
  134. state: userName.textContent,
  135. startTimestamp: Math.floor(Date.now() / 1000),
  136. });
  137. } else if (pages[page] || pages[page.slice(0, -1)]) {
  138. presence.setActivity({
  139. largeImageKey:
  140. "https://cdn.rcd.gg/PreMiD/websites/Y/yabanc%C4%B1dizi/assets/logo.png",
  141. details: "Bir sayfaya göz atıyor:",
  142. state: pages[page] || pages[page.slice(0, -1)],
  143. startTimestamp: Math.floor(Date.now() / 1000),
  144. });
  145. }
  146. } else if (_video && !isNaN(_video.currentTime)) {
  147. const title = document.querySelector(
  148. "#router-view > div.bg-cover-faker > div.ui.grid.mt-0 > div > h1 > a"
  149. ),
  150. episode = document.querySelector(
  151. "#router-view > div.bg-cover-faker > div.ui.grid.mt-0 > div > h1 > span"
  152. );
  153. if (page.includes("/film") && movieTitle && movieTitle.textContent !== "") {
  154. const [startTimestamp, endTimestamp] = presence.getTimestamps(
  155. Math.floor(_video.currentTime),
  156. Math.floor(_video.duration)
  157. ),
  158. presenceData: PresenceData = {
  159. largeImageKey:
  160. "https://cdn.rcd.gg/PreMiD/websites/Y/yabanc%C4%B1dizi/assets/logo.png",
  161. details: "Bir film izliyor:",
  162. state: movieTitle.textContent,
  163. smallImageKey: _video.paused ? Assets.Pause : Assets.Play,
  164. smallImageText: _video.paused
  165. ? (await strings).pause
  166. : (await strings).play,
  167. };
  168. if (!isNaN(startTimestamp) && !isNaN(endTimestamp)) {
  169. [presenceData.startTimestamp, presenceData.endTimestamp] = [
  170. startTimestamp,
  171. endTimestamp,
  172. ];
  173. }
  174. if (video.paused) {
  175. delete presenceData.startTimestamp;
  176. delete presenceData.endTimestamp;
  177. }
  178. presence.setActivity(presenceData);
  179. } else if (
  180. page.includes("/dizi/") &&
  181. title &&
  182. episode &&
  183. title.textContent !== "" &&
  184. episode.textContent !== ""
  185. ) {
  186. const [startTimestamp, endTimestamp] = presence.getTimestamps(
  187. Math.floor(video.currentTime),
  188. Math.floor(video.duration)
  189. ),
  190. presenceData: PresenceData = {
  191. largeImageKey:
  192. "https://cdn.rcd.gg/PreMiD/websites/Y/yabanc%C4%B1dizi/assets/logo.png",
  193. details: "Bir film izliyor:",
  194. state: title.textContent,
  195. smallImageKey: video.paused ? Assets.Pause : Assets.Play,
  196. smallImageText: video.paused
  197. ? (await strings).pause
  198. : (await strings).play,
  199. };
  200. [presenceData.startTimestamp, presenceData.endTimestamp] = [
  201. startTimestamp,
  202. endTimestamp,
  203. ];
  204. if (video.paused) {
  205. delete presenceData.startTimestamp;
  206. delete presenceData.endTimestamp;
  207. }
  208. presence.setActivity(presenceData);
  209. }
  210. } else if (isVideoData && video && !isNaN(video.duration)) {
  211. const showName2 = document.querySelector(
  212. "#router-view > div.bg-cover-faker > div.ui.grid.mt-0 > div > h1 > a"
  213. ),
  214. episode = document.querySelector(
  215. "#router-view > div.bg-cover-faker > div.ui.grid.mt-0 > div > h1 > span"
  216. );
  217. if (
  218. page.includes("/film/") &&
  219. movieTitle &&
  220. movieTitle.textContent !== ""
  221. ) {
  222. const [startTimestamp, endTimestamp] = presence.getTimestamps(
  223. Math.floor(video.currentTime),
  224. Math.floor(video.duration)
  225. ),
  226. presenceData: PresenceData = {
  227. largeImageKey:
  228. "https://cdn.rcd.gg/PreMiD/websites/Y/yabanc%C4%B1dizi/assets/logo.png",
  229. details: "Bir film izliyor:",
  230. state: movieTitle.textContent,
  231. smallImageKey: video.paused ? Assets.Pause : Assets.Play,
  232. smallImageText: video.paused
  233. ? (await strings).pause
  234. : (await strings).play,
  235. };
  236. if (!isNaN(startTimestamp) && !isNaN(endTimestamp)) {
  237. [presenceData.startTimestamp, presenceData.endTimestamp] = [
  238. startTimestamp,
  239. endTimestamp,
  240. ];
  241. }
  242. if (video.paused) {
  243. delete presenceData.startTimestamp;
  244. delete presenceData.endTimestamp;
  245. }
  246. presence.setActivity(presenceData);
  247. } else if (
  248. page.includes("/dizi/") &&
  249. showName2 &&
  250. showName2.textContent !== "" &&
  251. episode &&
  252. episode.textContent !== ""
  253. ) {
  254. const [startTimestamp, endTimestamp] = presence.getTimestamps(
  255. Math.floor(video.currentTime),
  256. Math.floor(video.duration)
  257. ),
  258. presenceData: PresenceData = {
  259. largeImageKey:
  260. "https://cdn.rcd.gg/PreMiD/websites/Y/yabanc%C4%B1dizi/assets/logo.png",
  261. details: showName2.textContent,
  262. state: episode.textContent,
  263. smallImageKey: video.paused ? Assets.Pause : Assets.Play,
  264. smallImageText: video.paused
  265. ? (await strings).pause
  266. : (await strings).play,
  267. };
  268. if (!isNaN(startTimestamp) && !isNaN(endTimestamp)) {
  269. [presenceData.startTimestamp, presenceData.endTimestamp] = [
  270. startTimestamp,
  271. endTimestamp,
  272. ];
  273. }
  274. if (video.paused) {
  275. delete presenceData.startTimestamp;
  276. delete presenceData.endTimestamp;
  277. }
  278. presence.setActivity(presenceData);
  279. }
  280. } else {
  281. presence.setActivity({
  282. largeImageKey:
  283. "https://cdn.rcd.gg/PreMiD/websites/Y/yabanc%C4%B1dizi/assets/logo.png",
  284. details: "Bir sayfaya göz atıyor:",
  285. state: "Bilinmeyen Sayfa",
  286. startTimestamp: Math.floor(Date.now() / 1000),
  287. });
  288. }
  289. });