presence.ts 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. const presence = new Presence({
  2. clientId: "944271713997324339",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000);
  5. let page: string;
  6. presence.on("UpdateData", async () => {
  7. const [timestamps, privacy, buttons] = await Promise.all([
  8. presence.getSetting<boolean>("timestamps"),
  9. presence.getSetting<boolean>("privacy"),
  10. presence.getSetting<boolean>("buttons"),
  11. ]),
  12. pathArray = document.location.toString().split("/"),
  13. presenceData: PresenceData = {
  14. largeImageKey:
  15. "https://cdn.rcd.gg/PreMiD/websites/H/Hareshi/assets/logo.jpg",
  16. details: "หน้าแรก",
  17. startTimestamp: browsingTimestamp,
  18. },
  19. { hostname, href, search } = document.location;
  20. if (hostname === "forum.hareshi.net") {
  21. switch (pathArray[3]) {
  22. case "forums":
  23. page = "ฟอรั่ม";
  24. if (privacy) presenceData.details = "กำลังอ่านฟอรั่ม";
  25. else {
  26. presenceData.details =
  27. document.querySelector(
  28. "#top > div.p-body > div > div:nth-child(2) > div > ul"
  29. )?.textContent ?? "ไม่พบข้อมูล";
  30. presenceData.state =
  31. document.querySelector(
  32. "#top > div.p-body-header > div > div > div.p-title > h1"
  33. )?.textContent ?? "ไม่พบข้อมูล";
  34. }
  35. break;
  36. case "threads":
  37. page = "เธรด";
  38. presenceData.details = "เธรด";
  39. if (!privacy) {
  40. presenceData.state =
  41. document.querySelector(
  42. "#top > div.p-body-header > div > div > div.p-title > h1"
  43. )?.textContent ?? "ไม่พบข้อมูล";
  44. }
  45. break;
  46. case "whats-new":
  47. presenceData.details = "มีอะไรใหม่ ?";
  48. presenceData.smallImageKey = Assets.Question;
  49. if (!privacy && pathArray[4]) {
  50. presenceData.smallImageKey = Assets.Reading;
  51. switch (pathArray[4]) {
  52. case "posts":
  53. presenceData.smallImageText = "ดูโพสต์ใหม่";
  54. break;
  55. case "profile-posts":
  56. presenceData.smallImageText = "สเตตัสส่วนตัวใหม่";
  57. break;
  58. case "news-feed":
  59. presenceData.smallImageText = "ฟีดข่าวของคุณ";
  60. break;
  61. case "latest-activity":
  62. presenceData.smallImageText = "เคลื่อนไหวล่าสุด";
  63. break;
  64. }
  65. }
  66. break;
  67. case "members":
  68. presenceData.details = "สมาชิก";
  69. if (!privacy && pathArray[5]) {
  70. presenceData.smallImageKey = Assets.Reading;
  71. switch (pathArray[5]) {
  72. case "#latest-activity":
  73. presenceData.smallImageText = "เคลื่อนไหวล่าสุด";
  74. break;
  75. case "#recent-content":
  76. presenceData.smallImageText = "โพสต์ทั้งหมด";
  77. break;
  78. case "#about":
  79. presenceData.smallImageText = "เกี่ยวกับ";
  80. break;
  81. default:
  82. presenceData.smallImageText = "ข้อความเยี่ยมชม";
  83. break;
  84. }
  85. }
  86. break;
  87. case "search":
  88. if (privacy) presenceData.details = "ค้นหาอะไรบางอย่าง...";
  89. else {
  90. presenceData.details = "ค้นหา";
  91. presenceData.state =
  92. document.querySelector(
  93. "#top > div.p-body-header > div > div > div > h1 > a > em"
  94. )?.textContent ?? "ไม่พบข้อมูล";
  95. }
  96. presenceData.smallImageKey = Assets.Search;
  97. break;
  98. default:
  99. presenceData.details = "ฟอรั่ม";
  100. break;
  101. }
  102. if (!privacy && pathArray[4] === "find-source") {
  103. presenceData.smallImageKey = Assets.Reading;
  104. switch (search) {
  105. case "?order=reply_count":
  106. presenceData.smallImageText = "ยอดนิยม";
  107. break;
  108. case "?order=post_date":
  109. presenceData.smallImageText = "ใหม่สุด";
  110. break;
  111. case "?unanswered=1":
  112. presenceData.smallImageText = "ยังไม่มีคำตอบ";
  113. break;
  114. case "?your_questions=1":
  115. presenceData.smallImageText = "คำถามของคุณ";
  116. break;
  117. case "?unsolved=1":
  118. presenceData.smallImageText = "ยังไม่ถูกแก้";
  119. break;
  120. case "?your_answers=1":
  121. presenceData.smallImageText = "คำตอบของคุณ";
  122. break;
  123. default:
  124. presenceData.smallImageText = "อัปเดตล่าสุด";
  125. break;
  126. }
  127. }
  128. if (buttons && page) {
  129. presenceData.buttons = [
  130. {
  131. label: `ดู${page}`,
  132. url: href.replace(/#\d+/, ""),
  133. },
  134. ];
  135. }
  136. } else {
  137. switch (pathArray[3]) {
  138. case "browse":
  139. presenceData.details = "เรียกดู";
  140. if (pathArray[4] === "anime") {
  141. presenceData.state =
  142. document.querySelector("#anipop")?.textContent ?? "ไม่พบข้อมูล";
  143. } else {
  144. presenceData.state =
  145. document.querySelector(
  146. "#__layout > div > div > div > div.container > h1"
  147. )?.textContent ?? "ไม่พบข้อมูล";
  148. }
  149. break;
  150. case "calendar":
  151. presenceData.details = "ตารางออกอากาศ";
  152. break;
  153. }
  154. }
  155. if (!timestamps) {
  156. delete presenceData.startTimestamp;
  157. delete presenceData.endTimestamp;
  158. }
  159. if (privacy) {
  160. delete presenceData.state;
  161. delete presenceData.buttons;
  162. }
  163. if (presenceData.details) presence.setActivity(presenceData);
  164. else presence.setActivity();
  165. });