presence.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. /* Global variables */
  2. const presence = new Presence({
  3. clientId: "795235371029233684",
  4. });
  5. /* Main eventHandler */
  6. presence.on("UpdateData", async () => {
  7. const presenceData: PresenceData = {
  8. largeImageKey:
  9. "https://cdn.rcd.gg/PreMiD/websites/V/VRCArena/assets/logo.jpg",
  10. },
  11. privacymode = await presence.getSetting<boolean>("privacy");
  12. if (document.location.hostname === "www.vrcarena.com") {
  13. if (!privacymode) {
  14. presenceData.buttons = [
  15. {
  16. label: "View on VRCArena",
  17. url: document.URL.split("?")[0],
  18. },
  19. ];
  20. }
  21. // Categories
  22. if (document.location.pathname.includes("/category")) {
  23. switch (document.location.pathname) {
  24. case "/category/accessory":
  25. presenceData.details = "Browsing accessoires";
  26. presence.setActivity(presenceData);
  27. break;
  28. case "/category/animation":
  29. presenceData.details = "Browsing animations";
  30. presence.setActivity(presenceData);
  31. break;
  32. case "/category/avatar":
  33. presenceData.details = "Browsing avatars";
  34. presence.setActivity(presenceData);
  35. break;
  36. case "/category/tutorial":
  37. presenceData.details = "Browsing tutorials";
  38. presence.setActivity(presenceData);
  39. break;
  40. case "/category/world":
  41. presenceData.details = "Browsing worlds";
  42. presence.setActivity(presenceData);
  43. break;
  44. case "/category/tool":
  45. presenceData.details = "Browsing tools";
  46. presence.setActivity(presenceData);
  47. break;
  48. case "/category/alteration":
  49. presenceData.details = "Browsing alterations";
  50. presence.setActivity(presenceData);
  51. break;
  52. }
  53. // Asset pages
  54. } else if (document.location.pathname.includes("/assets")) {
  55. // User is viewing an asset.
  56. if (document.location.pathname.includes("/create"))
  57. presenceData.details = "Creating an asset";
  58. else if (privacymode === false) {
  59. presenceData.details = document.querySelector(
  60. "h1.MuiTypography-root > a"
  61. ).textContent;
  62. presenceData.state = document
  63. .querySelector("h1.MuiTypography-root")
  64. .parentNode.querySelector("div > div").textContent;
  65. } else presenceData.details = "Looking at an asset";
  66. presence.setActivity(presenceData);
  67. // User pages
  68. } else if (document.location.pathname.includes("/users")) {
  69. const thetitle = document.querySelector(
  70. "h1.MuiTypography-root"
  71. ).textContent;
  72. if (thetitle === "All Users") presenceData.details = "Browsing users";
  73. else if (privacymode === false) {
  74. presenceData.details = "Viewing user";
  75. presenceData.state = thetitle;
  76. } else presenceData.details = "Browsing users";
  77. presence.setActivity(presenceData);
  78. // Pages that aren't the focus of the website will be kept in the else statement.
  79. } else if (document.location.pathname.includes("/species")) {
  80. const thetitle = document.querySelector(
  81. "h1.MuiTypography-root"
  82. ).textContent;
  83. presenceData.details = "Browsing species";
  84. if (thetitle !== "All Species" && privacymode === false)
  85. presenceData.state = thetitle;
  86. presence.setActivity(presenceData);
  87. } else {
  88. switch (document.location.pathname) {
  89. case "/discord-servers":
  90. presenceData.details = "Browsing Discord servers";
  91. break;
  92. case "/news":
  93. presenceData.details = "Browsing news";
  94. break;
  95. case "/authors":
  96. presenceData.details = "Browsing authors";
  97. break;
  98. case "/about":
  99. presenceData.details = "Browsing about page";
  100. break;
  101. case "/requests":
  102. presenceData.details = "Browsing requests";
  103. break;
  104. case "/requests/create":
  105. presenceData.details = "Creating a request";
  106. break;
  107. case "/patreon":
  108. presenceData.details = "Browsing patrons";
  109. break;
  110. case "/streams":
  111. presenceData.details = "Browsing streams";
  112. break;
  113. case "/activity":
  114. presenceData.details = "Browsing activity";
  115. break;
  116. case "/my-account":
  117. presenceData.details = "Account settings";
  118. break;
  119. case "/nsfw":
  120. if (privacymode === false) presenceData.details = "Browsing NSFW";
  121. else presenceData.details = "Browsing VRCArena";
  122. break;
  123. default:
  124. presenceData.details = "Browsing VRCArena";
  125. break;
  126. }
  127. presence.setActivity(presenceData);
  128. }
  129. }
  130. });