presence.ts 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. const presence = new Presence({
  2. clientId: "937439130613350480",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000),
  5. pathNameLocalize = [
  6. {
  7. hostname: "universal", //English, India, Philipine
  8. subject: "/subject",
  9. question: "/question",
  10. },
  11. {
  12. hostname: "brainly.co.id", //Indonesia
  13. subject: "/mapel",
  14. question: "/tugas",
  15. },
  16. {
  17. hostname: "brainly.ro", //Romania
  18. subject: "/materie",
  19. question: "/tema",
  20. },
  21. ];
  22. let pathName: { hostname: string; subject: string; question: string };
  23. function setPathName() {
  24. if (
  25. document.location.hostname === "brainly.co.id" ||
  26. document.location.hostname === "brainly.ro"
  27. ) {
  28. for (const [index, item] of pathNameLocalize.entries()) {
  29. if (document.location.hostname === item.hostname)
  30. pathName = pathNameLocalize[index];
  31. }
  32. } else pathName = pathNameLocalize[0];
  33. }
  34. presence.on("UpdateData", async () => {
  35. const presenceData: PresenceData = {
  36. details: "Viewing an unsupported page",
  37. largeImageKey:
  38. "https://cdn.rcd.gg/PreMiD/websites/B/Brainly/assets/logo.png",
  39. startTimestamp: browsingTimestamp,
  40. },
  41. page = document.location.pathname,
  42. [time, buttons] = await Promise.all([
  43. presence.getSetting<boolean>("time"),
  44. presence.getSetting<boolean>("buttons"),
  45. ]);
  46. setPathName();
  47. if (page === "/") presenceData.details = "Viewing home page";
  48. else if (page.includes("/all-questions"))
  49. presenceData.details = "Viewing all questions";
  50. else if (page.includes(pathName.subject)) {
  51. presenceData.details = "Viewing subject:";
  52. presenceData.state = (
  53. page.replace(`${pathName.subject}/`, "").charAt(0).toUpperCase() +
  54. page.replace(`${pathName.subject}/`, "").slice(1)
  55. )
  56. .split("_")
  57. .join(" ");
  58. } else if (page.includes(pathName.question)) {
  59. presenceData.details = "Reading question:";
  60. presenceData.smallImageKey = Assets.Reading;
  61. presenceData.state = document.title.replace(
  62. `- ${
  63. pathName.hostname.charAt(0).toUpperCase() + pathName.hostname.slice(1)
  64. }`,
  65. ""
  66. );
  67. presenceData.buttons = [
  68. {
  69. label: "View Question",
  70. url: document.URL,
  71. },
  72. ];
  73. if (
  74. document.querySelector("div[role=textbox]") &&
  75. document.querySelector("div[role=textbox]").innerHTML !== ""
  76. ) {
  77. presenceData.details = "Answering question:";
  78. presenceData.smallImageKey = Assets.Writing;
  79. presenceData.state =
  80. document.querySelector<HTMLDivElement>("div[role=textbox]").textContent;
  81. }
  82. } else if (page.includes("/app/ask")) {
  83. presenceData.details = "Searching for a question:";
  84. presenceData.smallImageKey = Assets.Search;
  85. presenceData.state =
  86. document.querySelector<HTMLInputElement>("input[type=search]").value;
  87. } else if (page.includes("/question/add")) {
  88. presenceData.smallImageKey = Assets.Writing;
  89. presenceData.details = "Writing a question:";
  90. presenceData.state = document.querySelector<HTMLTextAreaElement>(
  91. "textarea[name=task_content]"
  92. ).value;
  93. } else if (page.includes("/app/profile")) {
  94. presenceData.details = "Viewing profile:";
  95. presenceData.state = document.title.replace(`- ${pathName.hostname}`, "");
  96. presenceData.buttons = [
  97. {
  98. label: "View Profile",
  99. url: document.URL,
  100. },
  101. ];
  102. } else if (page.includes("/users/profile"))
  103. presenceData.details = "Editing profile";
  104. else if (page.includes("/messages"))
  105. presenceData.details = "On messages page";
  106. if (
  107. document.querySelector("div.brn-attachment-grabber-container > textarea") &&
  108. document.querySelector<HTMLTextAreaElement>(
  109. "div.brn-attachment-grabber-container > textarea"
  110. ).value !== ""
  111. ) {
  112. presenceData.smallImageKey = Assets.Writing;
  113. presenceData.details = "Writing a question:";
  114. presenceData.state = document.querySelector<HTMLTextAreaElement>(
  115. "div.brn-attachment-grabber-container > textarea"
  116. ).value;
  117. }
  118. if (!time) delete presenceData.startTimestamp;
  119. if (!buttons && presenceData.buttons) delete presenceData.buttons;
  120. if (presenceData.details) presence.setActivity(presenceData);
  121. else presence.setActivity();
  122. });