presence.ts 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. const presence = new Presence({
  2. clientId: "1187606265829019689",
  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/T/Taiy%C5%8D/assets/logo.png",
  9. startTimestamp: browsingTimestamp,
  10. },
  11. { href, pathname } = document.location;
  12. switch (pathname.split("/")[1]) {
  13. case "auth":
  14. presenceData.details = "Fazendo login";
  15. break;
  16. case "dashboard": {
  17. if (pathname.includes("/medias/import"))
  18. presenceData.details = "Importando mangá";
  19. else if (pathname.includes("/medias/edit"))
  20. presenceData.details = "Editando mangá";
  21. else if (
  22. pathname.includes("/chapters/upload") ||
  23. pathname.includes("/chapters/bulk-upload")
  24. ) {
  25. const chapterNumber = document.querySelector<HTMLInputElement>(
  26. '.chapter-number input[type="number"]'
  27. )?.value,
  28. chapterVolume = document.querySelector<HTMLInputElement>(
  29. '.chapter-volume input[type="number"]'
  30. )?.value,
  31. chapterTitle = document.querySelectorAll<HTMLInputElement>(
  32. 'input[data-slot="input"]'
  33. )[1]?.value;
  34. if (chapterTitle) {
  35. presenceData.details = `Upando: ${chapterTitle}`;
  36. if (chapterNumber && chapterVolume)
  37. presenceData.state = `Cap. ${chapterNumber} - Vol. ${chapterVolume}`;
  38. } else presenceData.details = "Upando mangá...";
  39. } else if (pathname.includes("/scans/add"))
  40. presenceData.details = "Adicionando scan";
  41. else presenceData.details = "No dashboard...";
  42. break;
  43. }
  44. case "chapter": {
  45. const mediaLink =
  46. document.querySelector<HTMLAnchorElement>(".media-title").href,
  47. links = getCover(mediaLink.split("/")[4]);
  48. if (links.length > 0)
  49. presenceData.largeImageKey = `https://www.taiyo.moe${links[1]}`;
  50. presenceData.details =
  51. document.querySelector(".media-title")?.textContent;
  52. presenceData.state = `${
  53. document.querySelector(".chapter-number")?.textContent
  54. } - Página ${
  55. document.querySelector(".chapter-currentPage")?.textContent
  56. }`;
  57. presenceData.buttons = [
  58. { label: "Ler capítulo", url: href.replace(/\/[^/]*$/, "") },
  59. { label: "Ler mangá", url: mediaLink },
  60. ];
  61. break;
  62. }
  63. case "media": {
  64. presenceData.largeImageKey =
  65. document.querySelector<HTMLImageElement>(".cover-url")?.src;
  66. presenceData.details =
  67. document.querySelector(".media-title")?.textContent;
  68. presenceData.buttons = [{ label: "Ler mangá", url: href }];
  69. break;
  70. }
  71. default:
  72. presenceData.details = "Na página inicial...";
  73. break;
  74. }
  75. function getCover(uuid: string) {
  76. const elements = document.querySelectorAll(
  77. 'link[rel="preload"][as="image"]'
  78. ),
  79. links: string[] = [];
  80. for (const element of elements) {
  81. const imageSrcSet = element.getAttribute("imagesrcset");
  82. if (imageSrcSet) links.push(imageSrcSet.split(", ")[0].split(" ")[0]);
  83. }
  84. return links.filter(link => link.includes(uuid));
  85. }
  86. if (presenceData.details) presence.setActivity(presenceData);
  87. else presence.setActivity();
  88. });