presence.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. const presence = new Presence({
  2. clientId: "628019683718856714",
  3. }),
  4. browsingTimestamp = Math.floor(Date.now() / 1000);
  5. presence.on("UpdateData", async () => {
  6. const presenceData: PresenceData = {
  7. largeImageKey:
  8. "https://cdn.rcd.gg/PreMiD/websites/W/WhatsApp/assets/logo.png",
  9. startTimestamp: browsingTimestamp,
  10. },
  11. typing = document.querySelector(
  12. 'span[class="selectable-text copyable-text"]'
  13. ),
  14. [showRecipient, showNumbers] = await Promise.all([
  15. presence.getSetting<boolean>("showRecipient"),
  16. presence.getSetting<boolean>("showNumbers"),
  17. ]);
  18. let name = document
  19. .querySelector(".AmmtE")
  20. ?.querySelector('[class*="lhj4utae"]')?.textContent;
  21. if (
  22. name?.match(
  23. /^[+]?[(]?[0-9]{3}[)]?[-\s.]?[0-9]{3}[-\s.]?[0-9]{4,6}$/gm
  24. )?.[0] &&
  25. !showNumbers
  26. )
  27. name = "";
  28. if (!name && !typing) {
  29. switch (true) {
  30. case !!document.querySelector(".ppled2lx"): {
  31. // Community tab
  32. presenceData.details = "Viewing communities";
  33. break;
  34. }
  35. case !!document.querySelector(".mrcito7c.r96muop5"): {
  36. // Status
  37. presenceData.details = "Browsing all status updates";
  38. break;
  39. }
  40. case !document.querySelector(
  41. '[data-testid="conversation-info-header"]'
  42. ): {
  43. presenceData.details = "Browsing...";
  44. break;
  45. }
  46. default: {
  47. presenceData.details = "Texting with someone";
  48. presenceData.state = "Just reading...";
  49. break;
  50. }
  51. }
  52. } else if (document.querySelector('[role="tablist"]')) {
  53. // if contact windows with media/documents/etc is open
  54. presenceData.details = `Viewing ${document
  55. .querySelector('button[aria-selected="true"]')
  56. ?.textContent?.toLowerCase()} in the chat with ${
  57. !showRecipient ? "someone" : name
  58. }`;
  59. } else if (document.querySelector("._2Ts6i._1xFRo > span > div")) {
  60. // If contact windows is open
  61. presenceData.details = `Viewing contact info of ${
  62. !showRecipient ? "someone" : name
  63. }`;
  64. } else {
  65. presenceData.details = `Texting with ${!showRecipient ? "someone" : name}`;
  66. presenceData.state =
  67. (typing?.textContent && "Typing...") || "Just reading...";
  68. }
  69. presence.setActivity(presenceData);
  70. });