presence.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. const presence = new Presence({
  2. clientId: "901821070263336971",
  3. }),
  4. pages: Record<string, string> = {
  5. "/": "Home",
  6. "/downloads": "Downloads",
  7. "/quickstart": "Quickstart",
  8. "/plugins": "Plugins",
  9. "/wiki": "Wiki",
  10. "/about": "About",
  11. "/imprint": "Imprint",
  12. "/privacy-policy": "Privacy Policy",
  13. },
  14. browsingTimestamp = Math.round(Date.now() / 1000);
  15. const enum Assets {
  16. Logo = "https://cdn.rcd.gg/PreMiD/websites/B/Blockbench/assets/logo.png",
  17. Generic = "https://cdn.rcd.gg/PreMiD/websites/B/Blockbench/assets/0.png",
  18. BlockItem = "https://cdn.rcd.gg/PreMiD/websites/B/Blockbench/assets/1.png",
  19. Bedrock = "https://cdn.rcd.gg/PreMiD/websites/B/Blockbench/assets/2.png",
  20. Modded = "https://cdn.rcd.gg/PreMiD/websites/B/Blockbench/assets/3.png",
  21. Optifine = "https://cdn.rcd.gg/PreMiD/websites/B/Blockbench/assets/4.png",
  22. Skin = "https://cdn.rcd.gg/PreMiD/websites/B/Blockbench/assets/5.png",
  23. }
  24. presence.on("UpdateData", async () => {
  25. const page = location.pathname,
  26. presenceData: PresenceData = {
  27. largeImageKey: Assets.Logo,
  28. startTimestamp: browsingTimestamp,
  29. },
  30. pluginHeader = document.querySelector(
  31. "#content_wrapper > div > div > h2"
  32. )?.textContent;
  33. if (location.host.split(".")[0] === "web") {
  34. const modelType = document.querySelectorAll<HTMLDivElement>(
  35. "#page_wrapper #status_bar div[title]:not(.f_left)"
  36. )[1]?.title;
  37. switch (modelType?.toLowerCase()) {
  38. case "generic model":
  39. presenceData.smallImageKey = Assets.Generic;
  40. break;
  41. case "java block/item":
  42. presenceData.smallImageKey = Assets.BlockItem;
  43. break;
  44. case "bedrock model":
  45. presenceData.smallImageKey = Assets.Bedrock;
  46. break;
  47. case "modded entity":
  48. presenceData.smallImageKey = Assets.Modded;
  49. break;
  50. case "optifine entity":
  51. presenceData.smallImageKey = Assets.Optifine;
  52. break;
  53. case "minecraft skin":
  54. presenceData.smallImageKey = Assets.Skin;
  55. break;
  56. default:
  57. break;
  58. }
  59. presenceData.details = "Web App";
  60. switch (
  61. document
  62. .querySelector("#main_toolbar #mode_selector li.selected")
  63. ?.textContent.toLowerCase() ||
  64. "Unknown"
  65. ) {
  66. case "Unknown":
  67. presenceData.state = "Just started";
  68. break;
  69. case "edit":
  70. presenceData.state = `Editing a ${modelType}`;
  71. break;
  72. case "paint":
  73. presenceData.state = `Painting a ${modelType}`;
  74. break;
  75. case "animate":
  76. presenceData.state = `Animating a ${modelType}`;
  77. break;
  78. default:
  79. presenceData.state = "Unknown activity";
  80. }
  81. } else if (page.includes("/plugins") && pluginHeader) {
  82. presenceData.details = "Looking at a plugin:";
  83. presenceData.state = pluginHeader;
  84. presenceData.buttons = [{ label: "View Plugin", url: location.href }];
  85. } else if (page.includes("/wiki")) {
  86. presenceData.details = "Blockbench Wiki";
  87. presenceData.smallImageKey = Assets.Reading;
  88. presenceData.smallImageText = "Reading";
  89. presenceData.state =
  90. document.querySelector(
  91. "#wiki_wrapper div.content > div.nuxt-content > h1"
  92. )?.textContent ||
  93. document.querySelector("#wiki_wrapper div.content > h1")?.textContent ||
  94. "Unknown Wiki Page";
  95. presenceData.buttons = [{ label: "Read Wiki", url: location.href }];
  96. } else if (pages[page])
  97. presenceData.details = `Looking at the ${pages[page]} page`;
  98. presence.setActivity(presenceData);
  99. });