presence.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. const presence = new Presence({
  2. clientId: "1218931024592113744",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000);
  5. const enum Assets {
  6. Advice = "https://cdn.rcd.gg/PreMiD/websites/K/Kittensgame/assets/0.png",
  7. Logo = "https://cdn.rcd.gg/PreMiD/websites/K/Kittensgame/assets/logo.png",
  8. Loading = "https://cdn.rcd.gg/PreMiD/websites/K/Kittensgame/assets/1.gif",
  9. }
  10. presence.on("UpdateData", async () => {
  11. const presenceData: PresenceData = {
  12. largeImageKey: Assets.Logo,
  13. startTimestamp: browsingTimestamp,
  14. },
  15. { pathname, href, hostname } = document.location;
  16. switch (hostname) {
  17. case "kittensgame.com": {
  18. if (
  19. document.querySelector<HTMLProgressElement>("#loadingProgressBar")
  20. .value !== 100
  21. ) {
  22. presenceData.details = "Loading...";
  23. presenceData.smallImageKey = Assets.Loading;
  24. } else {
  25. const mainData = await presence.getPageVariable(
  26. "gamePage.calendar.day",
  27. "gamePage.calendar.season",
  28. "gamePage.calendar.year",
  29. "gamePage.calendar.cycle"
  30. ),
  31. advice = document.querySelector<HTMLDivElement>("#advisorsContainer");
  32. presenceData.details = `Day ${mainData["gamePage.calendar.day"]} - Season ${mainData["gamePage.calendar.season"]}`;
  33. presenceData.state = `Year ${mainData["gamePage.calendar.year"]} - Cycle ${mainData["gamePage.calendar.cycle"]}`;
  34. if (
  35. advice?.textContent &&
  36. advice.getAttribute("style").includes("display: block")
  37. ) {
  38. presenceData.smallImageKey = Assets.Advice;
  39. presenceData.smallImageText = advice?.textContent;
  40. }
  41. presenceData.buttons = [{ label: "Play Game", url: href }];
  42. }
  43. break;
  44. }
  45. case "forum.kittensgame.com": {
  46. const username = document.querySelector("h5.mb-0")?.textContent,
  47. userTag = document.querySelector(".text-muted")?.textContent;
  48. switch (true) {
  49. case pathname.includes("home"):
  50. case pathname === "/": {
  51. presenceData.details = `Forum - Viewing all ${document
  52. .querySelector('label[class*="active"]')
  53. ?.textContent?.toLowerCase()} on the homepage`;
  54. break;
  55. }
  56. case pathname.includes("/u/"): {
  57. presenceData.details = `Forum - Viewing the profile of: ${
  58. username && userTag ? `${username} (${userTag})` : userTag
  59. }`;
  60. presenceData.state = `Tab: ${document
  61. .querySelector('[class*=" active"]')
  62. ?.textContent?.toLowerCase()}`;
  63. presenceData.buttons = [{ label: "View Profile", url: href }];
  64. break;
  65. }
  66. case pathname.includes("/post/"): {
  67. presenceData.details = "Forum - Reading post about:";
  68. presenceData.state =
  69. document.querySelector('[title="Comments"]')?.textContent;
  70. presenceData.smallImageKey = Assets.Reading;
  71. presenceData.buttons = [
  72. { label: "View Post", url: href },
  73. {
  74. label: "View Author's Profile",
  75. url: document.querySelector<HTMLAnchorElement>(".text-info")
  76. ?.href,
  77. },
  78. ];
  79. break;
  80. }
  81. case pathname === "/communities": {
  82. presenceData.details = "Forum - Viewing all communities";
  83. break;
  84. }
  85. }
  86. break;
  87. }
  88. case "wiki.kittensgame.com": {
  89. const rPathname = pathname.replace(
  90. `/${document.querySelector("html").getAttribute("lang")}`,
  91. ""
  92. ),
  93. search = document
  94. .querySelector(".v-input__control")
  95. ?.querySelector<HTMLInputElement>("input");
  96. if (search?.value) {
  97. presenceData.details = "Searching for:";
  98. presenceData.state = search.value;
  99. presenceData.smallImageKey = Assets.Search;
  100. return presence.setActivity(presenceData);
  101. }
  102. if (rPathname === "/home")
  103. presenceData.details = "Wiki - Viewing the homepage";
  104. else if (rPathname === "/login")
  105. presenceData.details = "Wiki - Login page";
  106. else {
  107. presenceData.details = "Wiki - Reading help article titled:";
  108. presenceData.state = document.querySelector<HTMLMetaElement>(
  109. 'meta[property="og:title"]'
  110. )?.content;
  111. presenceData.smallImageKey = Assets.Reading;
  112. presenceData.buttons = [{ label: "Read Article", url: href }];
  113. break;
  114. }
  115. break;
  116. }
  117. }
  118. presence.setActivity(presenceData);
  119. });