discord-player-ytdlp
Version:
Discord Player extractor that utilizing yt-dlp
139 lines (114 loc) • 2.97 kB
text/typescript
import { BaseExtractor, SearchQueryType, ExtractorInfo, Track } from 'discord-player';
interface YtDlpExtractorOptions {
/**
* Path to the yt-dlp binary
*/
ytdlpPath: string;
/**
* Priority of this extractor (default: 100)
*/
priority?: number;
/**
* Enable YouTube search functionality (default: true)
*/
enableYouTubeSearch?: boolean;
/**
* Enable direct URL extraction (default: true)
*/
enableDirectUrls?: boolean;
/**
* Stream quality format for yt-dlp (default: 'bestaudio[ext=m4a]/bestaudio[ext=webm]/bestaudio')
*/
streamQuality?: string;
/**
* YouTubei.js options
*/
youtubeiOptions?: {
/**
* YouTube cookies for authentication
*/
cookies?: string | object;
/**
* YouTube client configuration
*/
client?: string;
};
}
interface TrackInfo {
id: string;
title: string;
author: string;
duration: string;
url: string;
thumbnail: string | null;
views?: string | number;
description?: string;
}
interface PlaylistInfo {
id: string;
title: string;
description: string;
thumbnail: string | null;
author: string;
url: string;
tracks: TrackInfo[];
}
declare class YtDlpExtractor extends BaseExtractor {
static identifier: string;
ytdlpPath: string;
priority: number;
enableYouTubeSearch: boolean;
enableDirectUrls: boolean;
streamQuality: string;
youtubeiOptions: {
cookies: string | object | null;
client: string | null;
};
protocols: string[];
constructor(context: any, options: YtDlpExtractorOptions);
/**
* Activate the extractor
*/
activate(): Promise<void>;
/**
* Deactivate the extractor
*/
deactivate(): Promise<void>;
/**
* Validate if this extractor can handle the query
*/
validate(query: string, type?: SearchQueryType): Promise<boolean>;
/**
* Handle the query and return track information
*/
handle(query: string, context: any): Promise<ExtractorInfo>;
/**
* Handle direct URL queries
*/
handleDirectUrl(url: string, context: any): Promise<ExtractorInfo>;
/**
* Handle YouTube playlist URLs
*/
handleYouTubePlaylist(url: string, context: any): Promise<ExtractorInfo>;
/**
* Handle search queries (YouTube only)
*/
handleSearchQuery(query: string, context: any): Promise<ExtractorInfo>;
/**
* Get streaming URL for a track
*/
stream(info: any): Promise<string>;
/**
* Get related tracks for autoplay functionality
*/
getRelatedTracks(track: Track, history: any): Promise<ExtractorInfo>;
/**
* Bridge functionality for other extractors
*/
bridge(track: Track, sourceExtractor: BaseExtractor): Promise<{ stream: string; type: string } | null>;
/**
* Create bridge query for track search
*/
createBridgeQuery(track: Track): string;
}
export { type PlaylistInfo, type TrackInfo, YtDlpExtractor, type YtDlpExtractorOptions, YtDlpExtractor as default };