presence.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. const presence = new Presence({
  2. clientId: "1102272266278027296",
  3. });
  4. const enum Assets {
  5. FRAnimeLogo = "https://cdn.rcd.gg/PreMiD/websites/F/FRAnime/assets/logo.png",
  6. FRAnimeLogoBg = "https://cdn.rcd.gg/PreMiD/websites/F/FRAnime/assets/0.png",
  7. }
  8. const presenceStrings = {
  9. browsing: "Parcours le catalogue",
  10. branding: "Animes gratuit & sans pub",
  11. websiteName: "FRAnime.fr",
  12. onPage: "Sur la page",
  13. watchOn: "Regarder sur FRAnime.fr",
  14. },
  15. animeBrowsingTimestamp = Math.floor(Date.now() / 1000);
  16. presence.on("UpdateData", async () => {
  17. const presenceData: PresenceData = {},
  18. { href, pathname } = document.location,
  19. params = new URLSearchParams(new URL(href).search.slice(1)),
  20. scriptElement = document.querySelector<HTMLScriptElement>(
  21. 'script[type="application/ld+json"]'
  22. ),
  23. jsonLD = scriptElement ? JSON.parse(scriptElement.textContent || "") : null;
  24. // Home page
  25. if (pathname === "/") {
  26. presenceData.details = presenceStrings.browsing;
  27. presenceData.state = presenceStrings.branding;
  28. presenceData.smallImageText = presenceStrings.websiteName;
  29. presenceData.largeImageKey = Assets.FRAnimeLogoBg;
  30. presenceData.smallImageKey = Assets.Search;
  31. presenceData.startTimestamp = animeBrowsingTimestamp;
  32. // Anime page
  33. } else if (params.get("ep") === "") {
  34. presenceData.details = `${presenceStrings.onPage} ${jsonLD.name}`;
  35. presenceData.state = presenceStrings.branding;
  36. presenceData.smallImageText = presenceStrings.websiteName;
  37. presenceData.largeImageKey = jsonLD.thumbnailUrl;
  38. presenceData.smallImageKey = Assets.Search;
  39. presenceData.startTimestamp = animeBrowsingTimestamp;
  40. presenceData.buttons = [
  41. {
  42. label: presenceStrings.watchOn,
  43. url: href,
  44. },
  45. ];
  46. // Watching page
  47. } else if (document.querySelector("#play_button")) {
  48. presenceData.details = `${jsonLD.name} - S${params.getAll(
  49. "s"
  50. )}, EP${params.getAll("ep")}`;
  51. presenceData.state = presenceStrings.branding;
  52. presenceData.smallImageText = presenceStrings.websiteName;
  53. presenceData.smallImageKey = Assets.Pause;
  54. presenceData.largeImageKey = jsonLD.thumbnailUrl;
  55. presenceData.buttons = [
  56. {
  57. label: presenceStrings.watchOn,
  58. url: href,
  59. },
  60. ];
  61. // The anime is loading, so we delete the timestamp
  62. delete presenceData.startTimestamp;
  63. delete presenceData.endTimestamp;
  64. // player is loaded
  65. } else if (document.querySelectorAll("video")) {
  66. const video = document.querySelector("video");
  67. presenceData.details = `${jsonLD.name} - S${params.getAll(
  68. "s"
  69. )}, EP${params.getAll("ep")}`;
  70. presenceData.state = presenceStrings.branding;
  71. presenceData.smallImageText = presenceStrings.websiteName;
  72. [presenceData.startTimestamp, presenceData.endTimestamp] =
  73. presence.getTimestampsfromMedia(video);
  74. presenceData.largeImageKey = jsonLD.thumbnailUrl;
  75. presenceData.buttons = [
  76. {
  77. label: presenceStrings.watchOn,
  78. url: href,
  79. },
  80. ];
  81. if (!video.paused) presenceData.smallImageKey = Assets.Play;
  82. else {
  83. presenceData.smallImageKey = Assets.Pause;
  84. delete presenceData.startTimestamp;
  85. delete presenceData.endTimestamp;
  86. }
  87. }
  88. presence.setActivity(presenceData);
  89. });