presence.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. const presence = new Presence({
  2. clientId: "844107169205190686",
  3. }),
  4. elapsed = Math.floor(Date.now() / 1000);
  5. async function getStrings() {
  6. return presence.getStrings(
  7. {
  8. browse: "general.browsing",
  9. live: "general.live",
  10. },
  11. await presence.getSetting<string>("lang").catch(() => "en")
  12. );
  13. }
  14. let strings: Awaited<ReturnType<typeof getStrings>>,
  15. oldLang: string = null;
  16. presence.on("UpdateData", async () => {
  17. const presenceData: PresenceData = {
  18. largeImageKey:
  19. "https://cdn.rcd.gg/PreMiD/websites/Q/Q-dance/assets/logo.png",
  20. },
  21. [newLang, privacy, buttons, covers] = await Promise.all([
  22. presence.getSetting<string>("lang").catch(() => "en"),
  23. presence.getSetting<boolean>("privacy"),
  24. presence.getSetting<boolean>("buttons"),
  25. presence.getSetting<boolean>("covers"),
  26. ]),
  27. { href } = document.location;
  28. if (oldLang !== newLang || !strings) {
  29. oldLang = newLang;
  30. strings = await getStrings();
  31. }
  32. if (privacy) presenceData.details = "Browsing";
  33. else if (!document.querySelector("svg.audioplayer-controls__icon--play")) {
  34. presenceData.details = document.querySelector(
  35. ".audioplayer-nowplaying__track"
  36. ).textContent;
  37. presenceData.state = document.querySelector(
  38. ".audioplayer-nowplaying__artist"
  39. ).textContent;
  40. presenceData.smallImageKey = Assets.Live;
  41. presenceData.smallImageText = strings.live;
  42. presenceData.largeImageKey =
  43. document.querySelector<HTMLImageElement>(
  44. "div.audioplayer-nowplaying__image > img"
  45. )?.src ?? "https://cdn.rcd.gg/PreMiD/websites/Q/Q-dance/assets/logo.png";
  46. presenceData.startTimestamp = elapsed;
  47. presenceData.buttons = [
  48. {
  49. label: "Tune In Live",
  50. url: href,
  51. },
  52. ];
  53. } else {
  54. presenceData.buttons = [
  55. {
  56. label: "Browse",
  57. url: href,
  58. },
  59. ];
  60. presenceData.details = `${strings.browse} ${
  61. document.querySelector(
  62. '[class="nav-item__link router-link-exact-active router-link-active active"]'
  63. )?.textContent ?? ""
  64. }`;
  65. }
  66. if (!buttons) delete presenceData.buttons;
  67. if (!covers) {
  68. presenceData.largeImageKey =
  69. "https://cdn.rcd.gg/PreMiD/websites/Q/Q-dance/assets/logo.png";
  70. }
  71. if (presenceData.details) presence.setActivity(presenceData);
  72. else presence.setActivity();
  73. });