presence.ts 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. const presence = new Presence({
  2. clientId: "939893158777618432",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000);
  5. const enum Assets {
  6. Logo = "https://cdn.rcd.gg/PreMiD/websites/0-9/2048Verse/assets/logo.png",
  7. }
  8. presence.on("UpdateData", async () => {
  9. const [time, buttons] = await Promise.all([
  10. presence.getSetting<boolean>("time"),
  11. presence.getSetting<boolean>("buttons"),
  12. ]),
  13. presenceData: PresenceData = {
  14. largeImageKey: Assets.Logo,
  15. startTimestamp: browsingTimestamp,
  16. },
  17. { pathname, href } = document.location,
  18. gridSize = `${document.querySelectorAll(".grid-row").length.toString()}x${(
  19. document.querySelectorAll(".grid-cell").length /
  20. document.querySelectorAll(".grid-row").length
  21. ).toString()}`;
  22. if (pathname.split("/")[1] === "leaderboard") {
  23. let leaderboardType;
  24. switch (document.querySelector<HTMLDivElement>("#marker").style.left) {
  25. case "-280px": {
  26. leaderboardType = "All Time";
  27. break;
  28. }
  29. case "-157px": {
  30. leaderboardType = "Today";
  31. break;
  32. }
  33. case "-44px": {
  34. leaderboardType = "Week";
  35. break;
  36. }
  37. }
  38. presenceData.details = "Viewing leaderboard";
  39. presenceData.state = `${
  40. document.querySelector<HTMLSelectElement>("#variant").value
  41. } ${leaderboardType}`;
  42. } else if (pathname.split("/")[1] === "user") {
  43. presenceData.details = "Viewing profile";
  44. presenceData.state =
  45. document.querySelector("h1.title").firstChild.textContent;
  46. presenceData.buttons = [{ label: "View Profile", url: href }];
  47. } else if (pathname.split("/")[1] === "replay") {
  48. presenceData.details = `Watching replay ${gridSize}`;
  49. presenceData.state = `Score ${
  50. document.querySelector(".score-container")?.firstChild?.textContent
  51. }`;
  52. } else if (pathname.split("/")[1] === "p") {
  53. presenceData.details = `Practising ${gridSize}`;
  54. presenceData.state = `Score ${
  55. document.querySelector(".score-container")?.firstChild?.textContent
  56. } Best ${document.querySelector(".best-container")?.textContent}`;
  57. } else if (pathname.split("/")[1] === "lessons")
  58. presenceData.details = "Browsing lessons";
  59. else if (document.querySelectorAll(".grid-row").length) {
  60. presenceData.details = `Playing ${gridSize}`;
  61. presenceData.state = `Score ${
  62. document.querySelector(".score-container")?.firstChild?.textContent
  63. } Best ${document.querySelector(".best-container")?.textContent}`;
  64. }
  65. if (!time) delete presenceData.startTimestamp;
  66. if (!buttons && presenceData.buttons) delete presenceData.buttons;
  67. presence.setActivity(presenceData);
  68. });