presence.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. const presence = new Presence({
  2. clientId: "1107321415243415574",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000);
  5. const enum Assets {
  6. Logo = "https://cdn.rcd.gg/PreMiD/websites/M/Mastodon/assets/logo.png",
  7. FediverseLogo = "https://cdn.rcd.gg/PreMiD/websites/M/Mastodon/assets/0.png",
  8. }
  9. // checks if user is logged from textarea
  10. function checkPositionAccountAvatar() {
  11. if (document.querySelectorAll(".autosuggest-textarea__textarea").length < 1)
  12. return 1;
  13. return 2;
  14. }
  15. presence.on("UpdateData", async () => {
  16. const presenceData: PresenceData = {
  17. largeImageKey: Assets.Logo,
  18. },
  19. [time, privacy] = await Promise.all([
  20. presence.getSetting<boolean>("time"),
  21. presence.getSetting<boolean>("privacy"),
  22. ]),
  23. { pathname, hostname } = document.location;
  24. if (time) presenceData.startTimestamp = browsingTimestamp;
  25. switch (pathname) {
  26. case "/home": {
  27. presenceData.details = "On the homepage";
  28. break;
  29. }
  30. case "/notifications": {
  31. presenceData.details = "Checking notifications";
  32. break;
  33. }
  34. case "/public/local": {
  35. presenceData.details = "Looking in local timeline";
  36. break;
  37. }
  38. case "/public": {
  39. presenceData.largeImageKey = Assets.FediverseLogo;
  40. presenceData.details = "Looking in fediverse";
  41. break;
  42. }
  43. case "/bookmarks":
  44. case "/favourites":
  45. case "/lists": {
  46. presenceData.details = `Looking at their ${pathname.split("/")[1]}`;
  47. break;
  48. }
  49. case "/search": {
  50. presenceData.details = !privacy
  51. ? `Searching ${document
  52. .querySelector(".search__input")
  53. .getAttribute("value")}`
  54. : "Searching up something";
  55. break;
  56. }
  57. case "/relationships": {
  58. presenceData.details = "Viewing their followers";
  59. break;
  60. }
  61. case "/about": {
  62. presenceData.smallImageKey = document
  63. .querySelectorAll(".account__avatar")
  64. [checkPositionAccountAvatar()].querySelector("img")
  65. .getAttribute("src");
  66. presenceData.largeImageKey = document
  67. .querySelector(".about__header__hero img")
  68. .getAttribute("src");
  69. presenceData.smallImageText = `About ${hostname}`;
  70. presenceData.details = `About ${hostname}`;
  71. break;
  72. }
  73. case "/directory": {
  74. presenceData.details = "On the directory";
  75. break;
  76. }
  77. case "/privacy-policy": {
  78. presenceData.details = "Reading Privacy and Policy";
  79. break;
  80. }
  81. case "/follow_requests": {
  82. presenceData.details = "Looking at their follow requests";
  83. break;
  84. }
  85. }
  86. if (pathname.startsWith("/explore")) {
  87. presenceData.smallImageKey = Assets.Search;
  88. presenceData.smallImageText = "Explore";
  89. presenceData.details = "On the explore";
  90. } else if (pathname.startsWith("/@")) {
  91. if (!privacy) {
  92. presenceData.smallImageKey = document
  93. .querySelectorAll(".account__avatar")
  94. [checkPositionAccountAvatar()].querySelector("img")
  95. .getAttribute("src");
  96. presenceData.smallImageText = `${document.location}`;
  97. }
  98. presenceData.details = `Viewing ${
  99. !privacy ? `${pathname.split(/[@,/]+/)[1]}'s` : "a"
  100. } profile`;
  101. } else if (pathname.startsWith("/settings"))
  102. presenceData.details = "Viewing their settings";
  103. else if (pathname.startsWith("/tags")) {
  104. presenceData.details = !privacy
  105. ? `Searching ${pathname.split("/")[2]} tag`
  106. : "Searching for: tags";
  107. }
  108. presence.setActivity(presenceData);
  109. });