Files
Apollo/structs/Playlist.ts
T
2024-10-26 20:33:18 +08:00

41 lines
1.1 KiB
TypeScript

import youtube, { Playlist as YoutubePlaylist } from "youtube-sr";
import { config } from "../utils/config";
import { Song } from "./Song";
const pattern = /^.*(youtu.be\/|list=)([^#\&\?]*).*/i;
export class Playlist {
public data: YoutubePlaylist;
public videos: Song[];
public constructor(playlist: YoutubePlaylist) {
this.data = playlist;
this.videos = this.data.videos
.filter((video) => video.title != "Private video" && video.title != "Deleted video")
.slice(0, config.MAX_PLAYLIST_SIZE - 1)
.map((video) => {
return new Song({
title: video.title!,
url: `https://youtube.com/watch?v=${video.id}`,
duration: video.duration / 1000
});
});
}
public static async from(url: string = "", search: string = "") {
const urlValid = pattern.test(url);
let playlist;
if (urlValid) {
playlist = await youtube.getPlaylist(url);
} else {
const result = await youtube.searchOne(search, "playlist");
playlist = await youtube.getPlaylist(result.url!);
}
return new this(playlist);
}
}