presence.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import { Assets } from 'premid'
  2. const presence = new Presence({
  3. clientId: '768710795449335818',
  4. })
  5. const strings = presence.getStrings({
  6. play: 'general.playing',
  7. pause: 'general.paused',
  8. live: 'general.live',
  9. })
  10. /**
  11. * Get the current state text
  12. * @param {boolean} paused Is the video paused
  13. * @param {boolean} live Is it a live video
  14. */
  15. function getStateText(paused: boolean, live: boolean) {
  16. return live ? 'Live Broadcast' : paused ? 'Paused' : 'Watching'
  17. }
  18. let elapsed: number, oldUrl: string
  19. presence.on('UpdateData', async () => {
  20. const presenceData: PresenceData = {
  21. largeImageKey: 'https://cdn.rcd.gg/PreMiD/websites/S/Starz/assets/logo.png',
  22. }
  23. const { href, pathname: path } = window.location
  24. if (href !== oldUrl) {
  25. oldUrl = href
  26. elapsed = Math.floor(Date.now() / 1000)
  27. }
  28. const video = document.querySelector<HTMLVideoElement>(
  29. '.bitmovinplayer-container video',
  30. )
  31. if (video) {
  32. const title = document.querySelector('title')?.textContent
  33. const live = video.duration === Infinity
  34. presenceData.details = title
  35. presenceData.state = getStateText(video.paused, live)
  36. presenceData.smallImageKey = live
  37. ? Assets.Live
  38. : video.paused
  39. ? Assets.Pause
  40. : Assets.Play
  41. presenceData.smallImageText = live
  42. ? (await strings).live
  43. : video.paused
  44. ? (await strings).pause
  45. : (await strings).play
  46. if (!live) {
  47. [presenceData.startTimestamp, presenceData.endTimestamp] = presence.getTimestampsfromMedia(video)
  48. }
  49. else if (live) {
  50. delete presenceData.endTimestamp
  51. }
  52. if (video.paused) {
  53. delete presenceData.startTimestamp
  54. delete presenceData.endTimestamp
  55. }
  56. if (title)
  57. presence.setActivity(presenceData, !video.paused)
  58. }
  59. else {
  60. presenceData.details = 'Browsing...'
  61. if (path.includes('/series'))
  62. presenceData.details = 'Browsing Series'
  63. if (path.includes('/movies'))
  64. presenceData.details = 'Browsing Movies'
  65. if (path.includes('/playlist'))
  66. presenceData.details = 'Browsing Playlist'
  67. if (path.includes('/schedule'))
  68. presenceData.details = 'Browsing Schedule'
  69. if (path.includes('/search'))
  70. presenceData.details = 'Searching...'
  71. presenceData.startTimestamp = elapsed
  72. presence.setActivity(presenceData)
  73. }
  74. })