Flatlogic Bot ca3a32f23e V 4
2026-02-16 06:55:36 +00:00

382 lines
10 KiB
TypeScript

import { PlayableExtractorPlugin, DisTube, ResolveOptions, Playlist, Song } from 'distube';
import { SpawnOptionsWithoutStdio } from 'node:child_process';
interface YtDlpFlags {
help?: boolean;
version?: boolean;
update?: boolean;
ignoreErrors?: boolean;
abortOnError?: boolean;
dumpUserAgent?: boolean;
listExtractors?: boolean;
extractorDescriptions?: boolean;
forceGenericExtractor?: boolean;
defaultSearch?: string;
ignoreConfig?: boolean;
configLocation?: string;
flatPlaylist?: boolean;
liveFromStart?: boolean;
waitForVideo?: number;
markWatched?: boolean;
noColor?: boolean;
compatOptions?: string;
proxy?: string;
socketTimeout?: number;
sourceAddress?: string;
forceIpv4?: boolean;
forceIpv6?: boolean;
geoVerificationProxy?: string;
geoBypass?: boolean;
geoBypassCountry?: string;
geoBypassIpBlock?: string;
playlistStart?: number;
playlistEnd?: number | "last";
playlistItems?: number | string;
minFilesize?: string;
maxFilesize?: string;
date?: string;
datebefore?: string;
dateafter?: string;
matchFilter?: string;
noPlaylist?: boolean;
yesPlaylist?: boolean;
ageLimit?: number;
downloadArchive?: string;
maxDownloads?: number;
breakOnExisting?: boolean;
breakOnReject?: boolean;
breakPerInput?: boolean;
noBreakPerInput?: boolean;
skipPlaylistAfterErrors?: number;
concurrentFragments?: number;
limitRate?: string;
throttledRate?: string;
retries?: number | "infinite";
fileAccessRetries?: number | "infinite";
skipUnavailableFragments?: boolean;
abortOnUnavailableFragment?: boolean;
keepFragments?: boolean;
bufferSize?: string;
noResizeBuffer?: boolean;
httpChunkSize?: number | string;
playlistReverse?: boolean;
playlistRandom?: boolean;
xattrSetFilesize?: boolean;
hlsUseMpegts?: boolean;
noHlsUseMpegts?: boolean;
downloader?: string;
downloaderArgs?: string;
batchFile?: string;
paths?: string;
output?: string;
outputNaPlaceholder?: string;
restrictFilenames?: boolean;
windowsFilenames?: boolean;
trimFilenames?: boolean;
noOverwrites?: boolean;
continue?: boolean;
noContinue?: boolean;
noPart?: boolean;
noMtime?: boolean;
writeDescription?: boolean;
writeInfoJson?: boolean;
noWritePlaylistMetafiles?: boolean;
noCleanInfojson?: boolean;
writeComments?: boolean;
loadInfoJson?: string;
cookies?: string;
cookiesFromBrowser?: string;
cacheDir?: string;
noCacheDir?: boolean;
rmCacheDir?: boolean;
writeThumbnail?: boolean;
writeAllThumbnails?: boolean;
listThumbnails?: boolean;
writeLink?: boolean;
writeUrlLink?: boolean;
writeWeblocLink?: boolean;
writeDesktopLink?: boolean;
quiet?: boolean;
noWarnings?: boolean;
simulate?: boolean;
ignoreNoFormatsError?: boolean;
skipDownload?: boolean;
print?: string;
printToFile?: string;
dumpJson?: boolean;
dumpSingleJson?: boolean;
forceWriteArchive?: boolean;
newline?: boolean;
verbose?: boolean;
dumpPages?: boolean;
writePages?: boolean;
printTraffic?: boolean;
callHome?: boolean;
encoding?: string;
legacyServerConnect?: boolean;
noCheckCertificate?: boolean;
preferInsecure?: boolean;
userAgent?: string;
referer?: string;
addHeader?: string;
bidiWorkaround?: boolean;
sleepRequests?: number;
sleepInterval?: number;
maxSleepInterval?: number;
sleepSubtitles?: number;
format?: string;
formatSort?: string;
formatSortForce?: boolean;
videoMultistreams?: boolean;
audioMultistreams?: boolean;
preferFreeFormats?: boolean;
checkFormats?: boolean;
checkAllFormats?: boolean;
noCheckFormats?: boolean;
listFormats?: boolean;
mergeOutputFormat?: string;
writeSub?: boolean;
writeAutoSub?: boolean;
listSubs?: boolean;
subFormat?: string;
subLangs?: string;
username?: string;
password?: string;
twofactor?: string;
netrc?: boolean;
videoPassword?: string;
apMso?: string;
apUsername?: string;
apPassword?: string;
apListMso?: boolean;
extractAudio?: boolean;
audioFormat?: string;
audioQuality?: number;
remuxVideo?: string;
recodeVideo?: string;
postprocessorArgs?: string;
keepVideo?: boolean;
noPostOverwrites?: boolean;
embedSubs?: boolean;
embedThumbnail?: boolean;
embedMetadata?: boolean;
embedChapter?: boolean;
embedInfoJson?: boolean;
parseMetadata?: string;
replaceInMetadata?: string | string[];
xattrs?: boolean;
concatPlaylist?: string;
fixup?: string;
ffmpegLocation?: string;
exec?: string;
convertSubs?: string;
convertThumbnails?: string;
splitChapters?: boolean;
removeChapters?: string;
forceKeyframesAtCuts?: boolean;
usePostprocessor?: string;
sponsorblockMark?: string;
sponsorblockRemove?: string;
sponsorblockChapterTitle?: string;
noSponsorblock?: boolean;
sponsorblockApi?: string;
extractorRetries?: number | "infinite";
ignoreDynamicMpd?: boolean;
hlsSplitDiscontinuity?: boolean;
extractorArgs?: string;
[x: string]: any;
}
interface YtDlpFormat {
format_id: string;
format_note: string;
ext: string;
protocol: string;
acodec: string;
vcodec: string;
url: string;
width: number | null;
height: number | null;
fragments: any;
audio_ext: string;
video_ext: string;
format: string;
resolution: string;
http_headers: any;
asr: number;
filesize: number;
source_preference: number;
fps: null;
quality: number;
tbr: number;
language: string;
language_preference: number;
dynamic_range: null;
abr: number;
downloader_options: {
http_chunk_size: number;
};
container: string;
}
interface YtDlpThumbnail {
url: string;
preference: number;
id: string;
height?: number;
width?: number;
resolution?: string;
}
interface YtDlpCaption {
ext: string;
url: string;
name: string;
}
interface YtDlpVideo {
id: string;
title: string;
fulltitle: string;
url: string;
ext: string;
alt_title: string;
description: string;
display_id: string;
uploader: string;
license: string;
creator: string;
timestamp: number;
upload_date: string;
release_timestamp: number;
release_date: string;
modified_timestamp: number;
modified_date: string;
uploader_id: string;
channel: string;
channel_id: string;
channel_follower_count: number;
location: string;
duration: number;
duration_string: string;
view_count: number;
like_count: number;
dislike_count: number;
repost_count: number;
average_rating: number;
comment_count: number;
age_limit: number;
live_status: string;
is_live: boolean;
was_live: boolean;
playable_in_embed: string;
availability: string;
start_time: number;
end_time: number;
format: string;
format_id: string;
format_note: string;
width: number;
height: number;
resolution: string;
tbr: number;
abr: number;
acodec: string;
asr: number;
vbr: number;
fps: number;
dynamic_range: string;
vcodec: string;
container: string;
filesize: number;
filesize_approx: number;
protocol: string;
src: string;
extractor: string;
extractor_key: string;
epoch: number;
autonumber: number;
video_autonumber: number;
n_entries: number;
playlist_id: string;
playlist_title: string;
playlist: string;
playlist_count: number;
playlist_index: number;
playlist_autonumber: number;
playlist_uploader: string;
playlist_uploader_id: string;
webpage_url: string;
webpage_url_basename: string;
webpage_url_domain: string;
original_url: string;
formats: YtDlpFormat[];
thumbnails: YtDlpThumbnail[];
thumbnail: string;
uploader_url: string;
channel_url: string;
categories: string[];
tags: string[];
automatic_captions: Record<string, YtDlpCaption[]>;
subtitles: unknown;
chapters: any[];
requested_subtitles: unknown;
__has_drm: boolean;
requested_downloads: unknown[];
source_preference: number;
quality: number;
language: string;
language_preference: number;
downloader_options: {
http_chunk_size: number;
};
audio_ext: string;
video_ext: string;
http_headers: unknown;
_last_playlist_index: number;
requested_formats: unknown[];
stretched_ratio: unknown;
}
interface YtDlpPlaylist {
uploader: string;
uploader_id: string;
uploader_url: string;
thumbnails: YtDlpThumbnail[];
tags: string[];
view_count: number;
modified_date: string;
playlist_count: number;
channel_follower_count: number | null;
channel: string;
channel_id: string;
channel_url: string;
id: string;
title: string;
description: string;
entries: YtDlpVideo[];
original_url: string;
webpage_url: string;
webpage_url_basename: string;
webpage_url_domain: string;
extractor: string;
extractor_key: string;
epoch: number;
}
type YtDlpResponse = YtDlpVideo | YtDlpPlaylist;
interface YtDlpOptions {
update?: boolean;
}
declare const json: (url: string, flags?: YtDlpFlags, options?: SpawnOptionsWithoutStdio) => Promise<YtDlpResponse>;
declare const download: () => Promise<string>;
declare class YtDlpPlugin extends PlayableExtractorPlugin {
constructor({ update }?: YtDlpOptions);
init(distube: DisTube): void;
validate(): boolean;
resolve<T>(url: string, options: ResolveOptions<T>): Promise<YtDlpSong<T> | Playlist<T>>;
getStreamURL(song: Song): Promise<string>;
getRelatedSongs(): never[];
}
declare class YtDlpSong<T> extends Song<T> {
constructor(plugin: YtDlpPlugin, info: YtDlpVideo, options?: ResolveOptions<T>);
}
export { YtDlpPlugin, download, json };