presence.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. const presence = new Presence({
  2. clientId: "841014953439264841",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000);
  5. const enum Assets {
  6. LogoWhite = "https://cdn.rcd.gg/PreMiD/websites/W/WINDOWS93/assets/logo.png",
  7. LogoBlack = "https://cdn.rcd.gg/PreMiD/websites/W/WINDOWS93/assets/0.png",
  8. }
  9. let iFrameData = {
  10. minesweeper: {
  11. time: 0,
  12. bombs: 0,
  13. gameState: "",
  14. },
  15. bananamp: {
  16. title: "",
  17. playing: false,
  18. },
  19. defrag: {
  20. progress: "",
  21. playing: false,
  22. started: false,
  23. },
  24. solitude: {
  25. stack1: "",
  26. stack2: "",
  27. stack3: "",
  28. stack4: "",
  29. },
  30. maze: {
  31. distance: "",
  32. },
  33. wlc: {
  34. currentTime: 0,
  35. duration: 0,
  36. paused: false,
  37. },
  38. };
  39. presence.on(
  40. "iFrameData",
  41. (data: {
  42. minesweeper: { time: number; bombs: number; gameState: string };
  43. bananamp: { title: string; playing: boolean };
  44. defrag: { progress: string; playing: boolean; started: boolean };
  45. solitude: {
  46. stack1: string;
  47. stack2: string;
  48. stack3: string;
  49. stack4: string;
  50. };
  51. maze: { distance: string };
  52. wlc: { currentTime: number; duration: number; paused: boolean };
  53. }) => {
  54. iFrameData = data;
  55. }
  56. );
  57. presence.on("UpdateData", async () => {
  58. const [time, logo] = await Promise.all([
  59. presence.getSetting<boolean>("time"),
  60. presence.getSetting<number>("logo"),
  61. ]),
  62. presenceData: PresenceData = {
  63. largeImageKey: logo ? Assets.LogoBlack : Assets.LogoWhite,
  64. startTimestamp: browsingTimestamp,
  65. },
  66. activeWindow = document.querySelector(".ui_window--active");
  67. presenceData.details = `Viewing ${
  68. activeWindow?.querySelector(".ui_window__head__title")?.textContent ??
  69. "Desktop"
  70. }`;
  71. presenceData.smallImageKey = activeWindow?.querySelector<HTMLImageElement>(
  72. ".ui_window__head__icon"
  73. );
  74. switch (activeWindow?.querySelector(".ui_window__head__title")?.textContent) {
  75. case "BrianSweeper": {
  76. presenceData.state = `Bombs:${iFrameData.minesweeper.bombs} Time:${iFrameData.minesweeper.time} ${iFrameData.minesweeper.gameState}`;
  77. break;
  78. }
  79. case "Bananamp": {
  80. presenceData.state = `Playing ${iFrameData.bananamp.title}`;
  81. presenceData.smallImageKey = iFrameData.bananamp.playing
  82. ? Assets.Play
  83. : Assets.Pause;
  84. presenceData.smallImageText = iFrameData.bananamp.playing
  85. ? "Playing"
  86. : "Paused";
  87. break;
  88. }
  89. case "Defrag": {
  90. if (iFrameData.defrag.started)
  91. presenceData.state = `Progress: ${iFrameData.defrag.progress}`;
  92. if (!iFrameData.defrag.playing) {
  93. presenceData.smallImageKey = Assets.Pause;
  94. presenceData.smallImageText = "Paused";
  95. }
  96. break;
  97. }
  98. case "Solitude": {
  99. presenceData.state = `${iFrameData.solitude.stack1} ${iFrameData.solitude.stack2} ${iFrameData.solitude.stack3} ${iFrameData.solitude.stack4}`;
  100. break;
  101. }
  102. case "Maze 3D": {
  103. presenceData.state = iFrameData.maze.distance;
  104. break;
  105. }
  106. case "WideoLAN": {
  107. if (!iFrameData.wlc.paused) {
  108. [presenceData.startTimestamp, presenceData.endTimestamp] =
  109. presence.getTimestamps(
  110. iFrameData.wlc.currentTime,
  111. iFrameData.wlc.duration
  112. );
  113. }
  114. presenceData.smallImageKey = iFrameData.wlc.paused
  115. ? Assets.Pause
  116. : Assets.Play;
  117. presenceData.smallImageText = iFrameData.wlc.paused
  118. ? "Paused"
  119. : "Playing";
  120. break;
  121. }
  122. case "HYDRA": {
  123. presenceData.state = `${
  124. document.querySelectorAll(".virus--hydra").length
  125. } window${
  126. document.querySelectorAll(".virus--hydra").length !== 1 ? "s" : ""
  127. }`;
  128. break;
  129. }
  130. }
  131. if (!time) {
  132. delete presenceData.startTimestamp;
  133. delete presenceData.endTimestamp;
  134. }
  135. presence.setActivity(presenceData);
  136. });