presence.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. const presence = new Presence({
  2. clientId: "700338425953386587",
  3. }),
  4. strings = presence.getStrings({
  5. play: "general.playing",
  6. pause: "general.paused",
  7. browsing: "general.browsing",
  8. searching: "general.searching",
  9. reading: "general.reading",
  10. });
  11. function parseQueryString(queryString?: string) {
  12. queryString ??= window.location.search.substring(1);
  13. const params: { [queryKey: string]: string } = {},
  14. queries = queryString.split("&");
  15. for (const indexQuery in queries) {
  16. const indexPair = indexQuery.split("=");
  17. params[decodeURIComponent(indexPair[0])] = decodeURIComponent(
  18. indexPair.length > 1 ? indexPair[1] : ""
  19. );
  20. }
  21. return params;
  22. }
  23. presence.on("UpdateData", async () => {
  24. const presenceData: PresenceData = {
  25. largeImageKey:
  26. "https://cdn.rcd.gg/PreMiD/websites/I/Issou%20TV/assets/logo.png",
  27. },
  28. pageTitle = document.querySelector("title").textContent.split(" | "),
  29. browsingTimestamp = Math.floor(Date.now() / 1000),
  30. route = document.location.pathname.split("/"),
  31. query = await parseQueryString(document.location.hash).search;
  32. if (document.location.pathname === "/") {
  33. presenceData.details = (await strings).browsing;
  34. presenceData.startTimestamp = browsingTimestamp;
  35. } else if (document.location.pathname.includes("/videos/")) {
  36. if (document.location.pathname.includes("/category/")) {
  37. presenceData.details = query
  38. ? (await strings).searching
  39. : (await strings).browsing;
  40. const routes = [
  41. "humour",
  42. "malaise",
  43. "game",
  44. "musique",
  45. "insolite",
  46. "18",
  47. "18-gore",
  48. "18-insolite",
  49. "18-vr",
  50. ];
  51. for (const r of routes) {
  52. if (route[3] === `${r}`) {
  53. presenceData.state = `${pageTitle[0]} - page ${
  54. route[4] ? route[5] : 1
  55. }`;
  56. }
  57. }
  58. presenceData.startTimestamp = browsingTimestamp;
  59. } else {
  60. const video: HTMLVideoElement = document.querySelector(
  61. ".mejs-mediaelement > mediaelementwrapper > video"
  62. );
  63. [presenceData.details] = pageTitle;
  64. presenceData.smallImageKey = video.paused ? Assets.Pause : Assets.Play;
  65. presenceData.smallImageText = video.paused
  66. ? (await strings).pause
  67. : (await strings).play;
  68. [presenceData.startTimestamp, presenceData.endTimestamp] =
  69. presence.getTimestamps(
  70. Math.floor(video.currentTime),
  71. Math.floor(video.duration)
  72. );
  73. if (video.paused) {
  74. delete presenceData.startTimestamp;
  75. delete presenceData.endTimestamp;
  76. }
  77. }
  78. } else if (document.location.pathname.includes("/upload")) {
  79. [presenceData.details] = pageTitle;
  80. presenceData.smallImageKey = Assets.Uploading;
  81. } else {
  82. [presenceData.details] = pageTitle;
  83. presenceData.state = (await strings).reading;
  84. presenceData.startTimestamp = browsingTimestamp;
  85. }
  86. if (query) {
  87. presenceData.smallImageKey = Assets.Search;
  88. presenceData.smallImageText = (await strings).searching;
  89. presenceData.details = `${(await strings).searching} : ${query}`;
  90. }
  91. if (presenceData.details) presence.setActivity(presenceData);
  92. else presence.setActivity();
  93. });