presence.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. const presence = new Presence({
  2. clientId: "662841394171346955",
  3. }),
  4. strings = presence.getStrings({
  5. browsing: "general.browsing",
  6. paused: "general.paused",
  7. playing: "general.playing",
  8. }),
  9. browsingTimestamp = Math.floor(Date.now() / 1000);
  10. function capitalize(str: string): string {
  11. const text = str.toLowerCase().split(" ");
  12. for (let i = 0; i < text.length; i++)
  13. text[i] = text[i].charAt(0).toUpperCase() + text[i].substr(1);
  14. return text.join(" ");
  15. }
  16. presence.on("UpdateData", async () => {
  17. const presenceData: PresenceData = {
  18. largeImageKey:
  19. "https://cdn.rcd.gg/PreMiD/websites/W/Wakanim/assets/0.png",
  20. },
  21. video = document.querySelector<HTMLVideoElement>("video"),
  22. title = document.querySelector<HTMLSpanElement>(".episode_title"),
  23. subtitle = document.querySelector<HTMLSpanElement>(".episode_subtitle");
  24. if (
  25. document.location.pathname.includes("/v2/catalogue/episode/") &&
  26. video &&
  27. title
  28. ) {
  29. presenceData.details = title.textContent;
  30. if (await presence.getSetting("thumbnail")) {
  31. presenceData.largeImageKey =
  32. document.querySelector<HTMLMetaElement>(
  33. ".episode > .container > [itemprop=thumbnailUrl]"
  34. ).content ??
  35. "https://cdn.rcd.gg/PreMiD/websites/W/Wakanim/assets/0.png";
  36. }
  37. if (subtitle && subtitle.textContent)
  38. presenceData.state = capitalize(subtitle.textContent);
  39. if (video.paused) {
  40. presenceData.smallImageKey = Assets.Pause;
  41. presenceData.smallImageText = (await strings).paused;
  42. } else {
  43. presenceData.startTimestamp = Math.floor(Date.now() / 1000);
  44. [presenceData.startTimestamp, presenceData.endTimestamp] =
  45. presence.getTimestampsfromMedia(video);
  46. presenceData.smallImageKey = Assets.Play;
  47. presenceData.smallImageText = (await strings).playing;
  48. }
  49. } else {
  50. presenceData.details = (await strings).browsing;
  51. presenceData.startTimestamp = browsingTimestamp;
  52. }
  53. if (presenceData.details) presence.setActivity(presenceData);
  54. else presence.setActivity();
  55. });