presence.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. const presence = new Presence({
  2. clientId: "717505812964048986",
  3. }),
  4. elapsed = Math.floor(Date.now() / 1000);
  5. // eslint-disable-next-line @typescript-eslint/no-unused-vars
  6. interface String {
  7. capitalize(): string;
  8. }
  9. String.prototype.capitalize = function (d = /[ -]/): string {
  10. let r = "";
  11. const a = this.toString().split(d);
  12. for (let i = 0; i < a.length; i++) {
  13. if (i === 0) r = a[i].charAt(0).toUpperCase() + a[i].slice(1);
  14. else {
  15. r =
  16. r +
  17. this.toString().substring(
  18. a.slice(0, i).join().length,
  19. a.slice(0, i).join().length + 1
  20. ) +
  21. a[i].charAt(0).toUpperCase() +
  22. a[i].slice(1);
  23. }
  24. }
  25. return r;
  26. };
  27. presence.on("UpdateData", async () => {
  28. const presenceData: PresenceData = {
  29. largeImageKey:
  30. "https://cdn.rcd.gg/PreMiD/websites/N/Nookazon/assets/logo.png",
  31. startTimestamp: elapsed,
  32. },
  33. useChatNames = await presence.getSetting<boolean>("useChatNames");
  34. let department: string,
  35. category: string,
  36. tag: string,
  37. diy: boolean,
  38. filter: string;
  39. switch (document.location.pathname.replace("/", "").split("/")[0]) {
  40. case "":
  41. presenceData.details = "Homepage";
  42. break;
  43. case "latest":
  44. presenceData.details = "Latest Listings";
  45. break;
  46. case "guide":
  47. presenceData.details = "Getting Started Guide";
  48. break;
  49. case "faq":
  50. presenceData.details = "Frequently Asked Questions";
  51. break;
  52. case "trading-guide":
  53. presenceData.details = "Safe Trading Guide";
  54. break;
  55. case "signup":
  56. presenceData.details = "Signing Up";
  57. break;
  58. case "login":
  59. presenceData.details = "Logging In";
  60. break;
  61. case "submit-feedback":
  62. presenceData.details = "Feedback Submission Guide";
  63. break;
  64. case "report-users":
  65. presenceData.details = "User Reporting Guide";
  66. break;
  67. case "products":
  68. try {
  69. department = document.querySelector(
  70. ".nav-bottom .selected"
  71. ).textContent;
  72. } catch {
  73. department = "All Products";
  74. }
  75. try {
  76. category = document
  77. .querySelector(".items-category-active")
  78. .textContent.capitalize();
  79. } catch {
  80. category = "";
  81. }
  82. try {
  83. tag = new URLSearchParams(document.location.search)
  84. .get("tag")
  85. .capitalize();
  86. } catch {
  87. tag = "";
  88. }
  89. try {
  90. diy =
  91. document.querySelector<HTMLInputElement>(
  92. ".search-diy-filter"
  93. ).checked;
  94. } catch {
  95. diy = false;
  96. }
  97. filter = "None";
  98. if (category !== "") filter = category;
  99. if (tag !== "") {
  100. if (filter === "None") filter = tag;
  101. else filter = `${filter}, ${tag}`;
  102. }
  103. if (diy) {
  104. if (filter === "None") filter = "DIY";
  105. else filter = `${filter}, ` + "DIY";
  106. }
  107. presenceData.details = `Looking For ${department}`;
  108. presenceData.state = `Filters: ${filter}`;
  109. break;
  110. case "profile":
  111. presenceData.details = `${
  112. document.querySelector(".profile-name").textContent
  113. }'s Profile`;
  114. try {
  115. presenceData.state = `Viewing ${
  116. document.querySelector("a.profile-tab-active").textContent
  117. }`;
  118. } catch {
  119. presence.error(
  120. "No active profile tab - State parameter will not be reported to PreMiD."
  121. );
  122. }
  123. break;
  124. case "chat":
  125. presenceData.details = "Viewing Chats";
  126. if (document.querySelector(".chat-info")) {
  127. if (useChatNames) {
  128. presenceData.state = `Chatting With ${document
  129. .querySelector(".chat-info")
  130. .textContent.replace("Report User", "")}`;
  131. } else presenceData.state = "Chatting With A User";
  132. } else presenceData.state = "No Chats";
  133. break;
  134. case "cart":
  135. presenceData.details = "Viewing Cart";
  136. presenceData.state = `${
  137. document.querySelector(".profile-tab-active").textContent
  138. } Offers`;
  139. break;
  140. case "product":
  141. presenceData.details = "Viewing A Product";
  142. presenceData.state = document
  143. .querySelector(".product-name")
  144. .textContent.capitalize();
  145. }
  146. presence.setActivity(presenceData);
  147. });