/ src / utils / playerUtils.ts
playerUtils.ts
 1  import { AudioPlayer, AudioPlayerState, AudioPlayerStatus, createAudioResource, StreamType } from "@discordjs/voice";
 2  import { players, playlists } from "../cache/players";
 3  import { stationType } from "../typings/firebase";
 4  import { database } from "../cache/db";
 5  import { getStream } from "firebase/storage";
 6  import { getRandomStation } from "./functions";
 7  
 8  export const buildResource = (object: stationType<false>) => {
 9      const audioRef = database.audioRef(object.id);
10      
11      const audioStream = getStream(audioRef)
12      return createAudioResource(audioStream as any, {
13          inputType: StreamType.Arbitrary,
14          metadata: {
15              title: object.title
16          }
17      })
18  }
19  export const stateChange = (player: AudioPlayer, before: AudioPlayerState, after: AudioPlayerState, guildId: string) => {
20      const data = players.get(guildId);
21      const playlist = playlists.get(guildId) ?? [];
22  
23      if (!data) return;
24      if (before.status === AudioPlayerStatus.Playing && after.status === AudioPlayerStatus.Idle) {
25          if (!data.looping && playlist.length === 0) {
26              player.stop();
27  
28              data.connection.destroy();
29              players.delete(guildId)
30          } else if (playlist.length > 0) {
31              const nextTrack = playlist.shift()
32              playlists.set(guildId, playlist);
33  
34              const res = buildResource(nextTrack);
35  
36              data.currentTrack = nextTrack;
37              data.startedAt = Date.now()
38              player.play(res);
39  
40              players.set(guildId, data);
41          } else {
42              const nextTrack = getRandomStation();
43              const res = buildResource(nextTrack);
44  
45              data.startedAt = Date.now()
46              data.currentTrack = nextTrack;
47  
48              player.play(res);
49              players.set(guildId, data);
50          }
51      }
52  }