presence.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. const presence = new Presence({
  2. clientId: '843781235494486046',
  3. })
  4. const browsingTimestamp = Math.floor(Date.now() / 1000)
  5. presence.on('UpdateData', async () => {
  6. const setting = {
  7. timeElapsed: await presence.getSetting<boolean>('timeElapsed'),
  8. showButtons: await presence.getSetting<boolean>('showButtons'),
  9. }
  10. const urlpath = window.location.pathname.split('/')
  11. const presenceData: PresenceData = {
  12. largeImageKey: 'https://cdn.rcd.gg/PreMiD/websites/D/Daily%20Wire/assets/logo.png',
  13. }
  14. if (setting.timeElapsed)
  15. presenceData.startTimestamp = browsingTimestamp
  16. if (!urlpath[1]) {
  17. presenceData.details = 'Home'
  18. }
  19. else if (urlpath[1] === 'news' && urlpath[2]) {
  20. presenceData.details = 'Viewing Article'
  21. presenceData.state = document.querySelector('h1.css-cmdiie.e172hw750')?.textContent
  22. || 'Unknown'
  23. if (setting.showButtons) {
  24. presenceData.buttons = [
  25. {
  26. label: 'Read Article',
  27. url: window.location.href,
  28. },
  29. ]
  30. }
  31. }
  32. else {
  33. switch (urlpath[1]) {
  34. case 'episode': {
  35. presenceData.details = document.querySelector('h2.css-n0lwas.e172hw750')?.textContent
  36. || 'Unknown'
  37. presenceData.state = document.querySelectorAll('span.css-e6rih1.ew91t7w0')[1]
  38. ?.textContent || 'Unknown'
  39. if (setting.showButtons) {
  40. presenceData.buttons = [
  41. {
  42. label: 'Watch Episode',
  43. url: window.location.href,
  44. },
  45. ]
  46. }
  47. break
  48. }
  49. case 'show': {
  50. presenceData.details = 'Viewing Show'
  51. presenceData.state = document.querySelector('h3.css-1qqpwph')?.textContent || 'Unknown'
  52. if (setting.showButtons) {
  53. presenceData.buttons = [
  54. {
  55. label: 'Watch Show',
  56. url: window.location.href,
  57. },
  58. ]
  59. }
  60. break
  61. }
  62. case 'discussion': {
  63. presenceData.details = 'Viewing Discussion'
  64. presenceData.state = document.querySelector('h2.css-n0lwas.e172hw750')?.textContent
  65. || 'Unknown'
  66. if (setting.showButtons) {
  67. presenceData.buttons = [
  68. {
  69. label: 'View Discussion',
  70. url: window.location.href,
  71. },
  72. ]
  73. }
  74. break
  75. }
  76. case 'author': {
  77. presenceData.details = 'Viewing Author'
  78. presenceData.state = document.querySelector('h2.css-cmdiie.e172hw750')?.textContent
  79. || 'Unknown'
  80. if (setting.showButtons) {
  81. presenceData.buttons = [
  82. {
  83. label: 'View Author',
  84. url: window.location.href,
  85. },
  86. ]
  87. }
  88. break
  89. }
  90. case 'subscribe': {
  91. presenceData.details = 'Viewing Membership'
  92. break
  93. }
  94. case 'read':
  95. case 'dicuss':
  96. case 'watch': {
  97. presenceData.details = 'Browsing'
  98. break
  99. }
  100. case 'search': {
  101. presenceData.details = 'Searching'
  102. presenceData.state = document.querySelector<HTMLInputElement>(
  103. 'input.ais-SearchBox-input',
  104. )?.value
  105. break
  106. }
  107. default:
  108. presenceData.details = 'Other'
  109. }
  110. }
  111. if (presenceData.details)
  112. presence.setActivity(presenceData)
  113. else presence.setActivity()
  114. })