presence.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. const presence = new Presence({
  2. clientId: "1021848171946704906",
  3. });
  4. presence.on("UpdateData", async () => {
  5. const presenceData: PresenceData = {
  6. largeImageKey:
  7. "https://cdn.rcd.gg/PreMiD/websites/F/Flat/assets/logo.png",
  8. },
  9. { pathname } = location;
  10. if (pathname === "/") presenceData.details = "Viewing the homepage";
  11. if (pathname === "/my-library")
  12. presenceData.details = "Viewing their library";
  13. if (pathname.startsWith("/collection/")) {
  14. presenceData.details = "Viewing a collection";
  15. presenceData.state =
  16. document.querySelector(".collection-title")?.textContent;
  17. }
  18. if (pathname === "/shared-with-me")
  19. presenceData.details = "Viewing shared scores";
  20. if (pathname === "/trash")
  21. presenceData.details = "Viewing recently deleted scores";
  22. if (pathname.startsWith("/help/")) {
  23. if (pathname.includes("/support"))
  24. presenceData.details = "Contacting support";
  25. else {
  26. const title = document.querySelector(".page-title > h1")?.textContent;
  27. presenceData.details = "Viewing help";
  28. if (title)
  29. presenceData.state = title.replace(/^((Flat|Platform) -|Help:) /, "");
  30. if (presenceData.state === "Online Music Notation Software")
  31. presenceData.state = "About Flat";
  32. }
  33. }
  34. if (pathname.startsWith("/settings"))
  35. presenceData.details = "Viewing settings";
  36. if (pathname.startsWith("/updates")) presenceData.details = "Viewing updates";
  37. if (pathname === "/settings/upgrade")
  38. presenceData.details = "Viewing upgrade options";
  39. if (pathname.startsWith("/community")) {
  40. if (pathname.match(/^\/community\/popular(\/.+)?\/?$/)) {
  41. presenceData.details = "Viewing community scores";
  42. presenceData.state = `Since: ${
  43. document.querySelector('[data-cy="community-date-filter-btn"]')
  44. ?.textContent
  45. }`;
  46. }
  47. if (pathname.includes("/challenges/"))
  48. presenceData.details = "Viewing a challenge";
  49. }
  50. if (pathname.startsWith("/score/")) {
  51. if (pathname.includes("/edit")) {
  52. presenceData.details = "Editing a score";
  53. presenceData.state = document.querySelector(".title")?.textContent;
  54. } else {
  55. presenceData.details = "Viewing a score";
  56. presenceData.state =
  57. document.querySelector(".sv-title > h1")?.textContent;
  58. presenceData.smallImageKey =
  59. document.querySelector<HTMLImageElement>(".user-pp img").src;
  60. presenceData.smallImageText = document.querySelector(".by")?.textContent;
  61. if (document.querySelector(".sc-pause"))
  62. presenceData.details = "Listening to a score";
  63. }
  64. }
  65. if (pathname.startsWith("/@")) {
  66. const name = document.querySelector(
  67. '[data-cy="printable-name"]'
  68. )?.textContent;
  69. presenceData.details = "Viewing a user";
  70. presenceData.state = name
  71. ? `${name} (@${pathname.split("/")[1].slice(1)})`
  72. : "Unknown user";
  73. presenceData.smallImageKey = document.querySelector<HTMLImageElement>(
  74. '[data-cy="user-info"] img'
  75. )?.src;
  76. presenceData.smallImageText = name;
  77. if (pathname.includes("/likes"))
  78. presenceData.details = "Viewing a user's liked scores";
  79. }
  80. if (presenceData.details) presence.setActivity(presenceData);
  81. else presence.setActivity();
  82. });