presence.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. const presence = new Presence({
  2. clientId: "620204628608417832",
  3. });
  4. presence.on("UpdateData", async () => {
  5. const presenceData: PresenceData = {
  6. largeImageKey:
  7. "https://cdn.rcd.gg/PreMiD/websites/N/Nightwave%20Plaza/assets/logo.png",
  8. },
  9. playerTitle: HTMLDivElement = document.querySelector("div.player-title"),
  10. playerArtist: HTMLDivElement = document.querySelector("div.player-artist"),
  11. playerTime: HTMLDivElement = document.querySelector("div.player-time"),
  12. playBackStatus: HTMLButtonElement =
  13. document.querySelector("button.player-play"),
  14. listeners: HTMLDivElement = document.querySelector("div.col.cell"),
  15. header: NodeListOf<HTMLDivElement> = document.querySelectorAll(
  16. ".window > .inner > .header.header-draggable.noselect"
  17. ),
  18. songInfo: HTMLDivElement = document.querySelector(".p-2.song-info");
  19. if (songInfo) {
  20. const [artist, album, title] = [...songInfo.querySelectorAll(".mb-1")].map(
  21. e => e.textContent
  22. );
  23. if (artist && album && title) {
  24. presenceData.details = `Looking at ${title.substring(
  25. 8
  26. )} by ${artist.substring(10)}`;
  27. presenceData.state = `Album: ${album.substring(8)}`;
  28. }
  29. } else if (header.length === 2) {
  30. let rating: HTMLButtonElement;
  31. if (header[1].textContent === "Ratings")
  32. rating = document.querySelector("button.active");
  33. presenceData.details = `Looking at ${rating ? rating.textContent : ""} ${
  34. header[1].textContent
  35. }`;
  36. } else {
  37. if (playerTitle) presenceData.state = playerTitle.textContent;
  38. if (playerArtist) presenceData.details = playerArtist.textContent;
  39. if (playBackStatus) {
  40. switch (playBackStatus.textContent) {
  41. case "Play": {
  42. presenceData.smallImageKey = Assets.Play;
  43. if (listeners) presenceData.smallImageText = listeners.textContent;
  44. break;
  45. }
  46. case "Stop": {
  47. presenceData.smallImageKey = Assets.Pause;
  48. if (listeners) presenceData.smallImageText = listeners.textContent;
  49. break;
  50. }
  51. default:
  52. break;
  53. }
  54. }
  55. if (playerTime) {
  56. const [currentTime, duration] = playerTime.textContent
  57. .split("/")
  58. .map(time => presence.timestampFromFormat(time));
  59. [presenceData.startTimestamp, presenceData.endTimestamp] =
  60. presence.getTimestamps(currentTime, duration);
  61. }
  62. }
  63. if (presenceData.details) presence.setActivity(presenceData);
  64. else presence.setActivity();
  65. });