presence.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. const presence = new Presence({
  2. clientId: "761617743593209869",
  3. });
  4. function getTime() {
  5. const time = document
  6. .querySelector(".vjs-current-time-display")
  7. .textContent.split(":")
  8. .map(n => Number(n));
  9. if (time.length === 3)
  10. return Date.now() - (time[0] * 3600 + time[1] * 60 + time[2]) * 1000;
  11. else return Date.now() - (time[0] * 60 + time[1]) * 1000;
  12. }
  13. presence.on("UpdateData", async () => {
  14. const presenceData: PresenceData = {
  15. largeImageKey:
  16. "https://cdn.rcd.gg/PreMiD/websites/I/Invidious/assets/logo.png",
  17. smallImageKey:
  18. "https://cdn.rcd.gg/PreMiD/websites/I/Invidious/assets/0.png",
  19. };
  20. let clear = false;
  21. const privacy = await presence.getSetting<boolean>("privacy");
  22. switch (document.location.pathname.replace("/feed", "").split("/")[1]) {
  23. case "":
  24. case "popular":
  25. presenceData.details = "Browsing popular videos";
  26. break;
  27. case "trending":
  28. presenceData.details = "Browsing trending videos";
  29. break;
  30. case "subscriptions":
  31. case "subscription_manager":
  32. presenceData.details = "Browsing subscriptions";
  33. break;
  34. case "view_all_playlists":
  35. presenceData.details = "Browsing playlists";
  36. break;
  37. case "history":
  38. presenceData.details = "Browsing watch history";
  39. break;
  40. case "change_password":
  41. case "clear_watch_history":
  42. case "data_control":
  43. case "delete_account":
  44. case "licenses":
  45. case "preferences":
  46. case "privacy":
  47. case "token_manager":
  48. presenceData.details = "Managing preferences";
  49. break;
  50. case "watch":
  51. if (!privacy) {
  52. presenceData.smallImageKey = document.querySelector(".vjs-playing")
  53. ? Assets.Play
  54. : Assets.Pause;
  55. presenceData.details = document.querySelector("h1").textContent.trim();
  56. presenceData.state =
  57. document.querySelector("#channel-name").textContent;
  58. if (document.querySelector(".vjs-playing"))
  59. presenceData.startTimestamp = getTime();
  60. }
  61. break;
  62. case "playlist":
  63. presenceData.details = "Viewing playlist";
  64. if (!privacy)
  65. presenceData.state = document.querySelector("h3").textContent;
  66. break;
  67. case "channel":
  68. presenceData.details = "Viewing channel";
  69. if (!privacy) {
  70. presenceData.state = document
  71. .querySelector(".channel-profile")
  72. .textContent.trim();
  73. }
  74. break;
  75. default:
  76. clear = true;
  77. break;
  78. }
  79. if (clear) presence.setActivity();
  80. else presence.setActivity(presenceData);
  81. });