presence.ts 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. const presence = new Presence({
  2. clientId: "719415069460529163",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000);
  5. presence.on("UpdateData", async () => {
  6. const [joinButton] = await Promise.all([
  7. presence.getSetting<boolean>("joinButton"),
  8. presence.getSetting<boolean>("buttons"),
  9. ]),
  10. presenceData: PresenceData = {
  11. largeImageKey:
  12. "https://cdn.rcd.gg/PreMiD/websites/K/Keymash/assets/logo.png",
  13. startTimestamp: browsingTimestamp,
  14. },
  15. { href, pathname } = document.location,
  16. [, path, query] = pathname.split("/");
  17. switch (path) {
  18. case "": {
  19. const playerCount = document.querySelectorAll(
  20. ".grid [href^='/profile'] > img"
  21. ).length;
  22. if (document.querySelector(".container-game") && playerCount) {
  23. presenceData.details = "Playing public lobby";
  24. presenceData.state = `${playerCount} player${
  25. playerCount === 1 ? "" : "s"
  26. }`;
  27. } else presenceData.details = "Main Menu";
  28. break;
  29. }
  30. case "game":
  31. presenceData.details = "Currently in game";
  32. break;
  33. case "auth":
  34. presenceData.details = "Logging in";
  35. break;
  36. case "leaderboards":
  37. presenceData.details = "Viewing Leaderboards";
  38. if (query) {
  39. presenceData.state = `${
  40. query.charAt(0).toUpperCase() + query.slice(1)
  41. } Leaders`;
  42. }
  43. break;
  44. case "profile":
  45. if (query) {
  46. presenceData.details = "Viewing profile";
  47. presenceData.state = query.replace("-", "#");
  48. } else presenceData.details = "Viewing profile";
  49. presenceData.buttons = [
  50. {
  51. label: "View Page",
  52. url: href,
  53. },
  54. ];
  55. break;
  56. case "custom": {
  57. const playerCount = document.querySelectorAll(
  58. "[href^='/profile'] > img"
  59. ).length;
  60. if (document.querySelector(".container-game") && playerCount) {
  61. presenceData.details = "Playing custom lobby";
  62. presenceData.state = `${playerCount} player${
  63. playerCount === 1 ? "" : "s"
  64. }`;
  65. } else if (playerCount) {
  66. presenceData.details = "In custom lobby";
  67. presenceData.state = `${playerCount} player${
  68. playerCount === 1 ? "" : "s"
  69. }`;
  70. }
  71. if (joinButton) {
  72. presenceData.buttons = [
  73. {
  74. label: "Join Lobby",
  75. url: href,
  76. },
  77. ];
  78. }
  79. break;
  80. }
  81. case "competitions":
  82. if (query) {
  83. presenceData.details = "Viewing competition";
  84. presenceData.state = document.querySelector("h1");
  85. } else presenceData.details = "Broswsing competitions";
  86. break;
  87. case "shop":
  88. presenceData.details = "Browsing item shop";
  89. break;
  90. default:
  91. presenceData.details = "Browsing...";
  92. break;
  93. }
  94. if (presenceData.details) presence.setActivity(presenceData);
  95. });