presence.ts 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. const presence = new Presence({
  2. clientId: "697552926876368917",
  3. }),
  4. strings = presence.getStrings({
  5. play: "general.playing",
  6. pause: "general.paused",
  7. });
  8. let iFrameVideo: boolean,
  9. currentTime: number,
  10. duration: number,
  11. paused: boolean,
  12. video: {
  13. iframeVideo: {
  14. duration: number;
  15. iFrameVideo: boolean;
  16. currTime: number;
  17. dur: number;
  18. paused: boolean;
  19. };
  20. },
  21. playback: boolean,
  22. title: HTMLTextAreaElement,
  23. browsingTimestamp: number;
  24. presence.on(
  25. "iFrameData",
  26. (data: {
  27. iframeVideo: {
  28. duration: number;
  29. iFrameVideo: boolean;
  30. currTime: number;
  31. dur: number;
  32. paused: boolean;
  33. };
  34. }) => {
  35. video = data;
  36. playback = !!data.iframeVideo.duration;
  37. if (playback) {
  38. ({ iFrameVideo, paused } = data.iframeVideo);
  39. currentTime = data.iframeVideo.currTime;
  40. duration = data.iframeVideo.dur;
  41. }
  42. }
  43. );
  44. presence.on("UpdateData", async () => {
  45. const info = await presence.getSetting<boolean>("sSI"),
  46. elapsed = await presence.getSetting<boolean>("sTE"),
  47. videoTime = await presence.getSetting<boolean>("sVT");
  48. if (elapsed) {
  49. browsingTimestamp = Math.floor(Date.now() / 1000);
  50. presence.info("Elapsed is on");
  51. } else {
  52. browsingTimestamp = null;
  53. presence.info("Elapsed Off");
  54. }
  55. const presenceData: PresenceData = {
  56. largeImageKey:
  57. "https://cdn.rcd.gg/PreMiD/websites/V/VidCloud9/assets/logo.png",
  58. };
  59. if (videoTime) {
  60. presence.info("Video Time is On");
  61. if (playback) {
  62. // lastPlaybackState = playback;
  63. browsingTimestamp = Math.floor(Date.now() / 1000);
  64. }
  65. } else presence.info("Video time is off");
  66. if (info) {
  67. presence.info("Info is On.");
  68. switch (document.location.pathname) {
  69. case "/": {
  70. presenceData.startTimestamp = browsingTimestamp;
  71. presenceData.details = "Viewing home page";
  72. break;
  73. }
  74. case "/movies": {
  75. presenceData.startTimestamp = browsingTimestamp;
  76. presenceData.details = "Viewing the recently added movies";
  77. break;
  78. }
  79. case "/series": {
  80. presenceData.startTimestamp = browsingTimestamp;
  81. presenceData.details = "Viewing the recently added series";
  82. break;
  83. }
  84. case "/cinema-movies": {
  85. presenceData.startTimestamp = browsingTimestamp;
  86. presenceData.details = "Viewing the recently added cinema movies.";
  87. break;
  88. }
  89. case "/recommended-series": {
  90. presenceData.startTimestamp = browsingTimestamp;
  91. presenceData.details = "Viewing recommened series";
  92. //Used for the video files (Needs some work done here)
  93. break;
  94. }
  95. default:
  96. if (document.location.pathname.includes("/videos/")) {
  97. title = document.querySelector<HTMLTextAreaElement>(
  98. "#main_bg > div:nth-child(5) > div > div.video-info-left > h1"
  99. );
  100. if (title) {
  101. presenceData.state = title.textContent;
  102. if (iFrameVideo && !isNaN(duration) && title && video) {
  103. if (!paused) {
  104. presenceData.details = "Watching:";
  105. presenceData.smallImageKey = paused
  106. ? Assets.Pause
  107. : Assets.Play;
  108. if (videoTime) {
  109. presenceData.smallImageText = paused
  110. ? (await strings).pause
  111. : (await strings).play;
  112. [presenceData.startTimestamp, presenceData.endTimestamp] =
  113. presence.getTimestamps(
  114. Math.floor(currentTime),
  115. Math.floor(duration)
  116. );
  117. }
  118. } else if (paused) {
  119. delete presenceData.startTimestamp;
  120. delete presenceData.endTimestamp;
  121. presenceData.details = "Paused:";
  122. presenceData.smallImageKey = Assets.Pause;
  123. presenceData.smallImageText = (await strings).pause;
  124. }
  125. } else if (!iFrameVideo && isNaN(duration) && title) {
  126. presenceData.details = "Viewing:";
  127. presenceData.state = title.textContent;
  128. presenceData.startTimestamp = browsingTimestamp;
  129. } else {
  130. presenceData.details = "Error 03: Watching unknown show/movie.";
  131. presenceData.state = "Can't tell if playing or not.";
  132. presenceData.startTimestamp = browsingTimestamp;
  133. presenceData.smallImageKey = Assets.Search;
  134. presenceData.smallImageText = "Error 3";
  135. presence.error(
  136. "Can't tell what you are watching. Fix a variable or line of code."
  137. );
  138. }
  139. } else {
  140. //Can't get the basic site information
  141. presenceData.startTimestamp = browsingTimestamp;
  142. presenceData.details = "Error 02: Watching unknown show/movie.";
  143. presenceData.smallImageKey = Assets.Search;
  144. presence.error("Can't read page.");
  145. }
  146. } else if (
  147. document.querySelector(
  148. "#main_bg > div:nth-child(5) > div > div.section-header > h3"
  149. ).textContent === " Result search"
  150. ) {
  151. presence.info("Searching");
  152. presenceData.details = "Searching:";
  153. presenceData.state = document.location.href.replace(
  154. "https://vidcloud9.com/search.html?keyword=",
  155. ""
  156. );
  157. presenceData.smallImageKey = Assets.Search;
  158. presenceData.smallImageText = "Searching";
  159. } else {
  160. //If it can't get the page it will output an error
  161. presenceData.startTimestamp = browsingTimestamp;
  162. presenceData.details = "Error 01: Can't Read Page";
  163. presenceData.smallImageKey = Assets.Search;
  164. presence.error("Can't read page. Set up a conditional.");
  165. }
  166. }
  167. } else {
  168. presenceData.details = null;
  169. presence.info("Info is off.");
  170. }
  171. if (!presenceData.details) {
  172. //This will fire if you do not set presence details
  173. presence.setActivity();
  174. } else {
  175. //This will fire if you set presence details
  176. presence.setActivity(presenceData);
  177. }
  178. });