presence.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. const presence = new Presence({ clientId: "739908991274057870" }),
  2. browsingTimestamp = Math.floor(Date.now() / 1000);
  3. function pathIncludes(string: string): boolean {
  4. return document.location.pathname.toLowerCase().includes(string);
  5. }
  6. const host = document.location.hostname;
  7. async function getStrings() {
  8. return presence.getStrings(
  9. {
  10. reading: "general.readingAbout",
  11. leaderboard: "juniperbot.leaderboard",
  12. viewMainPage: "juniperbot.mainpage",
  13. serverdash: "juniperbot.serverdash",
  14. serverdashname: "juniperbot.serverdashname",
  15. donate: "juniperbot.donate",
  16. servers: "juniperbot.servers",
  17. commands: "juniperbot.commands",
  18. stats: "juniperbot.stats",
  19. usercard: "juniperbot.usercard",
  20. terms: "general.terms",
  21. privacy: "general.privacy",
  22. cookies: "juniperbot.cookies",
  23. },
  24. await presence.getSetting<string>("lang").catch(() => "en")
  25. );
  26. }
  27. let strings: Awaited<ReturnType<typeof getStrings>>,
  28. oldLang: string = null;
  29. const enum Assets {
  30. Logo = "https://cdn.rcd.gg/PreMiD/websites/J/Juniperbot/assets/logo.png",
  31. Stats = "https://cdn.rcd.gg/PreMiD/websites/J/Juniperbot/assets/0.png",
  32. Donate = "https://cdn.rcd.gg/PreMiD/websites/J/Juniperbot/assets/1.png",
  33. List = "https://cdn.rcd.gg/PreMiD/websites/J/Juniperbot/assets/2.png",
  34. }
  35. presence.on("UpdateData", async () => {
  36. const presenceData: PresenceData = { largeImageKey: Assets.Logo },
  37. newLang = await presence.getSetting<string>("lang").catch(() => "en");
  38. if (oldLang !== newLang || !strings) {
  39. oldLang = newLang;
  40. strings = await getStrings();
  41. }
  42. if (host === "juniper.bot") {
  43. presenceData.startTimestamp = browsingTimestamp;
  44. switch (true) {
  45. case pathIncludes("/ranking/"):
  46. presenceData.details = strings.leaderboard;
  47. presenceData.state = document.querySelector(
  48. ".guild--info h1.font-weight-thin.display-2"
  49. ).textContent;
  50. presenceData.smallImageKey = Assets.List;
  51. break;
  52. case pathIncludes("/dashboard/"):
  53. presenceData.details = strings.serverdash;
  54. presenceData.state = strings.serverdashname.replace(
  55. "{0}",
  56. document.querySelector(".guild--info h1.font-weight-thin.display-2")
  57. .textContent
  58. );
  59. break;
  60. case pathIncludes("/donate"):
  61. presenceData.details = strings.donate;
  62. presenceData.smallImageKey = Assets.Donate;
  63. break;
  64. case pathIncludes("/servers"):
  65. presenceData.details = strings.servers;
  66. presenceData.smallImageKey = Assets.List;
  67. break;
  68. case pathIncludes("/commands"):
  69. presenceData.details = strings.commands;
  70. presenceData.smallImageKey = Assets.List;
  71. break;
  72. case pathIncludes("/status"):
  73. presenceData.details = strings.stats;
  74. presenceData.smallImageKey = Assets.Stats;
  75. break;
  76. case pathIncludes("/user/card"):
  77. presenceData.details = strings.usercard;
  78. break;
  79. case pathIncludes("/terms"):
  80. presenceData.details = `${strings.reading} ${strings.terms}`;
  81. presenceData.smallImageKey = Assets.List;
  82. break;
  83. case pathIncludes("/cookie"):
  84. presenceData.details = `${strings.reading} ${strings.cookies}`;
  85. presenceData.smallImageKey = Assets.List;
  86. break;
  87. case pathIncludes("/privacy"):
  88. presenceData.details = `${strings.reading} ${strings.privacy}`;
  89. presenceData.smallImageKey = Assets.List;
  90. break;
  91. default:
  92. presenceData.details = "Main page";
  93. break;
  94. }
  95. }
  96. if (host === "docs.juniper.bot") {
  97. presenceData.startTimestamp = browsingTimestamp;
  98. presenceData.details = document.title;
  99. presenceData.state = "docs.juniper.bot";
  100. presenceData.smallImageKey = Assets.List;
  101. }
  102. if (host === "feedback.juniper.bot") {
  103. presenceData.startTimestamp = browsingTimestamp;
  104. presenceData.state = "feedback.juniper.bot";
  105. switch (true) {
  106. case pathIncludes("/posts/"):
  107. presenceData.details = `${strings.reading} ${
  108. document.querySelector(".post-header h1").textContent
  109. }`;
  110. break;
  111. default:
  112. presenceData.details = strings.viewMainPage;
  113. break;
  114. }
  115. }
  116. if (presenceData.details) presence.setActivity(presenceData);
  117. else presence.setActivity();
  118. });