presence.ts 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. const presence = new Presence({
  2. clientId: "626462884649500686", // CLIENT ID FOR YOUR PRESENCE
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000);
  5. let user: Element | HTMLElement | string,
  6. search: Element | HTMLElement | string,
  7. title: Element | HTMLElement | string;
  8. presence.on("UpdateData", async () => {
  9. const presenceData: PresenceData = {
  10. largeImageKey:
  11. "https://cdn.rcd.gg/PreMiD/websites/M/MinecraftForge/assets/logo.png",
  12. startTimestamp: browsingTimestamp,
  13. };
  14. switch (document.location.hostname) {
  15. case "www.minecraftforge.net": {
  16. if (document.location.pathname.includes("/topic/")) {
  17. title = document.querySelector(
  18. "body > main > div.sidebar-wrapper-content > div.ipsPageHeader.ipsClearfix > div.ipsPhotoPanel.ipsPhotoPanel_small.ipsPhotoPanel_notPhone.ipsClearfix > div > h1 > span > span"
  19. );
  20. presenceData.details = "Forums, viewing thread:";
  21. if (title.textContent.length > 128)
  22. presenceData.state = `${title.textContent.substring(0, 125)}...`;
  23. else presenceData.state = title.textContent;
  24. delete presenceData.smallImageKey;
  25. presence.setActivity(presenceData);
  26. } else if (document.location.pathname.includes("/search/")) {
  27. search = document.querySelector(
  28. "body > main > div > div:nth-child(2) > div.ipsResponsive_hidePhone.ipsResponsive_block.ipsPageHeader > p"
  29. );
  30. presenceData.details = "Forums, searching for:";
  31. [presenceData.state] = search.textContent.split("'");
  32. presenceData.smallImageKey = Assets.Search;
  33. presence.setActivity(presenceData);
  34. } else if (document.location.pathname.includes("/profile/")) {
  35. user = document.querySelector(
  36. "#elProfileHeader > div.ipsColumns.ipsColumns_collapsePhone > div.ipsColumn.ipsColumn_fluid > div > h1"
  37. );
  38. presenceData.details = "Forums, viewing user:";
  39. presenceData.state = user.textContent;
  40. delete presenceData.smallImageKey;
  41. presence.setActivity(presenceData);
  42. } else if (document.location.pathname.includes("/online/")) {
  43. presenceData.details = "Forums, viewing list of:";
  44. presenceData.state = "all online users";
  45. delete presenceData.smallImageKey;
  46. presence.setActivity(presenceData);
  47. } else if (document.location.pathname.includes("/staff/")) {
  48. presenceData.details = "Forums, viewing list of:";
  49. presenceData.state = "all staff members";
  50. delete presenceData.smallImageKey;
  51. presence.setActivity(presenceData);
  52. } else if (document.location.pathname.includes("/forum/")) {
  53. title = document.querySelector<HTMLElement>(
  54. "body > main > div.sidebar-wrapper-content > div.forum-header > div:nth-child(1) > h1"
  55. );
  56. if (title) {
  57. presenceData.details = "Forums, viewing category:";
  58. presenceData.state = title.textContent;
  59. delete presenceData.smallImageKey;
  60. presence.setActivity(presenceData);
  61. } else {
  62. presenceData.details = "Forums, Browsing...";
  63. delete presenceData.state;
  64. delete presenceData.smallImageKey;
  65. presence.setActivity(presenceData);
  66. }
  67. } else presence.setActivity();
  68. break;
  69. }
  70. case "files.minecraftforge.net": {
  71. title = document.querySelector<HTMLElement>(
  72. "body > main > div.sidebar-sticky-wrapper-content > div.promos-wrapper > div.promos-content > h1"
  73. );
  74. if (title) {
  75. presenceData.details = "Files, viewing Forge for:";
  76. presenceData.state = title.textContent.replace(
  77. "Downloads for Minecraft Forge - ",
  78. ""
  79. );
  80. delete presenceData.smallImageKey;
  81. presence.setActivity(presenceData);
  82. } else {
  83. presenceData.details = "Files, Browsing...";
  84. delete presenceData.state;
  85. delete presenceData.smallImageKey;
  86. presence.setActivity(presenceData);
  87. }
  88. break;
  89. }
  90. case "mcforge.readthedocs.io": {
  91. title = document.querySelector<HTMLElement>(
  92. "body > main > div.sidebar-sticky-wrapper-content > article > h1"
  93. );
  94. presenceData.details = "Docs, reading:";
  95. presenceData.state = title.textContent;
  96. presenceData.smallImageKey = Assets.Reading;
  97. presence.setActivity(presenceData);
  98. break;
  99. }
  100. case "forgedev.flocker.tv": {
  101. if (document.location.pathname.includes("/cart")) {
  102. presenceData.details = "Merch, viewing:";
  103. presenceData.state = "Shopping Cart";
  104. delete presenceData.smallImageKey;
  105. presence.setActivity(presenceData);
  106. } else if (document.location.pathname.includes("/products/")) {
  107. title = document.querySelector<HTMLElement>(
  108. "body > div:nth-child(18) > div > div.ant-modal-wrap.ant-modal-centered > div > div.ant-modal-content > div.ant-modal-body > div.creatorhub__product-modal-content > div > div.creatorhub__product-modal-title-wrapper > h1"
  109. );
  110. presenceData.details = "Merch, viewing:";
  111. presenceData.state = title.textContent;
  112. delete presenceData.smallImageKey;
  113. presence.setActivity(presenceData);
  114. } else {
  115. presenceData.details = "Merch, Browsing...";
  116. delete presenceData.state;
  117. delete presenceData.smallImageKey;
  118. presence.setActivity(presenceData);
  119. }
  120. break;
  121. }
  122. default:
  123. presence.setActivity();
  124. }
  125. });