presence.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. const presence = new Presence({
  2. clientId: "715344422039977994",
  3. }),
  4. strings = {
  5. listen: "Listening",
  6. mute: "Muted",
  7. record: "Recording",
  8. view: "Viewing",
  9. read: "Reading",
  10. },
  11. browsingTimestamp = Math.floor(Date.now() / 1000),
  12. modes = ["CW", "LSB", "USB", "AM", "FM", "AMsync"];
  13. let frequency: string,
  14. mode = 2,
  15. intHandle: number;
  16. function updateMode(): void {
  17. let i = 0;
  18. for (const node of Array.from(
  19. document.querySelector("div.ctl > form > div.buttonrow").children
  20. )) {
  21. if ((node as HTMLElement).style.background !== "") {
  22. mode = i;
  23. continue;
  24. }
  25. i++;
  26. }
  27. return;
  28. }
  29. presence.on("UpdateData", async () => {
  30. const presenceData: PresenceData = {
  31. largeImageKey:
  32. "https://cdn.rcd.gg/PreMiD/websites/W/WebSDR/assets/logo.png",
  33. smallImageText: "University of Twente SDR",
  34. startTimestamp: browsingTimestamp,
  35. };
  36. switch (document.location.pathname) {
  37. case "/": {
  38. if (!intHandle) intHandle = setInterval(updateMode, 1000);
  39. frequency = (
  40. document.querySelector(
  41. "div.ctl > form > span > input"
  42. ) as HTMLInputElement
  43. ).value;
  44. presenceData.details = `${frequency} ${modes[mode]}`;
  45. if (document.querySelector("#recbutton").textContent === "stop")
  46. presenceData.state = strings.record;
  47. else if (
  48. (document.querySelector("#mutecheckbox") as HTMLInputElement)
  49. .checked === true
  50. )
  51. presenceData.state = strings.mute;
  52. else presenceData.state = strings.listen;
  53. break;
  54. }
  55. case "/wspr/": {
  56. presenceData.details = "WSPR Map";
  57. presenceData.state = strings.view;
  58. break;
  59. }
  60. case "/chirps/": {
  61. presenceData.details = "Chirp Signals";
  62. presenceData.state = strings.view;
  63. break;
  64. }
  65. case "/chirps/article/": {
  66. presenceData.details = "Chirp Signal Article";
  67. presenceData.state = strings.read;
  68. break;
  69. }
  70. case "/fullday/": {
  71. presenceData.details = "Full Day Waterfall";
  72. presenceData.state = strings.view;
  73. break;
  74. }
  75. case "/oldnews.html": {
  76. presenceData.details = "Old News";
  77. presenceData.state = strings.read;
  78. break;
  79. }
  80. case "/qrt.html": {
  81. presenceData.details = "History";
  82. presenceData.state = strings.read;
  83. break;
  84. }
  85. // No default
  86. }
  87. if (!presenceData.details) presence.setActivity();
  88. else presence.setActivity(presenceData);
  89. });