presence.ts 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. const presence = new Presence({
  2. clientId: "1004813284253380628",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000);
  5. presence.on("UpdateData", () => {
  6. const presenceData: PresenceData = {
  7. largeImageKey:
  8. "https://cdn.rcd.gg/PreMiD/websites/M/Musixmatch/assets/0.png",
  9. startTimestamp: browsingTimestamp,
  10. },
  11. { pathname, hostname } = document.location;
  12. if (hostname === "musixmatch.com" || hostname === "www.musixmatch.com") {
  13. if (pathname === "/") presenceData.details = "Viewing the home page";
  14. else if (pathname.includes("/explore"))
  15. presenceData.details = "Exploring lyrics";
  16. else if (pathname.includes("/community"))
  17. presenceData.details = "Viewing the community page";
  18. else if (pathname.includes("/contribute"))
  19. presenceData.details = "Viewing the contribute page";
  20. else if (pathname.includes("/profile/")) {
  21. //if user status = curator show curator badge
  22. if (
  23. document.querySelector(
  24. "#site > div > div > div > main > .mxm-page > .mxm-user-header > .container > .row > div > div > div > span"
  25. )
  26. ) {
  27. presenceData.smallImageKey =
  28. "https://cdn.rcd.gg/PreMiD/websites/M/Musixmatch/assets/1.png";
  29. presenceData.smallImageText = "Curator";
  30. }
  31. if (pathname === "/profile/me")
  32. presenceData.details = "Viewing their profile";
  33. else {
  34. presenceData.details = `Viewing ${
  35. document.querySelector("#site h1").textContent
  36. }'s profile`;
  37. }
  38. } else if (pathname.includes("/search")) {
  39. presenceData.details = "Searching";
  40. presenceData.state = pathname.split("/")[2].replaceAll("%20", " ");
  41. } else if (
  42. pathname.includes("/lyrics") &&
  43. pathname.includes("/translation/")
  44. ) {
  45. presenceData.largeImageKey = document.querySelector<HTMLMetaElement>(
  46. '[property="og:image"]'
  47. ).content;
  48. presenceData.smallImageKey =
  49. "https://cdn.rcd.gg/PreMiD/websites/M/Musixmatch/assets/0.png";
  50. presenceData.details = `Reading ${pathname.split("/")[5]} translation`;
  51. presenceData.state = `${
  52. document.querySelector("#site h2 > span > a")?.textContent ||
  53. document.querySelector("#site h2 > span > span > a").textContent
  54. } - ${document.querySelector("#site h1").childNodes[1].textContent}`;
  55. } else if (pathname.includes("/lyrics")) {
  56. presenceData.largeImageKey = document.querySelector<HTMLMetaElement>(
  57. '[property="og:image"]'
  58. ).content;
  59. presenceData.smallImageKey =
  60. "https://cdn.rcd.gg/PreMiD/websites/M/Musixmatch/assets/0.png";
  61. presenceData.details = "Reading lyrics";
  62. presenceData.state = `${
  63. document.querySelector("#site h2 > span > a")?.textContent ||
  64. document.querySelector("#site h2 > span > span > a").textContent
  65. } - ${document.querySelector("#site h1").childNodes[1].textContent}`;
  66. } else if (pathname.includes("/artist")) {
  67. const avatar = document.querySelector<HTMLMetaElement>(
  68. '[property="og:image"]'
  69. ).content;
  70. if (!avatar.includes("avatar-placeholder.png")) {
  71. presenceData.largeImageKey = avatar;
  72. presenceData.smallImageKey =
  73. "https://cdn.rcd.gg/PreMiD/websites/M/Musixmatch/assets/0.png";
  74. }
  75. presenceData.details = "Browsing artist";
  76. presenceData.state = document.querySelector(
  77. "#site > #artist-page > #content h1"
  78. ).textContent;
  79. }
  80. } else if (hostname === "curators.musixmatch.com") {
  81. if (pathname === "/" || pathname === "/missions")
  82. presenceData.details = "Browsing curator's missions";
  83. else if (pathname.includes("/tasks/")) {
  84. presenceData.details = `Browsing ${
  85. document.querySelector(
  86. "#__next > div > div > div > div > div > div > div:nth-child(2) > div.css-1dbjc4n.r-1p0dtai.r-1d2f490.r-12vffkv.r-u8s1d.r-zchlnj.r-ipm5af > div.css-1dbjc4n.r-13awgt0.r-12vffkv > div > div > div > div > div > div.css-1dbjc4n.r-1mdbw0j.r-1guathk > div > div.css-1dbjc4n.r-obd0qt.r-18u37iz.r-1wtj0ep.r-1wzrnnt > div.css-901oao.r-jwli3a.r-1grxjyw.r-uho16t.r-146t82q.r-tskmnb.r-fdjqy7"
  87. ).textContent
  88. } tasks`;
  89. } else if (pathname.includes("/tool")) {
  90. presenceData.details = "Editing lyrics";
  91. presenceData.state = `${
  92. document.querySelector(
  93. "#__next > div > div > div > div > div > div > div > div.css-1dbjc4n.r-1p0dtai.r-1d2f490.r-12vffkv.r-u8s1d.r-zchlnj.r-ipm5af > div.css-1dbjc4n.r-13awgt0.r-12vffkv > div > div > div > div > div > div > div:nth-child(1) > div > div:nth-child(1) > div:nth-child(1) > div.css-1dbjc4n.r-13awgt0.r-1jkjb > div.css-901oao.css-bfa6kz.r-a023e6.r-rjixqe.r-fdjqy7"
  94. ).textContent
  95. } - ${
  96. document.querySelector(
  97. "#__next > div > div > div > div > div > div > div > div.css-1dbjc4n.r-1p0dtai.r-1d2f490.r-12vffkv.r-u8s1d.r-zchlnj.r-ipm5af > div.css-1dbjc4n.r-13awgt0.r-12vffkv > div > div > div > div > div > div > div:nth-child(1) > div > div:nth-child(1) > div:nth-child(1) > div.css-1dbjc4n.r-13awgt0.r-1jkjb > div.css-901oao.css-bfa6kz.r-jwli3a.r-1inkyih.r-1kfrs79.r-rjixqe.r-fdjqy7"
  98. ).textContent
  99. }`;
  100. }
  101. }
  102. presence.setActivity(presenceData);
  103. });