ryanlink 1.0.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -37
- package/README.md +97 -370
- package/dist/index.cjs +4833 -0
- package/dist/index.d.cts +1703 -0
- package/dist/index.d.ts +1528 -1160
- package/dist/index.js +4262 -4197
- package/dist/index.mjs +4261 -4106
- package/package.json +87 -79
- package/dist/index.d.mts +0 -1335
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/src/audio/AudioFilters.ts +0 -316
- package/src/audio/AudioQueue.ts +0 -782
- package/src/audio/AudioTrack.ts +0 -242
- package/src/audio/QueueController.ts +0 -252
- package/src/audio/TrackCollection.ts +0 -138
- package/src/audio/index.ts +0 -9
- package/src/config/defaults.ts +0 -223
- package/src/config/endpoints.ts +0 -99
- package/src/config/index.ts +0 -9
- package/src/config/patterns.ts +0 -55
- package/src/config/presets.ts +0 -400
- package/src/config/symbols.ts +0 -31
- package/src/core/PluginSystem.ts +0 -50
- package/src/core/RyanlinkPlayer.ts +0 -403
- package/src/core/index.ts +0 -6
- package/src/extensions/AutoplayExtension.ts +0 -283
- package/src/extensions/FairPlayExtension.ts +0 -154
- package/src/extensions/LyricsExtension.ts +0 -187
- package/src/extensions/PersistenceExtension.ts +0 -182
- package/src/extensions/SponsorBlockExtension.ts +0 -81
- package/src/extensions/index.ts +0 -9
- package/src/index.ts +0 -19
- package/src/lavalink/ConnectionPool.ts +0 -326
- package/src/lavalink/HttpClient.ts +0 -316
- package/src/lavalink/LavalinkConnection.ts +0 -409
- package/src/lavalink/index.ts +0 -7
- package/src/metadata.ts +0 -88
- package/src/types/api/Rest.ts +0 -949
- package/src/types/api/Websocket.ts +0 -463
- package/src/types/api/index.ts +0 -6
- package/src/types/audio/FilterManager.ts +0 -29
- package/src/types/audio/Queue.ts +0 -4
- package/src/types/audio/QueueManager.ts +0 -30
- package/src/types/audio/index.ts +0 -7
- package/src/types/common.ts +0 -63
- package/src/types/core/Player.ts +0 -322
- package/src/types/core/index.ts +0 -5
- package/src/types/index.ts +0 -6
- package/src/types/lavalink/Node.ts +0 -173
- package/src/types/lavalink/NodeManager.ts +0 -34
- package/src/types/lavalink/REST.ts +0 -144
- package/src/types/lavalink/index.ts +0 -32
- package/src/types/voice/VoiceManager.ts +0 -176
- package/src/types/voice/index.ts +0 -5
- package/src/utils/helpers.ts +0 -169
- package/src/utils/index.ts +0 -6
- package/src/utils/validators.ts +0 -184
- package/src/voice/RegionSelector.ts +0 -184
- package/src/voice/VoiceConnection.ts +0 -458
- package/src/voice/VoiceSession.ts +0 -297
- package/src/voice/index.ts +0 -7
package/dist/index.d.ts
CHANGED
|
@@ -1,441 +1,655 @@
|
|
|
1
1
|
import { EventEmitter } from 'node:events';
|
|
2
|
+
import { ReadableStream } from 'node:stream/web';
|
|
2
3
|
|
|
3
|
-
declare
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
declare enum DebugEvents {
|
|
5
|
+
SetSponsorBlock = "SetSponsorBlock",
|
|
6
|
+
DeleteSponsorBlock = "DeleteSponsorBlock",
|
|
7
|
+
TrackEndReplaced = "TrackEndReplaced",
|
|
8
|
+
AutoplayExecution = "AutoplayExecution",
|
|
9
|
+
AutoplayNoSongsAdded = "AutoplayNoSongsAdded",
|
|
10
|
+
AutoplayThresholdSpamLimiter = "AutoplayThresholdSpamLimiter",
|
|
11
|
+
TriggerQueueEmptyInterval = "TriggerQueueEmptyInterval",
|
|
12
|
+
QueueEnded = "QueueEnded",
|
|
13
|
+
TrackStartNewSongsOnly = "TrackStartNewSongsOnly",
|
|
14
|
+
TrackStartNoTrack = "TrackStartNoTrack",
|
|
15
|
+
ResumingFetchingError = "ResumingFetchingError",
|
|
16
|
+
PlayerUpdateNoPlayer = "PlayerUpdateNoPlayer",
|
|
17
|
+
PlayerUpdateFilterFixApply = "PlayerUpdateFilterFixApply",
|
|
18
|
+
PlayerUpdateSuccess = "PlayerUpdateSuccess",
|
|
19
|
+
HeartBeatTriggered = "HeartBeatTriggered",
|
|
20
|
+
NoSocketOnDestroy = "NoSocketOnDestroy",
|
|
21
|
+
SocketCleanupError = "SocketCleanupError",
|
|
22
|
+
SocketTerminateHeartBeatTimeout = "SocketTerminateHeartBeatTimeout",
|
|
23
|
+
TryingConnectWhileConnected = "TryingConnectWhileConnected",
|
|
24
|
+
SearchNothingFound = "SearchNothingFound",
|
|
25
|
+
ValidatingBlacklistLinks = "ValidatingBlacklistLinks",
|
|
26
|
+
ValidatingWhitelistLinks = "ValidatingWhitelistLinks",
|
|
27
|
+
TrackErrorMaxTracksErroredPerTime = "TrackErrorMaxTracksErroredPerTime",
|
|
28
|
+
TrackStuckMaxTracksErroredPerTime = "TrackStuckMaxTracksErroredPerTime",
|
|
29
|
+
PlayerDestroyingSomewhereElse = "PlayerDestroyingSomewhereElse",
|
|
30
|
+
PlayerCreateNodeNotFound = "PlayerCreateNodeNotFound",
|
|
31
|
+
PlayerPlayQueueEmptyTimeoutClear = "PlayerPlayQueueEmptyTimeoutClear",
|
|
32
|
+
PlayerPlayWithTrackReplace = "PlayerPlayWithTrackReplace",
|
|
33
|
+
PlayerPlayUnresolvedTrack = "PlayerPlayUnresolvedTrack",
|
|
34
|
+
PlayerPlayUnresolvedTrackFailed = "PlayerPlayUnresolvedTrackFailed",
|
|
35
|
+
PlayerVolumeAsFilter = "PlayerVolumeAsFilter",
|
|
36
|
+
BandcampSearchLokalEngine = "BandcampSearchLokalEngine",
|
|
37
|
+
PlayerChangeNode = "PlayerChangeNode",
|
|
38
|
+
BuildTrackError = "BuildTrackError",
|
|
39
|
+
TransformRequesterFunctionFailed = "TransformRequesterFunctionFailed",
|
|
40
|
+
GetClosestTrackFailed = "GetClosestTrackFailed",
|
|
41
|
+
PlayerDeleteInsteadOfDestroy = "PlayerDeleteInsteadOfDestroy",
|
|
42
|
+
FailedToConnectToNodes = "FailedToConnectToNodes",
|
|
43
|
+
NoAudioDebug = "NoAudioDebug",
|
|
44
|
+
PlayerAutoReconnect = "PlayerAutoReconnect",
|
|
45
|
+
PlayerDestroyFail = "PlayerDestroyFail",
|
|
46
|
+
PlayerChangeNodeFailNoEligibleNode = "PlayerChangeNodeFailNoEligibleNode",
|
|
47
|
+
PlayerChangeNodeFail = "PlayerChangeNodeFail"
|
|
48
|
+
}
|
|
49
|
+
declare enum DestroyReasons {
|
|
50
|
+
QueueEmpty = "QueueEmpty",
|
|
51
|
+
NodeDestroy = "NodeDestroy",
|
|
52
|
+
NodeDeleted = "NodeDeleted",
|
|
53
|
+
NodeNoVoice = "NodeNoVoice",
|
|
54
|
+
NodeReconnectFail = "NodeReconnectFail",
|
|
55
|
+
Disconnected = "Disconnected",
|
|
56
|
+
PlayerReconnectFail = "PlayerReconnectFail",
|
|
57
|
+
PlayerChangeNodeFail = "PlayerChangeNodeFail",
|
|
58
|
+
PlayerChangeNodeFailNoEligibleNode = "PlayerChangeNodeFailNoEligibleNode",
|
|
59
|
+
ChannelDeleted = "ChannelDeleted",
|
|
60
|
+
DisconnectAllNodes = "DisconnectAllNodes",
|
|
61
|
+
ReconnectAllNodes = "ReconnectAllNodes",
|
|
62
|
+
TrackErrorMaxTracksErroredPerTime = "TrackErrorMaxTracksErroredPerTime",
|
|
63
|
+
TrackStuckMaxTracksErroredPerTime = "TrackStuckMaxTracksErroredPerTime"
|
|
64
|
+
}
|
|
65
|
+
declare enum DisconnectReasons {
|
|
66
|
+
Disconnected = "Disconnected",
|
|
67
|
+
DisconnectAllNodes = "DisconnectAllNodes"
|
|
68
|
+
}
|
|
69
|
+
declare const validSponsorBlocks: string[];
|
|
70
|
+
declare const audioOutputsData: Record<AudioOutputs, ChannelMixFilter>;
|
|
71
|
+
declare const EQList: {
|
|
72
|
+
BassboostEarrape: EQBand[];
|
|
73
|
+
BassboostHigh: EQBand[];
|
|
74
|
+
BassboostMedium: EQBand[];
|
|
75
|
+
BassboostLow: EQBand[];
|
|
76
|
+
BetterMusic: EQBand[];
|
|
77
|
+
Rock: EQBand[];
|
|
78
|
+
Classic: EQBand[];
|
|
79
|
+
Pop: EQBand[];
|
|
80
|
+
Electronic: EQBand[];
|
|
81
|
+
FullSound: EQBand[];
|
|
82
|
+
Gaming: EQBand[];
|
|
8
83
|
};
|
|
9
|
-
declare const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
84
|
+
declare const RecommendationsStrings: {
|
|
85
|
+
highCPULoad: (cpuLoad: number) => string;
|
|
86
|
+
highSystemLoad: (systemLoad: number) => string;
|
|
87
|
+
highMemoryUsage: (memoryUsagePercent: number) => string;
|
|
88
|
+
frameDeficit: (frameDeficit: number) => string;
|
|
89
|
+
highLatency: (ping: number) => string;
|
|
90
|
+
nodeRestart: string;
|
|
91
|
+
highPlayercount: (players: number) => string;
|
|
92
|
+
nodeOffline: string;
|
|
93
|
+
checkConnectivity: string;
|
|
15
94
|
};
|
|
16
|
-
declare const
|
|
17
|
-
readonly autoInit: true;
|
|
18
|
-
readonly autoSync: true;
|
|
19
|
-
readonly queryPrefix: "ytsearch";
|
|
20
|
-
readonly relocateQueues: true;
|
|
21
|
-
readonly fetchRelatedTracks: () => Promise<never[]>;
|
|
22
|
-
};
|
|
23
|
-
declare const DefaultQueueOptions: {
|
|
24
|
-
readonly volume: 100;
|
|
25
|
-
readonly repeatMode: "none";
|
|
26
|
-
readonly autoplay: false;
|
|
27
|
-
readonly paused: false;
|
|
28
|
-
};
|
|
29
|
-
declare const DefaultFilterOptions: {
|
|
30
|
-
readonly volume: 1;
|
|
31
|
-
readonly equalizer: {
|
|
32
|
-
band: number;
|
|
33
|
-
gain: number;
|
|
34
|
-
}[];
|
|
35
|
-
readonly karaoke: {
|
|
36
|
-
level?: number | undefined;
|
|
37
|
-
monoLevel?: number | undefined;
|
|
38
|
-
filterBand?: number | undefined;
|
|
39
|
-
filterWidth?: number | undefined;
|
|
40
|
-
} | null;
|
|
41
|
-
readonly timescale: {
|
|
42
|
-
speed?: number | undefined;
|
|
43
|
-
pitch?: number | undefined;
|
|
44
|
-
rate?: number | undefined;
|
|
45
|
-
} | null;
|
|
46
|
-
readonly tremolo: {
|
|
47
|
-
frequency?: number | undefined;
|
|
48
|
-
depth?: number | undefined;
|
|
49
|
-
} | null;
|
|
50
|
-
readonly vibrato: {
|
|
51
|
-
frequency?: number | undefined;
|
|
52
|
-
depth?: number | undefined;
|
|
53
|
-
} | null;
|
|
54
|
-
readonly rotation: {
|
|
55
|
-
rotationHz?: number | undefined;
|
|
56
|
-
} | null;
|
|
57
|
-
readonly distortion: {
|
|
58
|
-
sinOffset?: number | undefined;
|
|
59
|
-
sinScale?: number | undefined;
|
|
60
|
-
cosOffset?: number | undefined;
|
|
61
|
-
cosScale?: number | undefined;
|
|
62
|
-
tanOffset?: number | undefined;
|
|
63
|
-
tanScale?: number | undefined;
|
|
64
|
-
offset?: number | undefined;
|
|
65
|
-
scale?: number | undefined;
|
|
66
|
-
} | null;
|
|
67
|
-
readonly channelMix: {
|
|
68
|
-
leftToLeft?: number | undefined;
|
|
69
|
-
leftToRight?: number | undefined;
|
|
70
|
-
rightToLeft?: number | undefined;
|
|
71
|
-
rightToRight?: number | undefined;
|
|
72
|
-
} | null;
|
|
73
|
-
readonly lowPass: {
|
|
74
|
-
smoothing?: number | undefined;
|
|
75
|
-
} | null;
|
|
76
|
-
};
|
|
77
|
-
declare const HttpStatusCodes: Readonly<{
|
|
78
|
-
readonly OK: 200;
|
|
79
|
-
readonly CREATED: 201;
|
|
80
|
-
readonly NO_CONTENT: 204;
|
|
81
|
-
readonly BAD_REQUEST: 400;
|
|
82
|
-
readonly UNAUTHORIZED: 401;
|
|
83
|
-
readonly FORBIDDEN: 403;
|
|
84
|
-
readonly NOT_FOUND: 404;
|
|
85
|
-
readonly METHOD_NOT_ALLOWED: 405;
|
|
86
|
-
readonly TOO_MANY_REQUESTS: 429;
|
|
87
|
-
readonly INTERNAL_SERVER_ERROR: 500;
|
|
88
|
-
readonly BAD_GATEWAY: 502;
|
|
89
|
-
readonly SERVICE_UNAVAILABLE: 503;
|
|
90
|
-
readonly GATEWAY_TIMEOUT: 504;
|
|
91
|
-
}>;
|
|
92
|
-
declare const WebSocketCloseCodes: Readonly<{
|
|
93
|
-
readonly NORMAL: 1000;
|
|
94
|
-
readonly GOING_AWAY: 1001;
|
|
95
|
-
readonly PROTOCOL_ERROR: 1002;
|
|
96
|
-
readonly UNSUPPORTED_DATA: 1003;
|
|
97
|
-
readonly NO_STATUS_RECEIVED: 1005;
|
|
98
|
-
readonly ABNORMAL_CLOSURE: 1006;
|
|
99
|
-
readonly INVALID_FRAME_PAYLOAD_DATA: 1007;
|
|
100
|
-
readonly POLICY_VIOLATION: 1008;
|
|
101
|
-
readonly MESSAGE_TOO_BIG: 1009;
|
|
102
|
-
readonly INTERNAL_ERROR: 1011;
|
|
103
|
-
}>;
|
|
104
|
-
|
|
105
|
-
interface EQBand {
|
|
106
|
-
band: number;
|
|
107
|
-
gain: number;
|
|
108
|
-
}
|
|
109
|
-
declare const EQPresets: {
|
|
110
|
-
readonly BassboostEarrape: EQBand[];
|
|
111
|
-
readonly BassboostHigh: EQBand[];
|
|
112
|
-
readonly BassboostMedium: EQBand[];
|
|
113
|
-
readonly BassboostLow: EQBand[];
|
|
114
|
-
readonly HighQuality: EQBand[];
|
|
115
|
-
readonly BetterMusic: EQBand[];
|
|
116
|
-
readonly Rock: EQBand[];
|
|
117
|
-
readonly Classic: EQBand[];
|
|
118
|
-
readonly Pop: EQBand[];
|
|
119
|
-
readonly Electronic: EQBand[];
|
|
120
|
-
readonly FullSound: EQBand[];
|
|
121
|
-
readonly Gaming: EQBand[];
|
|
122
|
-
readonly Nightcore: EQBand[];
|
|
123
|
-
readonly Vaporwave: EQBand[];
|
|
124
|
-
readonly TrebleBass: EQBand[];
|
|
125
|
-
readonly Soft: EQBand[];
|
|
126
|
-
readonly TV: EQBand[];
|
|
127
|
-
readonly Radio: EQBand[];
|
|
128
|
-
readonly Normalization: EQBand[];
|
|
129
|
-
};
|
|
130
|
-
type EQPresetName = keyof typeof EQPresets;
|
|
131
|
-
declare function getEQPreset(name: EQPresetName): readonly EQBand[];
|
|
132
|
-
declare function getEQPresetNames(): EQPresetName[];
|
|
133
|
-
declare function isValidEQPreset(name: string): name is EQPresetName;
|
|
95
|
+
declare const NodeLinkExclusiveEvents: NodeLinkEventTypes[];
|
|
134
96
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
declare const InstagramRegex: RegExp;
|
|
158
|
-
declare const ShazamRegex: RegExp;
|
|
97
|
+
interface StoredQueue {
|
|
98
|
+
current: Track | null;
|
|
99
|
+
previous: Track[];
|
|
100
|
+
tracks: (Track | UnresolvedTrack)[];
|
|
101
|
+
}
|
|
102
|
+
interface QueueStoreManager {
|
|
103
|
+
get: (guildId: string) => Awaitable<StoredQueue | string | undefined>;
|
|
104
|
+
set: (guildId: string, value: StoredQueue | string) => Awaitable<void | boolean>;
|
|
105
|
+
delete: (guildId: string) => Awaitable<void | boolean>;
|
|
106
|
+
stringify: (value: StoredQueue | string) => Awaitable<StoredQueue | string>;
|
|
107
|
+
parse: (value: StoredQueue | string) => Awaitable<Partial<StoredQueue>>;
|
|
108
|
+
}
|
|
109
|
+
interface ManagerQueueOptions {
|
|
110
|
+
maxPreviousTracks?: number;
|
|
111
|
+
queueStore?: QueueStoreManager;
|
|
112
|
+
queueChangesWatcher?: QueueChangesWatcher;
|
|
113
|
+
}
|
|
114
|
+
interface QueueChangesWatcher {
|
|
115
|
+
tracksAdd: (guildId: string, tracks: (Track | UnresolvedTrack)[], position: number, oldStoredQueue: StoredQueue, newStoredQueue: StoredQueue) => void;
|
|
116
|
+
tracksRemoved: (guildId: string, tracks: (Track | UnresolvedTrack)[], position: number | number[], oldStoredQueue: StoredQueue, newStoredQueue: StoredQueue) => void;
|
|
117
|
+
shuffled: (guildId: string, oldStoredQueue: StoredQueue, newStoredQueue: StoredQueue) => void;
|
|
118
|
+
}
|
|
159
119
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
120
|
+
type DestroyReasonsType = keyof typeof DestroyReasons | string;
|
|
121
|
+
type DisconnectReasonsType = keyof typeof DisconnectReasons | string;
|
|
122
|
+
interface PlayerJson {
|
|
123
|
+
guildId: string;
|
|
124
|
+
options: PlayerOptions;
|
|
125
|
+
voiceChannelId: string;
|
|
126
|
+
textChannelId?: string;
|
|
127
|
+
position: number;
|
|
128
|
+
lastPosition: number;
|
|
129
|
+
lastPositionChange: number | null;
|
|
130
|
+
volume: number;
|
|
131
|
+
internalVolume: number;
|
|
132
|
+
repeatMode: RepeatMode;
|
|
133
|
+
paused: boolean;
|
|
134
|
+
playing: boolean;
|
|
135
|
+
createdTimeStamp?: number;
|
|
136
|
+
filters: FilterData;
|
|
137
|
+
ping: {
|
|
138
|
+
ws: number;
|
|
139
|
+
node: number;
|
|
140
|
+
};
|
|
141
|
+
equalizer: EQBand[];
|
|
142
|
+
nodeId?: string;
|
|
143
|
+
nodeSessionId?: string;
|
|
144
|
+
queue?: StoredQueue;
|
|
145
|
+
}
|
|
146
|
+
type RepeatMode = 'queue' | 'track' | 'off';
|
|
147
|
+
interface PlayerOptions {
|
|
148
|
+
guildId: string;
|
|
149
|
+
voiceChannelId: string;
|
|
150
|
+
textChannelId?: string;
|
|
151
|
+
volume?: number;
|
|
152
|
+
vcRegion?: string;
|
|
153
|
+
selfDeaf?: boolean;
|
|
154
|
+
selfMute?: boolean;
|
|
155
|
+
node?: RyanlinkNode | string;
|
|
156
|
+
instaFixFilter?: boolean;
|
|
157
|
+
autoPauseOnMute?: boolean;
|
|
158
|
+
applyVolumeAsFilter?: boolean;
|
|
159
|
+
customData?: anyObject;
|
|
160
|
+
}
|
|
161
|
+
type anyObject = {
|
|
162
|
+
[key: string | number]: string | number | null | anyObject;
|
|
170
163
|
};
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
declare const OnEventUpdateSymbol: unique symbol;
|
|
179
|
-
|
|
180
|
-
declare const noop: () => void;
|
|
181
|
-
declare const formatDuration: (ms: number) => string;
|
|
182
|
-
declare const parseDuration: (duration: string) => number;
|
|
183
|
-
declare const clamp: (value: number, min: number, max: number) => number;
|
|
184
|
-
declare const sleep: (ms: number) => Promise<void>;
|
|
185
|
-
declare const retry: <T>(fn: () => Promise<T>, maxAttempts?: number, baseDelay?: number) => Promise<T>;
|
|
186
|
-
declare const shuffle: <T>(array: T[]) => T[];
|
|
187
|
-
declare const randomElement: <T>(array: T[]) => T | undefined;
|
|
188
|
-
declare const chunk: <T>(array: T[], size: number) => T[][];
|
|
189
|
-
declare const unique: <T>(array: T[], key?: (item: T) => unknown) => T[];
|
|
190
|
-
|
|
191
|
-
declare class REST {
|
|
192
|
-
#private;
|
|
193
|
-
readonly userAgent: string;
|
|
194
|
-
constructor(options: RESTOptions);
|
|
195
|
-
get origin(): string;
|
|
196
|
-
get sessionId(): string | null;
|
|
197
|
-
set sessionId(value: string | null);
|
|
198
|
-
loadTracks(identifier: string): Promise<LoadResult>;
|
|
199
|
-
decodeTrack(encoded: string): Promise<APITrack>;
|
|
200
|
-
decodeTracks(encoded: string[]): Promise<APITrack[]>;
|
|
201
|
-
fetchPlayers(): Promise<APIPlayer[]>;
|
|
202
|
-
fetchPlayer(guildId: string): Promise<APIPlayer>;
|
|
203
|
-
updatePlayer(guildId: string, data: PlayerUpdateRequestBody, params?: PlayerUpdateQueryParams): Promise<APIPlayer>;
|
|
204
|
-
destroyPlayer(guildId: string): Promise<void>;
|
|
205
|
-
updateSession(data: SessionUpdateRequestBody): Promise<SessionUpdateResponseBody>;
|
|
206
|
-
fetchInfo(): Promise<LavalinkInfo>;
|
|
207
|
-
fetchStats(): Promise<NodeStats>;
|
|
208
|
-
fetchVersion(): Promise<string>;
|
|
209
|
-
fetchRoutePlannerStatus(): Promise<RoutePlannerStatus>;
|
|
210
|
-
freeRoutePlannerAddress(address: string): Promise<void>;
|
|
211
|
-
freeAllRoutePlannerAddresses(): Promise<void>;
|
|
212
|
-
setSponsorBlock(guildId: string, segments: string[]): Promise<void>;
|
|
213
|
-
getSponsorBlock(guildId: string): Promise<string[]>;
|
|
214
|
-
deleteSponsorBlock(guildId: string): Promise<void>;
|
|
164
|
+
interface BasePlayOptions {
|
|
165
|
+
position?: number;
|
|
166
|
+
endTime?: number;
|
|
167
|
+
paused?: boolean;
|
|
168
|
+
volume?: number;
|
|
169
|
+
filters?: Partial<AudioFilters>;
|
|
170
|
+
voice?: VoiceConnectionOptions;
|
|
215
171
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
172
|
+
interface PlayConfiguration extends BasePlayOptions {
|
|
173
|
+
track?: {
|
|
174
|
+
encoded?: Base64 | null;
|
|
175
|
+
identifier?: string;
|
|
176
|
+
userData?: anyObject;
|
|
177
|
+
requester?: unknown;
|
|
178
|
+
audioTrackId?: string;
|
|
179
|
+
};
|
|
180
|
+
nextTrack?: {
|
|
181
|
+
encoded?: Base64 | null;
|
|
182
|
+
userData?: anyObject;
|
|
183
|
+
};
|
|
228
184
|
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
}
|
|
235
|
-
declare const enum OPType {
|
|
236
|
-
Ready = "ready",
|
|
237
|
-
PlayerUpdate = "playerUpdate",
|
|
238
|
-
Stats = "stats",
|
|
239
|
-
Event = "event"
|
|
240
|
-
}
|
|
241
|
-
declare const enum EventType {
|
|
242
|
-
TrackStart = "TrackStartEvent",
|
|
243
|
-
TrackEnd = "TrackEndEvent",
|
|
244
|
-
TrackException = "TrackExceptionEvent",
|
|
245
|
-
TrackStuck = "TrackStuckEvent",
|
|
246
|
-
WebSocketClosed = "WebSocketClosedEvent"
|
|
247
|
-
}
|
|
248
|
-
declare const enum TrackEndReason {
|
|
249
|
-
Finished = "finished",
|
|
250
|
-
LoadFailed = "loadFailed",
|
|
251
|
-
Stopped = "stopped",
|
|
252
|
-
Replaced = "replaced",
|
|
253
|
-
Cleanup = "cleanup"
|
|
254
|
-
}
|
|
255
|
-
interface BaseMessagePayload {
|
|
256
|
-
op: OPType | string;
|
|
257
|
-
}
|
|
258
|
-
interface ReadyPayload extends BaseMessagePayload {
|
|
259
|
-
op: OPType.Ready;
|
|
260
|
-
resumed: boolean;
|
|
261
|
-
sessionId: string;
|
|
185
|
+
interface PlayOptions extends PlayConfiguration {
|
|
186
|
+
noReplace?: boolean;
|
|
187
|
+
clientTrack?: (Track | UnresolvedTrack) & {
|
|
188
|
+
audioTrackId?: string;
|
|
189
|
+
};
|
|
262
190
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
191
|
+
|
|
192
|
+
type CoreSourceNames = 'youtube' | 'youtubemusic' | 'soundcloud' | 'bandcamp' | 'twitch' | 'jiosaavn';
|
|
193
|
+
type AudioSourceNames = 'deezer' | 'spotify' | 'applemusic' | 'yandexmusic' | 'flowery-tts' | 'vkmusic' | 'tidal' | 'qobuz' | 'pandora' | CoreSourceNames;
|
|
194
|
+
interface AudioTrackInfo {
|
|
195
|
+
identifier: string;
|
|
196
|
+
title: string;
|
|
197
|
+
author: string;
|
|
198
|
+
length: number;
|
|
199
|
+
artworkUrl: string | null;
|
|
200
|
+
uri: string;
|
|
201
|
+
sourceName: AudioSourceNames;
|
|
202
|
+
isSeekable: boolean;
|
|
203
|
+
isStream: boolean;
|
|
204
|
+
isrc: string | null;
|
|
267
205
|
}
|
|
268
|
-
interface
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
206
|
+
interface TrackInfo {
|
|
207
|
+
identifier: string;
|
|
208
|
+
title: string;
|
|
209
|
+
author: string;
|
|
210
|
+
duration: number;
|
|
211
|
+
artworkUrl: string | null;
|
|
212
|
+
uri: string;
|
|
213
|
+
sourceName: AudioSourceNames;
|
|
214
|
+
isSeekable: boolean;
|
|
215
|
+
isStream: boolean;
|
|
216
|
+
isrc: string | null;
|
|
273
217
|
}
|
|
274
|
-
interface
|
|
275
|
-
|
|
218
|
+
interface PluginInfo {
|
|
219
|
+
type?: 'album' | 'playlist' | 'artist' | 'recommendations' | string;
|
|
220
|
+
albumName?: string;
|
|
221
|
+
albumUrl?: string;
|
|
222
|
+
albumArtUrl?: string;
|
|
223
|
+
artistUrl?: string;
|
|
224
|
+
artistArtworkUrl?: string;
|
|
225
|
+
previewUrl?: string;
|
|
226
|
+
isPreview?: boolean;
|
|
227
|
+
totalTracks?: number;
|
|
228
|
+
identifier?: string;
|
|
229
|
+
artworkUrl?: string;
|
|
230
|
+
author?: string;
|
|
231
|
+
url?: string;
|
|
232
|
+
uri?: string;
|
|
233
|
+
clientData?: {
|
|
234
|
+
previousTrack?: boolean;
|
|
235
|
+
[key: string]: any;
|
|
236
|
+
};
|
|
276
237
|
}
|
|
277
|
-
interface
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
cpu: NodeCPU;
|
|
283
|
-
frameStats: FrameStats | null;
|
|
238
|
+
interface AudioTrack {
|
|
239
|
+
encoded?: Base64;
|
|
240
|
+
info: AudioTrackInfo;
|
|
241
|
+
pluginInfo: Partial<PluginInfo>;
|
|
242
|
+
userData?: anyObject;
|
|
284
243
|
}
|
|
285
|
-
interface
|
|
286
|
-
free: number;
|
|
287
|
-
used: number;
|
|
288
|
-
allocated: number;
|
|
289
|
-
reservable: number;
|
|
244
|
+
interface TrackRequester {
|
|
290
245
|
}
|
|
291
|
-
interface
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
246
|
+
interface Track {
|
|
247
|
+
encoded?: Base64;
|
|
248
|
+
info: TrackInfo;
|
|
249
|
+
pluginInfo: Partial<PluginInfo>;
|
|
250
|
+
requester?: TrackRequester;
|
|
251
|
+
userData?: anyObject;
|
|
295
252
|
}
|
|
296
|
-
interface
|
|
297
|
-
|
|
298
|
-
nulled: number;
|
|
299
|
-
deficit: number;
|
|
253
|
+
interface UnresolvedTrackInfo extends Partial<TrackInfo> {
|
|
254
|
+
title: string;
|
|
300
255
|
}
|
|
301
|
-
interface
|
|
302
|
-
|
|
303
|
-
type: EventType | string;
|
|
304
|
-
guildId: string;
|
|
256
|
+
interface UnresolvedQuery extends UnresolvedTrackInfo {
|
|
257
|
+
encoded?: Base64;
|
|
305
258
|
}
|
|
306
|
-
interface
|
|
307
|
-
|
|
308
|
-
|
|
259
|
+
interface UnresolvedTrack {
|
|
260
|
+
resolve: (player: Player) => Promise<void>;
|
|
261
|
+
encoded?: Base64;
|
|
262
|
+
info: UnresolvedTrackInfo;
|
|
263
|
+
pluginInfo: Partial<PluginInfo>;
|
|
264
|
+
userData?: anyObject;
|
|
265
|
+
requester?: TrackRequester;
|
|
309
266
|
}
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
267
|
+
|
|
268
|
+
declare const AudioTrackSymbol: unique symbol;
|
|
269
|
+
declare const UnresolvedAudioTrackSymbol: unique symbol;
|
|
270
|
+
declare const AudioQueueSymbol: unique symbol;
|
|
271
|
+
declare const AudioNodeSymbol: unique symbol;
|
|
272
|
+
declare function parseConnectionUrl(connectionUrl: string): {
|
|
273
|
+
authorization: string;
|
|
274
|
+
nodeType: NodeTypes;
|
|
275
|
+
id: string;
|
|
276
|
+
host: string;
|
|
277
|
+
port: number;
|
|
278
|
+
};
|
|
279
|
+
declare class RyanlinkUtils {
|
|
280
|
+
RyanlinkManager: RyanlinkManager | undefined;
|
|
281
|
+
constructor(RyanlinkManager?: RyanlinkManager);
|
|
282
|
+
buildPluginInfo(data: any, clientData?: any): any;
|
|
283
|
+
buildTrack(data: AudioTrack | Track, requester: unknown): Track;
|
|
284
|
+
buildUnresolvedTrack(query: UnresolvedQuery | UnresolvedTrack, requester: unknown): UnresolvedTrack;
|
|
285
|
+
isNode(data: RyanlinkNode): boolean;
|
|
286
|
+
getTransformedRequester(requester: unknown): unknown;
|
|
287
|
+
isNodeOptions(data: NodeConfiguration): boolean;
|
|
288
|
+
isNotBrokenTrack(data: Track | UnresolvedTrack, minDuration?: number): data is Track;
|
|
289
|
+
isTrack(data: Track | UnresolvedTrack): data is Track;
|
|
290
|
+
isUnresolvedTrack(data: UnresolvedTrack | Track): data is UnresolvedTrack;
|
|
291
|
+
isUnresolvedTrackQuery(data: UnresolvedQuery): boolean;
|
|
292
|
+
getClosestTrack(data: UnresolvedTrack, player: Player): Promise<Track | undefined>;
|
|
293
|
+
validateQueryString(node: RyanlinkNode, queryString: string, sourceString?: SearchPlatform): void;
|
|
294
|
+
findSourceOfQuery(queryString: string): SearchPlatform;
|
|
295
|
+
extractSourceOfQuery<T extends {
|
|
296
|
+
query: string;
|
|
297
|
+
source?: string;
|
|
298
|
+
}>(searchQuery: T): T;
|
|
299
|
+
typedLowerCase<T extends unknown>(input: T): T;
|
|
300
|
+
transformQuery(query: SearchQuery): {
|
|
301
|
+
query: string;
|
|
302
|
+
extraQueryUrlParams: any;
|
|
303
|
+
source: SearchPlatform;
|
|
304
|
+
};
|
|
305
|
+
transformAudioSearchQuery(query: AudioSearchQuery): {
|
|
306
|
+
query: never;
|
|
307
|
+
types: any[];
|
|
308
|
+
extraQueryUrlParams: any;
|
|
309
|
+
source: SearchPlatform;
|
|
310
|
+
} | {
|
|
311
|
+
query: string;
|
|
312
|
+
types: string[];
|
|
313
|
+
source: "ytsearch" | "ytmsearch" | "scsearch" | "bcsearch" | "spsearch" | "sprec" | "amsearch" | "dzsearch" | "dzisrc" | "dzrec" | "ymsearch" | "ymrec" | "vksearch" | "vkrec" | "tdsearch" | "tdrec" | "qbsearch" | "qbisrc" | "qbrec" | "pdsearch" | "pdisrc" | "pdrec" | "ftts" | "speak" | "phsearch" | "pornhub" | "porn" | "tts" | "jssearch" | "jsrec" | "admsearch" | "admrec" | "shsearch" | "igsearch" | "blsearch" | "lfsearch" | "amzsearch" | "amzrec" | "gnsearch" | "gnrec" | "local" | "http" | "https" | "link" | "uri" | "youtube" | "yt" | "youtube music" | "youtubemusic" | "ytm" | "musicyoutube" | "music youtube" | "soundcloud" | "sc" | "am" | "apple music" | "applemusic" | "apple" | "musicapple" | "music apple" | "sp" | "spsuggestion" | "spotify" | "spotify.com" | "spotifycom" | "dz" | "deezer" | "yandex" | "yandex music" | "yandexmusic" | "vk" | "vk music" | "vkmusic" | "tidal" | "tidal music" | "qobuz" | "pandora" | "pd" | "pandora music" | "pandoramusic" | "flowerytts" | "flowery" | "flowery.tts" | "bandcamp" | "bc" | "js" | "jiosaavn" | "td" | "audiomack" | "adm" | "shazam" | "sh" | "instagram" | "ig" | "bilibili" | "bl" | "lastfm" | "last.fm" | "lf" | "amazon music" | "amazonmusic" | "amz" | "gaana" | "gn";
|
|
314
|
+
};
|
|
315
|
+
validateSourceString(node: RyanlinkNode, sourceString: SearchPlatform): void;
|
|
316
|
+
}
|
|
317
|
+
interface MiniMap<K, V> extends Map<K, V> {
|
|
318
|
+
constructor: MiniMapConstructor;
|
|
319
|
+
}
|
|
320
|
+
declare class MiniMap<K, V> extends Map<K, V> {
|
|
321
|
+
constructor(data?: [K, V][]);
|
|
322
|
+
filter<K2 extends K>(fn: (value: V, key: K, miniMap: this) => key is K2): MiniMap<K2, V>;
|
|
323
|
+
filter<V2 extends V>(fn: (value: V, key: K, miniMap: this) => value is V2): MiniMap<K, V2>;
|
|
324
|
+
filter(fn: (value: V, key: K, miniMap: this) => boolean): MiniMap<K, V>;
|
|
325
|
+
filter<This, K2 extends K>(fn: (this: This, value: V, key: K, miniMap: this) => key is K2, thisArg: This): MiniMap<K2, V>;
|
|
326
|
+
filter<This, V2 extends V>(fn: (this: This, value: V, key: K, miniMap: this) => value is V2, thisArg: This): MiniMap<K, V2>;
|
|
327
|
+
filter<This>(fn: (this: This, value: V, key: K, miniMap: this) => boolean, thisArg: This): MiniMap<K, V>;
|
|
328
|
+
toJSON(): [K, V][];
|
|
329
|
+
map<T>(fn: (value: V, key: K, miniMap: this) => T): T[];
|
|
330
|
+
map<This, T>(fn: (this: This, value: V, key: K, miniMap: this) => T, thisArg: This): T[];
|
|
331
|
+
}
|
|
332
|
+
declare function queueTrackEnd(player: Player, dontShiftQueue?: boolean): Promise<Track>;
|
|
333
|
+
declare function safeStringify(obj: any, padding?: number): string;
|
|
334
|
+
|
|
335
|
+
type Opaque<T, K> = T & {
|
|
336
|
+
__opaque__: K;
|
|
337
|
+
};
|
|
338
|
+
type IntegerNumber = Opaque<number, 'Int'>;
|
|
339
|
+
type FloatNumber = Opaque<number, 'Float'>;
|
|
340
|
+
type SourceSearchPlatformBase = 'spsearch' | 'sprec' | 'amsearch' | 'dzsearch' | 'dzisrc' | 'dzrec' | 'ymsearch' | 'ymrec' | 'vksearch' | 'vkrec' | 'tdsearch' | 'tdrec' | 'qbsearch' | 'qbisrc' | 'qbrec' | 'pdsearch' | 'pdisrc' | 'pdrec';
|
|
341
|
+
type SourceSearchPlatform = SourceSearchPlatformBase | 'ftts';
|
|
342
|
+
type JioSaavnSearchPlatform = 'jssearch' | 'jsrec';
|
|
343
|
+
type DuncteSearchPlatform = 'speak' | 'phsearch' | 'pornhub' | 'porn' | 'tts';
|
|
344
|
+
type ExtendedSearchPlatform = 'admsearch' | 'admrec' | 'shsearch' | 'igsearch' | 'blsearch' | 'lfsearch' | 'amzsearch' | 'amzrec' | 'gnsearch' | 'gnrec';
|
|
345
|
+
type AudioClientSearchPlatform = 'bcsearch';
|
|
346
|
+
type AudioClientSearchPlatformResolve = 'bandcamp' | 'bc';
|
|
347
|
+
type RyanlinkSearchPlatform = 'ytsearch' | 'ytmsearch' | 'scsearch' | 'bcsearch' | SourceSearchPlatform | DuncteSearchPlatform | JioSaavnSearchPlatform | ExtendedSearchPlatform | AudioClientSearchPlatform;
|
|
348
|
+
type ClientCustomSearchPlatformUtils = 'local' | 'http' | 'https' | 'link' | 'uri';
|
|
349
|
+
type ClientSearchPlatform = ClientCustomSearchPlatformUtils | 'youtube' | 'yt' | 'youtube music' | 'youtubemusic' | 'ytm' | 'musicyoutube' | 'music youtube' | 'soundcloud' | 'sc' | 'am' | 'apple music' | 'applemusic' | 'apple' | 'musicapple' | 'music apple' | 'sp' | 'spsuggestion' | 'spotify' | 'spotify.com' | 'spotifycom' | 'dz' | 'deezer' | 'yandex' | 'yandex music' | 'yandexmusic' | 'vk' | 'vk music' | 'vkmusic' | 'tidal' | 'tidal music' | 'qobuz' | 'pandora' | 'pd' | 'pandora music' | 'pandoramusic' | 'flowerytts' | 'flowery' | 'flowery.tts' | AudioClientSearchPlatformResolve | AudioClientSearchPlatform | 'js' | 'jiosaavn' | 'td' | 'tidal' | 'tdrec' | 'audiomack' | 'adm' | 'admsearch' | 'shazam' | 'sh' | 'shsearch' | 'instagram' | 'ig' | 'igsearch' | 'bilibili' | 'bl' | 'blsearch' | 'lastfm' | 'last.fm' | 'lf' | 'lfsearch' | 'amazon music' | 'amazonmusic' | 'amz' | 'amzsearch' | 'gaana' | 'gn' | 'gnsearch' | 'td' | 'tidal' | 'tdrec';
|
|
350
|
+
type SearchPlatform = RyanlinkSearchPlatform | ClientSearchPlatform;
|
|
351
|
+
type SourcesRegex = 'YoutubeRegex' | 'YoutubeMusicRegex' | 'SoundCloudRegex' | 'SoundCloudMobileRegex' | 'DeezerTrackRegex' | 'DeezerArtistRegex' | 'DeezerEpisodeRegex' | 'DeezerMixesRegex' | 'DeezerPageLinkRegex' | 'DeezerPlaylistRegex' | 'DeezerAlbumRegex' | 'AllDeezerRegex' | 'AllDeezerRegexWithoutPageLink' | 'SpotifySongRegex' | 'SpotifyPlaylistRegex' | 'SpotifyArtistRegex' | 'SpotifyEpisodeRegex' | 'SpotifyShowRegex' | 'SpotifyAlbumRegex' | 'AllSpotifyRegex' | 'mp3Url' | 'm3uUrl' | 'm3u8Url' | 'mp4Url' | 'm4aUrl' | 'wavUrl' | 'aacpUrl' | 'tiktok' | 'mixcloud' | 'musicYandex' | 'radiohost' | 'bandcamp' | 'jiosaavn' | 'appleMusic' | 'tidal' | 'PandoraTrackRegex' | 'PandoraAlbumRegex' | 'PandoraArtistRegex' | 'PandoraPlaylistRegex' | 'AllPandoraRegex' | 'TwitchTv' | 'vimeo';
|
|
352
|
+
interface PlaylistInfo {
|
|
353
|
+
name: string;
|
|
354
|
+
title: string;
|
|
355
|
+
author?: string;
|
|
356
|
+
thumbnail?: string;
|
|
357
|
+
uri?: string;
|
|
358
|
+
selectedTrack: Track | null;
|
|
359
|
+
duration: number;
|
|
314
360
|
}
|
|
315
|
-
interface
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
361
|
+
interface SearchResult {
|
|
362
|
+
loadType: LoadTypes;
|
|
363
|
+
exception: Exception | null;
|
|
364
|
+
pluginInfo: PluginInfo;
|
|
365
|
+
playlist: PlaylistInfo | null;
|
|
366
|
+
tracks: Track[];
|
|
319
367
|
}
|
|
368
|
+
interface UnresolvedSearchResult {
|
|
369
|
+
loadType: LoadTypes;
|
|
370
|
+
exception: Exception | null;
|
|
371
|
+
pluginInfo: PluginInfo;
|
|
372
|
+
playlist: PlaylistInfo | null;
|
|
373
|
+
tracks: UnresolvedTrack[];
|
|
374
|
+
}
|
|
375
|
+
interface MiniMapConstructor {
|
|
376
|
+
new (): MiniMap<unknown, unknown>;
|
|
377
|
+
new <K, V>(entries?: ReadonlyArray<readonly [K, V]> | null): MiniMap<K, V>;
|
|
378
|
+
new <K, V>(iterable: Iterable<readonly [K, V]>): MiniMap<K, V>;
|
|
379
|
+
readonly prototype: MiniMap<unknown, unknown>;
|
|
380
|
+
readonly [Symbol.species]: MiniMapConstructor;
|
|
381
|
+
}
|
|
382
|
+
type PlayerEvents = TrackStartEvent | TrackEndEvent | TrackStuckEvent | TrackExceptionEvent | WebSocketClosedEvent | SponsorBlockSegmentEvents | LyricsEvent;
|
|
383
|
+
type Severity = 'COMMON' | 'SUSPICIOUS' | 'FAULT';
|
|
320
384
|
interface Exception {
|
|
321
|
-
message: string | null;
|
|
322
385
|
severity: Severity;
|
|
386
|
+
error?: Error;
|
|
387
|
+
message: string;
|
|
323
388
|
cause: string;
|
|
324
389
|
causeStackTrace: string;
|
|
325
390
|
}
|
|
326
|
-
interface
|
|
327
|
-
|
|
328
|
-
|
|
391
|
+
interface PlayerEvent {
|
|
392
|
+
op: 'event';
|
|
393
|
+
type: PlayerEventType;
|
|
394
|
+
guildId: string;
|
|
395
|
+
}
|
|
396
|
+
interface TrackStartEvent extends PlayerEvent {
|
|
397
|
+
type: 'TrackStartEvent';
|
|
398
|
+
track: AudioTrack;
|
|
399
|
+
}
|
|
400
|
+
interface TrackEndEvent extends PlayerEvent {
|
|
401
|
+
type: 'TrackEndEvent';
|
|
402
|
+
track: AudioTrack;
|
|
403
|
+
reason: TrackEndReason;
|
|
404
|
+
}
|
|
405
|
+
interface TrackExceptionEvent extends PlayerEvent {
|
|
406
|
+
type: 'TrackExceptionEvent';
|
|
407
|
+
exception?: Exception;
|
|
408
|
+
track: AudioTrack;
|
|
409
|
+
error: string;
|
|
410
|
+
}
|
|
411
|
+
interface TrackStuckEvent extends PlayerEvent {
|
|
412
|
+
type: 'TrackStuckEvent';
|
|
329
413
|
thresholdMs: number;
|
|
414
|
+
track: AudioTrack;
|
|
330
415
|
}
|
|
331
|
-
interface
|
|
332
|
-
type:
|
|
416
|
+
interface WebSocketClosedEvent extends PlayerEvent {
|
|
417
|
+
type: 'WebSocketClosedEvent';
|
|
333
418
|
code: number;
|
|
334
|
-
reason: string;
|
|
335
419
|
byRemote: boolean;
|
|
420
|
+
reason: string;
|
|
336
421
|
}
|
|
337
|
-
type
|
|
338
|
-
type
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
}
|
|
347
|
-
declare const enum RoutePlannerType {
|
|
348
|
-
Rotating = "RotatingIpRoutePlanner",
|
|
349
|
-
Nano = "NanoIpRoutePlanner",
|
|
350
|
-
RotatingNano = "RotatingNanoIpRoutePlanner",
|
|
351
|
-
Balancing = "BalancingIpRoutePlanner"
|
|
352
|
-
}
|
|
353
|
-
declare const enum IPBlockType {
|
|
354
|
-
V4 = "Inet4Address",
|
|
355
|
-
V6 = "Inet6Address"
|
|
356
|
-
}
|
|
357
|
-
interface APITrack<UserData extends JsonObject = CommonUserData, PluginInfo extends JsonObject = CommonPluginInfo> {
|
|
358
|
-
encoded: string;
|
|
359
|
-
info: TrackInfo;
|
|
360
|
-
pluginInfo: PluginInfo;
|
|
361
|
-
userData: UserData;
|
|
422
|
+
type SponsorBlockSegmentEvents = SponsorBlockSegmentSkipped | SponsorBlockSegmentsLoaded | SponsorBlockChapterStarted | SponsorBlockChaptersLoaded;
|
|
423
|
+
type SponsorBlockSegmentEventType = 'SegmentSkipped' | 'SegmentsLoaded' | 'ChaptersLoaded' | 'ChapterStarted';
|
|
424
|
+
interface SponsorBlockSegmentsLoaded extends PlayerEvent {
|
|
425
|
+
type: 'SegmentsLoaded';
|
|
426
|
+
segments: {
|
|
427
|
+
category: string;
|
|
428
|
+
start: number;
|
|
429
|
+
end: number;
|
|
430
|
+
}[];
|
|
362
431
|
}
|
|
363
|
-
interface
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
title: string;
|
|
371
|
-
uri: string | null;
|
|
372
|
-
artworkUrl: string | null;
|
|
373
|
-
isrc: string | null;
|
|
374
|
-
sourceName: string;
|
|
432
|
+
interface SponsorBlockSegmentSkipped extends PlayerEvent {
|
|
433
|
+
type: 'SegmentSkipped';
|
|
434
|
+
segment: {
|
|
435
|
+
category: string;
|
|
436
|
+
start: number;
|
|
437
|
+
end: number;
|
|
438
|
+
};
|
|
375
439
|
}
|
|
376
|
-
interface
|
|
377
|
-
|
|
378
|
-
|
|
440
|
+
interface SponsorBlockChapterStarted extends PlayerEvent {
|
|
441
|
+
type: 'ChapterStarted';
|
|
442
|
+
chapter: {
|
|
443
|
+
name: string;
|
|
444
|
+
start: number;
|
|
445
|
+
end: number;
|
|
446
|
+
duration: number;
|
|
447
|
+
};
|
|
379
448
|
}
|
|
380
|
-
interface
|
|
381
|
-
|
|
382
|
-
|
|
449
|
+
interface SponsorBlockChaptersLoaded extends PlayerEvent {
|
|
450
|
+
type: 'ChaptersLoaded';
|
|
451
|
+
chapters: {
|
|
452
|
+
name: string;
|
|
453
|
+
start: number;
|
|
454
|
+
end: number;
|
|
455
|
+
duration: number;
|
|
456
|
+
}[];
|
|
383
457
|
}
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
458
|
+
type LyricsEvent = LyricsFoundEvent | LyricsNotFoundEvent | LyricsLineEvent;
|
|
459
|
+
type LyricsEventType = 'LyricsFoundEvent' | 'LyricsNotFoundEvent' | 'LyricsLineEvent';
|
|
460
|
+
interface LyricsFoundEvent extends PlayerEvent {
|
|
461
|
+
type: 'LyricsFoundEvent';
|
|
462
|
+
guildId: string;
|
|
463
|
+
lyrics: LyricsResult;
|
|
464
|
+
}
|
|
465
|
+
interface LyricsNotFoundEvent extends PlayerEvent {
|
|
466
|
+
type: 'LyricsNotFoundEvent';
|
|
467
|
+
guildId: string;
|
|
388
468
|
}
|
|
389
|
-
interface
|
|
390
|
-
|
|
391
|
-
|
|
469
|
+
interface LyricsLineEvent extends PlayerEvent {
|
|
470
|
+
type: 'LyricsLineEvent';
|
|
471
|
+
guildId: string;
|
|
472
|
+
lineIndex: number;
|
|
473
|
+
line: LyricsLine;
|
|
474
|
+
skipped: boolean;
|
|
475
|
+
}
|
|
476
|
+
type LoadTypes = 'track' | 'playlist' | 'search' | 'error' | 'empty';
|
|
477
|
+
type State = 'CONNECTED' | 'CONNECTING' | 'DISCONNECTED' | 'DISCONNECTING' | 'DESTROYING';
|
|
478
|
+
type PlayerEventType = 'TrackStartEvent' | 'TrackEndEvent' | 'TrackExceptionEvent' | 'TrackStuckEvent' | 'WebSocketClosedEvent' | SponsorBlockSegmentEventType | LyricsEventType;
|
|
479
|
+
type TrackEndReason = 'finished' | 'loadFailed' | 'stopped' | 'replaced' | 'cleanup';
|
|
480
|
+
interface InvalidRestRequest {
|
|
481
|
+
timestamp: number;
|
|
482
|
+
status: number;
|
|
483
|
+
error: string;
|
|
484
|
+
message?: string;
|
|
485
|
+
trace?: unknown;
|
|
486
|
+
path: string;
|
|
487
|
+
}
|
|
488
|
+
interface VoiceConnectionState {
|
|
489
|
+
token: string;
|
|
490
|
+
endpoint: string;
|
|
491
|
+
sessionId: string;
|
|
492
|
+
channelId?: string;
|
|
493
|
+
connected?: boolean;
|
|
494
|
+
ping?: number;
|
|
495
|
+
}
|
|
496
|
+
type VoiceConnectionOptions = Omit<VoiceConnectionState, 'connected' | 'ping'>;
|
|
497
|
+
interface FailingAddress {
|
|
498
|
+
failingAddress: string;
|
|
499
|
+
failingTimestamp: number;
|
|
500
|
+
failingTime: string;
|
|
501
|
+
}
|
|
502
|
+
type RoutePlannerTypes = 'RotatingIpRoutePlanner' | 'NanoIpRoutePlanner' | 'RotatingNanoIpRoutePlanner' | 'BalancingIpRoutePlanner';
|
|
503
|
+
interface RoutePlanner {
|
|
504
|
+
class?: RoutePlannerTypes;
|
|
505
|
+
details?: {
|
|
506
|
+
ipBlock: {
|
|
507
|
+
type: 'Inet4Address' | 'Inet6Address';
|
|
508
|
+
size: string;
|
|
509
|
+
};
|
|
510
|
+
failingAddresses: FailingAddress[];
|
|
511
|
+
rotateIndex?: string;
|
|
512
|
+
ipIndex?: string;
|
|
513
|
+
currentAddress?: string;
|
|
514
|
+
currentAddressIndex?: string;
|
|
515
|
+
blockIndex?: string;
|
|
516
|
+
};
|
|
392
517
|
}
|
|
393
|
-
interface
|
|
394
|
-
|
|
395
|
-
|
|
518
|
+
interface Session {
|
|
519
|
+
resuming: boolean;
|
|
520
|
+
timeout: number;
|
|
396
521
|
}
|
|
397
|
-
interface
|
|
398
|
-
|
|
399
|
-
|
|
522
|
+
interface GuildShardPayload {
|
|
523
|
+
op: number;
|
|
524
|
+
d: {
|
|
525
|
+
guild_id: string;
|
|
526
|
+
channel_id: string | null;
|
|
527
|
+
self_mute: boolean;
|
|
528
|
+
self_deaf: boolean;
|
|
529
|
+
};
|
|
400
530
|
}
|
|
401
|
-
interface
|
|
402
|
-
|
|
403
|
-
|
|
531
|
+
interface PlayerUpdateInfo {
|
|
532
|
+
guildId: string;
|
|
533
|
+
playerOptions: PlayConfiguration;
|
|
534
|
+
noReplace?: boolean;
|
|
404
535
|
}
|
|
405
|
-
|
|
406
|
-
interface APIPlayer {
|
|
536
|
+
interface AudioPlayerState {
|
|
407
537
|
guildId: string;
|
|
408
|
-
track
|
|
538
|
+
track?: AudioTrack;
|
|
409
539
|
volume: number;
|
|
410
540
|
paused: boolean;
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
541
|
+
voice: VoiceConnectionState;
|
|
542
|
+
filters: Partial<AudioFilters>;
|
|
543
|
+
state: {
|
|
544
|
+
time: number;
|
|
545
|
+
position: number;
|
|
546
|
+
connected: boolean;
|
|
547
|
+
ping: number;
|
|
548
|
+
};
|
|
549
|
+
}
|
|
550
|
+
interface ChannelDeletePacket {
|
|
551
|
+
t: 'CHANNEL_DELETE';
|
|
552
|
+
d: {
|
|
553
|
+
guild_id: string;
|
|
554
|
+
id: string;
|
|
555
|
+
};
|
|
414
556
|
}
|
|
415
|
-
interface
|
|
557
|
+
interface VoiceState {
|
|
558
|
+
op: 'voiceUpdate';
|
|
559
|
+
guildId: string;
|
|
560
|
+
event: VoiceServer;
|
|
561
|
+
sessionId?: string;
|
|
562
|
+
guild_id: string;
|
|
563
|
+
user_id: string;
|
|
564
|
+
session_id: string;
|
|
565
|
+
channel_id: string;
|
|
566
|
+
mute: boolean;
|
|
567
|
+
deaf: boolean;
|
|
568
|
+
self_deaf: boolean;
|
|
569
|
+
self_mute: boolean;
|
|
570
|
+
self_video: boolean;
|
|
571
|
+
self_stream: boolean;
|
|
572
|
+
request_to_speak_timestamp: boolean;
|
|
573
|
+
suppress: boolean;
|
|
574
|
+
}
|
|
575
|
+
type Base64 = string;
|
|
576
|
+
interface VoiceServer {
|
|
416
577
|
token: string;
|
|
578
|
+
guild_id: string;
|
|
417
579
|
endpoint: string;
|
|
418
|
-
|
|
419
|
-
channelId: string | null;
|
|
580
|
+
channel_id?: string;
|
|
420
581
|
}
|
|
421
|
-
interface
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
karaoke?: KaraokeFilter;
|
|
425
|
-
timescale?: TimescaleFilter;
|
|
426
|
-
tremolo?: TremoloFilter;
|
|
427
|
-
vibrato?: VibratoFilter;
|
|
428
|
-
rotation?: RotationFilter;
|
|
429
|
-
distortion?: DistortionFilter;
|
|
430
|
-
channelMix?: ChannelMixFilter;
|
|
431
|
-
lowPass?: LowPassFilter;
|
|
432
|
-
pluginFilters?: PluginFilters;
|
|
582
|
+
interface VoicePacket {
|
|
583
|
+
t?: 'VOICE_SERVER_UPDATE' | 'VOICE_STATE_UPDATE';
|
|
584
|
+
d: VoiceState | VoiceServer;
|
|
433
585
|
}
|
|
434
|
-
interface
|
|
435
|
-
|
|
436
|
-
|
|
586
|
+
interface NodeMessage extends NodeStats {
|
|
587
|
+
type: PlayerEventType;
|
|
588
|
+
op: 'stats' | 'playerUpdate' | 'event';
|
|
589
|
+
guildId: string;
|
|
590
|
+
}
|
|
591
|
+
type AudioSearchType = 'track' | 'album' | 'artist' | 'playlist' | 'text' | 'tracks' | 'albums' | 'artists' | 'playlists' | 'texts';
|
|
592
|
+
interface AudioSearchFilteredResponse {
|
|
593
|
+
info: PlaylistInfo;
|
|
594
|
+
pluginInfo: PluginInfo;
|
|
595
|
+
tracks: Track[];
|
|
596
|
+
}
|
|
597
|
+
interface AudioSearchResponse {
|
|
598
|
+
tracks: Track[];
|
|
599
|
+
albums: AudioSearchFilteredResponse[];
|
|
600
|
+
artists: AudioSearchFilteredResponse[];
|
|
601
|
+
playlists: AudioSearchFilteredResponse[];
|
|
602
|
+
texts: {
|
|
603
|
+
text: string;
|
|
604
|
+
pluginInfo: PluginInfo;
|
|
605
|
+
}[];
|
|
606
|
+
pluginInfo: PluginInfo;
|
|
607
|
+
}
|
|
608
|
+
type SearchQuery = {
|
|
609
|
+
query: string;
|
|
610
|
+
extraQueryUrlParams?: URLSearchParams;
|
|
611
|
+
source?: SearchPlatform;
|
|
612
|
+
} | string;
|
|
613
|
+
type AudioSearchQuery = {
|
|
614
|
+
query: string;
|
|
615
|
+
source: SourceSearchPlatformBase;
|
|
616
|
+
types?: AudioSearchType[];
|
|
617
|
+
};
|
|
618
|
+
type Awaitable<T> = Promise<T> | T;
|
|
619
|
+
|
|
620
|
+
type AudioOutputs = 'mono' | 'stereo' | 'left' | 'right';
|
|
621
|
+
interface PlayerFilters {
|
|
622
|
+
custom: boolean;
|
|
623
|
+
nightcore: boolean;
|
|
624
|
+
vaporwave: boolean;
|
|
625
|
+
rotation: boolean;
|
|
626
|
+
karaoke: boolean;
|
|
627
|
+
tremolo: boolean;
|
|
628
|
+
vibrato: boolean;
|
|
629
|
+
lowPass: boolean;
|
|
630
|
+
audioOutput: AudioOutputs;
|
|
631
|
+
nodeLinkEcho: boolean;
|
|
632
|
+
nodeLinkChorus: boolean;
|
|
633
|
+
nodeLinkCompressor: boolean;
|
|
634
|
+
nodeLinkHighPass: boolean;
|
|
635
|
+
nodeLinkPhaser: boolean;
|
|
636
|
+
nodeLinkSpatial: boolean;
|
|
637
|
+
volume: boolean;
|
|
638
|
+
coreFilterPlugin: {
|
|
639
|
+
echo: boolean;
|
|
640
|
+
reverb: boolean;
|
|
641
|
+
};
|
|
642
|
+
dspxPlugin: {
|
|
643
|
+
lowPass: boolean;
|
|
644
|
+
highPass: boolean;
|
|
645
|
+
normalization: boolean;
|
|
646
|
+
echo: boolean;
|
|
647
|
+
};
|
|
648
|
+
}
|
|
649
|
+
interface EQBand {
|
|
650
|
+
band: IntegerNumber | number;
|
|
651
|
+
gain: FloatNumber | number;
|
|
437
652
|
}
|
|
438
|
-
type EqualizerFilter = EqualizerBand[];
|
|
439
653
|
interface KaraokeFilter {
|
|
440
654
|
level?: number;
|
|
441
655
|
monoLevel?: number;
|
|
@@ -474,445 +688,589 @@ interface ChannelMixFilter {
|
|
|
474
688
|
rightToLeft?: number;
|
|
475
689
|
rightToRight?: number;
|
|
476
690
|
}
|
|
477
|
-
interface
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
noReplace?: boolean;
|
|
482
|
-
}
|
|
483
|
-
interface PlayerUpdateRequestBody {
|
|
484
|
-
track?: PlayerUpdateTrackData;
|
|
485
|
-
position?: number;
|
|
486
|
-
endTime?: number | null;
|
|
487
|
-
volume?: number;
|
|
488
|
-
paused?: boolean;
|
|
489
|
-
filters?: Filters;
|
|
490
|
-
voice?: NonNullableProp<APIVoiceState, "channelId">;
|
|
691
|
+
interface NodeLink_EchoFilter {
|
|
692
|
+
delay?: number;
|
|
693
|
+
feedback?: number;
|
|
694
|
+
mix?: number;
|
|
491
695
|
}
|
|
492
|
-
interface
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
696
|
+
interface NodeLink_ChorusFilter {
|
|
697
|
+
rate?: number;
|
|
698
|
+
depth?: number;
|
|
699
|
+
delay?: number;
|
|
700
|
+
mix?: number;
|
|
701
|
+
feedback?: number;
|
|
702
|
+
}
|
|
703
|
+
interface NodeLink_CompressorFilter {
|
|
704
|
+
threshold?: number;
|
|
705
|
+
ratio?: number;
|
|
706
|
+
attack?: number;
|
|
707
|
+
release?: number;
|
|
708
|
+
gain?: number;
|
|
709
|
+
}
|
|
710
|
+
interface NodeLink_HighPassFilter {
|
|
711
|
+
smoothing?: number;
|
|
500
712
|
}
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
filters: string[];
|
|
510
|
-
plugins: LavalinkPlugin[];
|
|
713
|
+
interface NodeLink_PhaserFilter {
|
|
714
|
+
stages?: number;
|
|
715
|
+
rate?: number;
|
|
716
|
+
depth?: number;
|
|
717
|
+
feedback?: number;
|
|
718
|
+
mix?: number;
|
|
719
|
+
minFrequency?: number;
|
|
720
|
+
maxFrequency?: number;
|
|
511
721
|
}
|
|
512
|
-
interface
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
minor: number;
|
|
516
|
-
patch: number;
|
|
517
|
-
preRelease: string | null;
|
|
518
|
-
build: string | null;
|
|
722
|
+
interface NodeLink_SpatialFilter {
|
|
723
|
+
depth?: number;
|
|
724
|
+
rate?: number;
|
|
519
725
|
}
|
|
520
|
-
interface
|
|
521
|
-
|
|
522
|
-
commit: string;
|
|
523
|
-
commitTime: number;
|
|
726
|
+
interface LowPassFilter {
|
|
727
|
+
smoothing?: number;
|
|
524
728
|
}
|
|
525
|
-
interface
|
|
526
|
-
|
|
527
|
-
|
|
729
|
+
interface FilterData {
|
|
730
|
+
volume?: number;
|
|
731
|
+
karaoke?: KaraokeFilter;
|
|
732
|
+
timescale?: TimescaleFilter;
|
|
733
|
+
tremolo?: TremoloFilter;
|
|
734
|
+
vibrato?: VibratoFilter;
|
|
735
|
+
rotation?: RotationFilter;
|
|
736
|
+
distortion?: DistortionFilter;
|
|
737
|
+
channelMix?: ChannelMixFilter;
|
|
738
|
+
lowPass?: LowPassFilter;
|
|
739
|
+
echo?: NodeLink_EchoFilter;
|
|
740
|
+
chorus?: NodeLink_ChorusFilter;
|
|
741
|
+
compressor?: NodeLink_CompressorFilter;
|
|
742
|
+
highPass?: NodeLink_HighPassFilter;
|
|
743
|
+
phaser?: NodeLink_PhaserFilter;
|
|
744
|
+
spatial?: NodeLink_SpatialFilter;
|
|
745
|
+
pluginFilters?: {
|
|
746
|
+
'filter-engine'?: {
|
|
747
|
+
echo?: {
|
|
748
|
+
delay?: number;
|
|
749
|
+
decay?: number;
|
|
750
|
+
};
|
|
751
|
+
reverb?: {
|
|
752
|
+
delays?: number[];
|
|
753
|
+
gains?: number[];
|
|
754
|
+
};
|
|
755
|
+
};
|
|
756
|
+
'high-pass'?: {
|
|
757
|
+
cutoffFrequency?: number;
|
|
758
|
+
boostFactor?: number;
|
|
759
|
+
};
|
|
760
|
+
'low-pass'?: {
|
|
761
|
+
cutoffFrequency?: number;
|
|
762
|
+
boostFactor?: number;
|
|
763
|
+
};
|
|
764
|
+
normalization?: {
|
|
765
|
+
maxAmplitude?: number;
|
|
766
|
+
adaptive?: boolean;
|
|
767
|
+
};
|
|
768
|
+
echo?: {
|
|
769
|
+
echoLength?: number;
|
|
770
|
+
decay?: number;
|
|
771
|
+
};
|
|
772
|
+
};
|
|
528
773
|
}
|
|
529
|
-
interface
|
|
530
|
-
|
|
531
|
-
size: string;
|
|
774
|
+
interface AudioFilters extends FilterData {
|
|
775
|
+
equalizer?: EQBand[];
|
|
532
776
|
}
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
777
|
+
|
|
778
|
+
type NodeLinkEventTypes = 'PlayerCreatedEvent' | 'PlayerDestroyedEvent' | 'PlayerConnectedEvent' | 'PlayerReconnectingEvent' | 'VolumeChangedEvent' | 'FiltersChangedEvent' | 'SeekEvent' | 'PauseEvent' | 'ConnectionStatusEvent' | 'MixStartedEvent' | 'MixEndedEvent' | 'LyricsFoundEvent' | 'LyricsLineEvent' | 'LyricsNotFoundEvent';
|
|
779
|
+
interface NodeLinkBaseEvent {
|
|
780
|
+
op: 'event';
|
|
781
|
+
type: NodeLinkEventTypes;
|
|
782
|
+
guildId: string;
|
|
537
783
|
}
|
|
538
|
-
interface
|
|
539
|
-
|
|
540
|
-
failingAddresses: FailingAddress[];
|
|
784
|
+
interface PlayerCreatedEvent extends NodeLinkBaseEvent {
|
|
785
|
+
type: 'PlayerCreatedEvent';
|
|
541
786
|
}
|
|
542
|
-
interface
|
|
543
|
-
|
|
544
|
-
ipIndex: string;
|
|
545
|
-
currentAddress: string;
|
|
787
|
+
interface PlayerDestroyedEvent extends NodeLinkBaseEvent {
|
|
788
|
+
type: 'PlayerDestroyedEvent';
|
|
546
789
|
}
|
|
547
|
-
interface
|
|
548
|
-
|
|
790
|
+
interface PlayerConnectedEvent extends NodeLinkBaseEvent {
|
|
791
|
+
type: 'PlayerConnectedEvent';
|
|
549
792
|
}
|
|
550
|
-
interface
|
|
551
|
-
|
|
552
|
-
blockIndex: string;
|
|
793
|
+
interface PlayerReconnectingEvent extends NodeLinkBaseEvent {
|
|
794
|
+
type: 'PlayerReconnectingEvent';
|
|
553
795
|
}
|
|
554
|
-
interface
|
|
796
|
+
interface VolumeChangedEvent extends NodeLinkBaseEvent {
|
|
797
|
+
type: 'VolumeChangedEvent';
|
|
798
|
+
volume: number;
|
|
555
799
|
}
|
|
556
|
-
interface
|
|
557
|
-
|
|
558
|
-
|
|
800
|
+
interface FiltersChangedEvent extends NodeLinkBaseEvent {
|
|
801
|
+
type: 'FiltersChangedEvent';
|
|
802
|
+
filters: AudioFilters;
|
|
559
803
|
}
|
|
560
|
-
interface
|
|
561
|
-
|
|
562
|
-
|
|
804
|
+
interface SeekEvent extends NodeLinkBaseEvent {
|
|
805
|
+
type: 'SeekEvent';
|
|
806
|
+
position: number;
|
|
563
807
|
}
|
|
564
|
-
interface
|
|
565
|
-
|
|
566
|
-
|
|
808
|
+
interface PauseEvent extends NodeLinkBaseEvent {
|
|
809
|
+
type: 'PauseEvent';
|
|
810
|
+
paused: boolean;
|
|
567
811
|
}
|
|
568
|
-
interface
|
|
569
|
-
|
|
570
|
-
|
|
812
|
+
interface ConnectionStatusEvent extends NodeLinkBaseEvent {
|
|
813
|
+
type: 'ConnectionStatusEvent';
|
|
814
|
+
connected: boolean;
|
|
571
815
|
}
|
|
572
|
-
interface
|
|
573
|
-
|
|
574
|
-
|
|
816
|
+
interface MixStartedEvent extends NodeLinkBaseEvent {
|
|
817
|
+
type: 'MixStartedEvent';
|
|
818
|
+
mixId: string;
|
|
819
|
+
track: AudioTrack;
|
|
820
|
+
volume: number;
|
|
575
821
|
}
|
|
576
|
-
|
|
822
|
+
interface MixEndedEvent extends NodeLinkBaseEvent {
|
|
823
|
+
type: 'MixEndedEvent';
|
|
824
|
+
mixId: string;
|
|
825
|
+
reason: 'FINISHED' | 'REMOVED' | 'ERROR' | 'MAIN_ENDED' | string;
|
|
826
|
+
}
|
|
827
|
+
type NodeLinkEventPayload<T extends NodeLinkEventTypes> = T extends 'PlayerCreatedEvent' ? PlayerCreatedEvent : T extends 'PlayerDestroyedEvent' ? PlayerDestroyedEvent : T extends 'PlayerConnectedEvent' ? PlayerConnectedEvent : T extends 'PlayerReconnectingEvent' ? PlayerReconnectingEvent : T extends 'VolumeChangedEvent' ? VolumeChangedEvent : T extends 'FiltersChangedEvent' ? FiltersChangedEvent : T extends 'SeekEvent' ? SeekEvent : T extends 'PauseEvent' ? PauseEvent : T extends 'ConnectionStatusEvent' ? ConnectionStatusEvent : T extends 'MixStartedEvent' ? MixStartedEvent : T extends 'MixEndedEvent' ? MixEndedEvent : never;
|
|
828
|
+
type HealthStatusThreshold = {
|
|
829
|
+
excellent: number;
|
|
830
|
+
good: number;
|
|
831
|
+
fair: number;
|
|
832
|
+
poor: number;
|
|
833
|
+
};
|
|
834
|
+
type HealthStatusThresholdOptions = {
|
|
835
|
+
cpu: Partial<HealthStatusThreshold>;
|
|
836
|
+
memory: Partial<HealthStatusThreshold>;
|
|
837
|
+
ping: Partial<HealthStatusThreshold>;
|
|
838
|
+
};
|
|
839
|
+
type NodeMetricSummary = {
|
|
840
|
+
cpuLoad: number;
|
|
841
|
+
systemLoad: number;
|
|
842
|
+
memoryUsage: number;
|
|
843
|
+
players: number;
|
|
844
|
+
playingPlayers: number;
|
|
845
|
+
uptime: number;
|
|
846
|
+
ping: number;
|
|
847
|
+
frameDeficit: number;
|
|
848
|
+
};
|
|
849
|
+
type HealthStatusObject = {
|
|
850
|
+
status: HealthStatusKeys;
|
|
851
|
+
performance: HealthPerformanceKeys;
|
|
852
|
+
isOverloaded: boolean;
|
|
853
|
+
needsRestart: boolean;
|
|
854
|
+
penaltyScore: number;
|
|
855
|
+
estimatedRemainingCapacity: number;
|
|
856
|
+
recommendations: string[];
|
|
857
|
+
metrics: {
|
|
858
|
+
cpuLoad: number;
|
|
859
|
+
memoryUsage: number;
|
|
860
|
+
players: number;
|
|
861
|
+
playingPlayers: number;
|
|
862
|
+
uptime: number;
|
|
863
|
+
ping: number;
|
|
864
|
+
frameDeficit: number;
|
|
865
|
+
};
|
|
866
|
+
};
|
|
867
|
+
type HealthPerformanceKeys = 'excellent' | 'good' | 'fair' | 'poor';
|
|
868
|
+
type HealthStatusKeys = 'healthy' | 'degraded' | 'critical' | 'offline';
|
|
869
|
+
type AddMixerLayerResponse = {
|
|
870
|
+
id: string;
|
|
871
|
+
track: AudioTrack;
|
|
872
|
+
volume: number;
|
|
873
|
+
};
|
|
874
|
+
type ListMixerLayersResponse = {
|
|
875
|
+
mixes: {
|
|
876
|
+
id: string;
|
|
877
|
+
track: AudioTrack;
|
|
878
|
+
volume: number;
|
|
879
|
+
position: number;
|
|
880
|
+
startTime: number;
|
|
881
|
+
}[];
|
|
882
|
+
};
|
|
883
|
+
type ConnectionMetricsResponse = {
|
|
884
|
+
status: string;
|
|
885
|
+
metrics: {
|
|
886
|
+
speed: {
|
|
887
|
+
bps: number;
|
|
888
|
+
kbps: number;
|
|
889
|
+
mbps: number;
|
|
890
|
+
};
|
|
891
|
+
downloadedBytes: number;
|
|
892
|
+
durationSeconds: number;
|
|
893
|
+
timestamp: number;
|
|
894
|
+
};
|
|
895
|
+
};
|
|
896
|
+
type NodeLinkLyricsSynced = {
|
|
897
|
+
loadType: string;
|
|
898
|
+
data: {
|
|
899
|
+
synced: true;
|
|
900
|
+
lang: string;
|
|
901
|
+
source: string;
|
|
902
|
+
lines: [
|
|
903
|
+
{
|
|
904
|
+
text: string;
|
|
905
|
+
time: number;
|
|
906
|
+
duration: number;
|
|
907
|
+
},
|
|
908
|
+
{
|
|
909
|
+
text: string;
|
|
910
|
+
time: number;
|
|
911
|
+
duration: number;
|
|
912
|
+
},
|
|
913
|
+
{
|
|
914
|
+
text: string;
|
|
915
|
+
time: number;
|
|
916
|
+
duration: number;
|
|
917
|
+
}
|
|
918
|
+
];
|
|
919
|
+
};
|
|
920
|
+
};
|
|
921
|
+
type NodeLinkLyricsPlain = {
|
|
922
|
+
loadType: string;
|
|
923
|
+
data: {
|
|
924
|
+
synced: false;
|
|
925
|
+
lang: string;
|
|
926
|
+
source: string;
|
|
927
|
+
lines: [
|
|
928
|
+
{
|
|
929
|
+
text: string;
|
|
930
|
+
time: null;
|
|
931
|
+
duration: null;
|
|
932
|
+
},
|
|
933
|
+
{
|
|
934
|
+
text: string;
|
|
935
|
+
time: null;
|
|
936
|
+
duration: null;
|
|
937
|
+
},
|
|
938
|
+
{
|
|
939
|
+
text: string;
|
|
940
|
+
time: null;
|
|
941
|
+
duration: null;
|
|
942
|
+
}
|
|
943
|
+
];
|
|
944
|
+
};
|
|
945
|
+
};
|
|
946
|
+
type NodeLinkLyrics = NodeLinkLyricsSynced | NodeLinkLyricsPlain;
|
|
947
|
+
type NodeLinkNoLyrics = {
|
|
948
|
+
loadType: string;
|
|
949
|
+
data: {};
|
|
950
|
+
};
|
|
951
|
+
type NodeLinkChapter = {
|
|
952
|
+
title: string;
|
|
953
|
+
startTime: number;
|
|
954
|
+
thumbnails: [
|
|
955
|
+
{
|
|
956
|
+
url: string;
|
|
957
|
+
width: number;
|
|
958
|
+
height: number;
|
|
959
|
+
}
|
|
960
|
+
];
|
|
961
|
+
duration: number;
|
|
962
|
+
endTime: number;
|
|
963
|
+
};
|
|
964
|
+
type DirectStreamResponse = {
|
|
965
|
+
url: string;
|
|
966
|
+
protocol: string;
|
|
967
|
+
format: string;
|
|
968
|
+
hlsUrl: string | null;
|
|
969
|
+
formats: {
|
|
970
|
+
itag: number;
|
|
971
|
+
mimeType: string;
|
|
972
|
+
qualityLabel: string;
|
|
973
|
+
bitrate: number;
|
|
974
|
+
}[];
|
|
975
|
+
};
|
|
976
|
+
type YoutubeOAuthResponse = {
|
|
977
|
+
access_token: string;
|
|
978
|
+
expires_in: number;
|
|
979
|
+
scope: string;
|
|
980
|
+
token_type: string;
|
|
981
|
+
};
|
|
982
|
+
type MeaningResponse = {
|
|
983
|
+
loadType: 'meaning';
|
|
984
|
+
data: {
|
|
985
|
+
title: string;
|
|
986
|
+
description: string;
|
|
987
|
+
paragraphs: string[];
|
|
988
|
+
url: string;
|
|
989
|
+
provider: string;
|
|
990
|
+
type: string;
|
|
991
|
+
};
|
|
992
|
+
};
|
|
577
993
|
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
994
|
+
type ModifyRequest = (options: RequestInit & {
|
|
995
|
+
path: string;
|
|
996
|
+
extraQueryUrlParams?: URLSearchParams;
|
|
997
|
+
}) => void;
|
|
998
|
+
type SponsorBlockSegment = 'sponsor' | 'selfpromo' | 'interaction' | 'intro' | 'outro' | 'preview' | 'music_offtopic' | 'filler';
|
|
999
|
+
interface NodeConfiguration {
|
|
1000
|
+
nodeType?: NodeTypes;
|
|
1001
|
+
host: string;
|
|
1002
|
+
port: number;
|
|
1003
|
+
authorization: string;
|
|
1004
|
+
secure?: boolean;
|
|
1005
|
+
sessionId?: string;
|
|
1006
|
+
id?: string;
|
|
1007
|
+
regions?: string[];
|
|
1008
|
+
retryAmount?: number;
|
|
1009
|
+
retryDelay?: number;
|
|
1010
|
+
retryTimespan?: number;
|
|
1011
|
+
requestSignalTimeoutMS?: number;
|
|
1012
|
+
closeOnError?: boolean;
|
|
1013
|
+
heartBeatInterval?: number;
|
|
1014
|
+
enablePingOnStatsCheck?: boolean;
|
|
1015
|
+
autoChecks?: {
|
|
1016
|
+
pluginValidations?: boolean;
|
|
1017
|
+
sourcesValidations?: boolean;
|
|
1018
|
+
};
|
|
600
1019
|
}
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
destroy: [node: LavalinkNode];
|
|
607
|
-
connect: [node: LavalinkNode];
|
|
608
|
-
ready: [node: LavalinkNode, resumed: boolean, sessionId: string];
|
|
609
|
-
disconnect: [node: LavalinkNode, reason: {
|
|
610
|
-
code: number;
|
|
611
|
-
reason: string;
|
|
612
|
-
}];
|
|
613
|
-
reconnecting: [node: LavalinkNode];
|
|
614
|
-
error: [node: LavalinkNode, error: Error];
|
|
615
|
-
raw: [node: LavalinkNode, payload: unknown];
|
|
616
|
-
nodeInfo: [node: LavalinkNode, info: unknown];
|
|
1020
|
+
interface MemoryStats {
|
|
1021
|
+
free: number;
|
|
1022
|
+
used: number;
|
|
1023
|
+
allocated: number;
|
|
1024
|
+
reservable: number;
|
|
617
1025
|
}
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
ProtocolError = 1002,
|
|
623
|
-
UnsupportedData = 1003,
|
|
624
|
-
NoStatusReceived = 1005,
|
|
625
|
-
AbnormalClosure = 1006,
|
|
626
|
-
InvalidFramePayloadData = 1007,
|
|
627
|
-
PolicyViolation = 1008,
|
|
628
|
-
MessageTooBig = 1009,
|
|
629
|
-
InternalError = 1011
|
|
630
|
-
}
|
|
631
|
-
declare class LavalinkNode extends EventEmitter<NodeEventMap> {
|
|
632
|
-
#private;
|
|
633
|
-
readonly name: string;
|
|
634
|
-
readonly rest: REST;
|
|
635
|
-
constructor(options: NodeOptions);
|
|
636
|
-
get clientId(): string;
|
|
637
|
-
get sessionId(): string | null;
|
|
638
|
-
get ping(): number | null;
|
|
639
|
-
get stats(): StatsPayload | null;
|
|
640
|
-
get state(): NodeState;
|
|
641
|
-
get connecting(): boolean;
|
|
642
|
-
get connected(): boolean;
|
|
643
|
-
get ready(): boolean;
|
|
644
|
-
get reconnecting(): boolean;
|
|
645
|
-
get disconnected(): boolean;
|
|
646
|
-
get reconnectLimit(): number;
|
|
647
|
-
get reconnectAttempts(): number;
|
|
648
|
-
connect(): Promise<boolean>;
|
|
649
|
-
disconnect(code?: number, reason?: string): Promise<void>;
|
|
650
|
-
setSponsorBlock(player: {
|
|
651
|
-
guildId: string;
|
|
652
|
-
}, segments: string[]): Promise<void>;
|
|
653
|
-
getSponsorBlock(player: {
|
|
654
|
-
guildId: string;
|
|
655
|
-
}): Promise<string[]>;
|
|
656
|
-
deleteSponsorBlock(player: {
|
|
657
|
-
guildId: string;
|
|
658
|
-
}): Promise<void>;
|
|
659
|
-
toString(): string;
|
|
1026
|
+
interface CPUStats {
|
|
1027
|
+
cores: number;
|
|
1028
|
+
systemLoad: number;
|
|
1029
|
+
audioLoad: number;
|
|
660
1030
|
}
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
1031
|
+
interface FrameStats {
|
|
1032
|
+
sent?: number;
|
|
1033
|
+
nulled?: number;
|
|
1034
|
+
deficit?: number;
|
|
1035
|
+
}
|
|
1036
|
+
interface BaseNodeStats {
|
|
667
1037
|
players: number;
|
|
668
1038
|
playingPlayers: number;
|
|
1039
|
+
uptime: number;
|
|
1040
|
+
memory: MemoryStats;
|
|
1041
|
+
cpu: CPUStats;
|
|
1042
|
+
frameStats: FrameStats;
|
|
1043
|
+
}
|
|
1044
|
+
interface NodeLinkConnectionMetrics {
|
|
1045
|
+
status: string;
|
|
1046
|
+
metrics: {
|
|
1047
|
+
speed: {
|
|
1048
|
+
bps: number;
|
|
1049
|
+
kbps: number;
|
|
1050
|
+
mbps: number;
|
|
1051
|
+
};
|
|
1052
|
+
downloadedBytes: number;
|
|
1053
|
+
durationSeconds: number;
|
|
1054
|
+
timestamp: number;
|
|
1055
|
+
};
|
|
669
1056
|
}
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
relevant(): LavalinkNode[];
|
|
683
|
-
get metrics(): NodeMetrics;
|
|
684
|
-
keys(): IterableIterator<string>;
|
|
685
|
-
values(): IterableIterator<LavalinkNode>;
|
|
686
|
-
entries(): IterableIterator<[string, LavalinkNode]>;
|
|
687
|
-
fetchInfo(name: string): Promise<LavalinkInfo>;
|
|
688
|
-
supports(type: "filter" | "source" | "plugin", value: string, nodeName?: string): boolean;
|
|
689
|
-
}
|
|
690
|
-
|
|
691
|
-
declare class VoiceRegion {
|
|
692
|
-
#private;
|
|
693
|
-
readonly id: string;
|
|
694
|
-
readonly player: Player;
|
|
695
|
-
constructor(player: Player, regionId: string);
|
|
696
|
-
inSync(): boolean;
|
|
697
|
-
forgetNode(name: string): boolean;
|
|
698
|
-
getAveragePing(name: string): number | null;
|
|
699
|
-
getAllPings(): Array<[string, number | null]>;
|
|
700
|
-
getRelevantNode(): LavalinkNode;
|
|
701
|
-
[OnPingUpdateSymbol](name: string, state: PlayerState): void;
|
|
702
|
-
clear(): void;
|
|
703
|
-
get nodeCount(): number;
|
|
704
|
-
toString(): string;
|
|
705
|
-
toJSON(): {
|
|
706
|
-
id: string;
|
|
707
|
-
inSync: boolean;
|
|
708
|
-
nodeCount: number;
|
|
709
|
-
pings: Array<{
|
|
710
|
-
node: string;
|
|
711
|
-
averagePing: number | null;
|
|
712
|
-
samples: number;
|
|
713
|
-
}>;
|
|
1057
|
+
interface NodeStats extends BaseNodeStats {
|
|
1058
|
+
frameStats: FrameStats;
|
|
1059
|
+
detailedStats?: {
|
|
1060
|
+
api: {
|
|
1061
|
+
requests: Record<string, number>;
|
|
1062
|
+
errors: unknown;
|
|
1063
|
+
};
|
|
1064
|
+
sources: Record<string, number>;
|
|
1065
|
+
playback: {
|
|
1066
|
+
events: Record<string, number>;
|
|
1067
|
+
};
|
|
1068
|
+
[key: string]: unknown;
|
|
714
1069
|
};
|
|
715
1070
|
}
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
get selfDeaf(): boolean;
|
|
727
|
-
get selfMute(): boolean;
|
|
728
|
-
get serverDeaf(): boolean;
|
|
729
|
-
get serverMute(): boolean;
|
|
730
|
-
get suppressed(): boolean;
|
|
731
|
-
get destroyed(): boolean;
|
|
732
|
-
get connected(): boolean;
|
|
733
|
-
get reconnecting(): boolean;
|
|
734
|
-
get disconnected(): boolean;
|
|
735
|
-
get changingNode(): boolean;
|
|
736
|
-
get sessionId(): string | null;
|
|
737
|
-
get token(): string | null;
|
|
738
|
-
get endpoint(): string | null;
|
|
739
|
-
get nodeSessionId(): string | null;
|
|
740
|
-
destroy(reason?: string): Promise<void>;
|
|
741
|
-
connect(channelId?: string): Promise<void>;
|
|
742
|
-
disconnect(): Promise<void>;
|
|
743
|
-
changeNode(name: string): Promise<void>;
|
|
744
|
-
toString(): string;
|
|
1071
|
+
interface NodeInfo {
|
|
1072
|
+
version: VersionObject;
|
|
1073
|
+
buildTime: number;
|
|
1074
|
+
git: GitObject;
|
|
1075
|
+
jvm: string;
|
|
1076
|
+
playerEngine: string;
|
|
1077
|
+
sourceManagers: string[];
|
|
1078
|
+
filters: string[];
|
|
1079
|
+
plugins: PluginObject[];
|
|
1080
|
+
isNodelink?: boolean;
|
|
745
1081
|
}
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
get(guildId: string): VoiceState | undefined;
|
|
754
|
-
has(guildId: string): boolean;
|
|
755
|
-
keys(): IterableIterator<string>;
|
|
756
|
-
values(): IterableIterator<VoiceState>;
|
|
757
|
-
entries(): IterableIterator<[string, VoiceState]>;
|
|
758
|
-
destroy(guildId: string, reason?: string): Promise<void>;
|
|
759
|
-
connect(guildId: string, voiceId: string, options?: ConnectOptions): Promise<VoiceState>;
|
|
760
|
-
disconnect(guildId: string): Promise<void>;
|
|
761
|
-
handleDispatch(payload: DiscordDispatchPayload): void;
|
|
762
|
-
[LookupSymbol](guildId: string): BotVoiceState | undefined;
|
|
763
|
-
[UpdateSymbol](guildId: string, partial: Partial<BotVoiceState>): void;
|
|
764
|
-
[OnVoiceCloseSymbol](guildId: string, code: number, reason: string, byRemote: boolean): void;
|
|
1082
|
+
interface VersionObject {
|
|
1083
|
+
semver: string;
|
|
1084
|
+
major: number;
|
|
1085
|
+
minor: number;
|
|
1086
|
+
patch: number;
|
|
1087
|
+
preRelease?: string;
|
|
1088
|
+
build?: string;
|
|
765
1089
|
}
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
author: string;
|
|
771
|
-
isLive: boolean;
|
|
772
|
-
isSeekable: boolean;
|
|
773
|
-
duration: number;
|
|
774
|
-
formattedDuration: string;
|
|
775
|
-
uri: string | null;
|
|
776
|
-
isrc: string | null;
|
|
777
|
-
url: string | null;
|
|
778
|
-
artworkUrl: string | null;
|
|
779
|
-
userData: UserData;
|
|
780
|
-
pluginInfo: PluginInfo;
|
|
781
|
-
encoded: string;
|
|
782
|
-
sourceName: string;
|
|
783
|
-
get identifier(): string;
|
|
784
|
-
get stream(): boolean;
|
|
785
|
-
get seekable(): boolean;
|
|
786
|
-
get durationFormatted(): string;
|
|
787
|
-
get source(): string;
|
|
788
|
-
get thumbnail(): string | null;
|
|
789
|
-
get info(): {
|
|
790
|
-
identifier: string;
|
|
791
|
-
position: number;
|
|
792
|
-
title: string;
|
|
793
|
-
author: string;
|
|
794
|
-
length: number;
|
|
795
|
-
isStream: boolean;
|
|
796
|
-
isSeekable: boolean;
|
|
797
|
-
uri: string | null;
|
|
798
|
-
isrc: string | null;
|
|
799
|
-
artworkUrl: string | null;
|
|
800
|
-
sourceName: string;
|
|
801
|
-
};
|
|
802
|
-
constructor(data: APITrack<UserData, PluginInfo>);
|
|
803
|
-
toString(): string;
|
|
804
|
-
toJSON(): Record<string, unknown>;
|
|
805
|
-
clone(): Track<UserData, PluginInfo>;
|
|
1090
|
+
interface GitObject {
|
|
1091
|
+
branch: string;
|
|
1092
|
+
commit: string;
|
|
1093
|
+
commitTime: string;
|
|
806
1094
|
}
|
|
807
|
-
|
|
808
|
-
declare class Playlist<PluginInfo extends JsonObject = CommonPluginInfo> {
|
|
1095
|
+
interface PluginObject {
|
|
809
1096
|
name: string;
|
|
810
|
-
|
|
811
|
-
tracks: Track[];
|
|
812
|
-
pluginInfo: PluginInfo;
|
|
813
|
-
duration: number;
|
|
814
|
-
formattedDuration: string;
|
|
815
|
-
constructor(data: APIPlaylist<PluginInfo>);
|
|
816
|
-
get selected(): Track | null;
|
|
817
|
-
getSelectedTrack(): Track | undefined;
|
|
818
|
-
get length(): number;
|
|
819
|
-
get trackCount(): number;
|
|
820
|
-
get durationFormatted(): string;
|
|
821
|
-
toString(): string;
|
|
822
|
-
toJSON(): Record<string, unknown>;
|
|
1097
|
+
version: string;
|
|
823
1098
|
}
|
|
1099
|
+
interface LyricsResult {
|
|
1100
|
+
sourceName: string;
|
|
1101
|
+
provider: string;
|
|
1102
|
+
text: string | null;
|
|
1103
|
+
lines: LyricsLine[];
|
|
1104
|
+
plugin: PluginInfo;
|
|
1105
|
+
}
|
|
1106
|
+
interface LyricsLine {
|
|
1107
|
+
timestamp: number;
|
|
1108
|
+
duration: number | null;
|
|
1109
|
+
line: string;
|
|
1110
|
+
plugin: PluginInfo;
|
|
1111
|
+
}
|
|
1112
|
+
type RyanlinkNodeIdentifier = string;
|
|
1113
|
+
interface NodeManagerEvents {
|
|
1114
|
+
create: (node: RyanlinkNode) => void;
|
|
1115
|
+
destroy: (node: RyanlinkNode, destroyReason?: DestroyReasonsType) => void;
|
|
1116
|
+
connect: (node: RyanlinkNode) => void;
|
|
1117
|
+
reconnecting: (node: RyanlinkNode) => void;
|
|
1118
|
+
reconnectinprogress: (node: RyanlinkNode) => void;
|
|
1119
|
+
disconnect: (node: RyanlinkNode, reason: {
|
|
1120
|
+
code?: number;
|
|
1121
|
+
reason?: string;
|
|
1122
|
+
}) => void;
|
|
1123
|
+
error: (node: RyanlinkNode, error: Error, payload?: unknown) => void;
|
|
1124
|
+
raw: (node: RyanlinkNode, payload: unknown) => void;
|
|
1125
|
+
resumed: (node: RyanlinkNode, payload: {
|
|
1126
|
+
resumed: true;
|
|
1127
|
+
sessionId: string;
|
|
1128
|
+
op: 'ready';
|
|
1129
|
+
}, players: AudioPlayerState[] | InvalidRestRequest) => void;
|
|
1130
|
+
nodeLinkEvent: (...args: {
|
|
1131
|
+
[K in NodeLinkEventTypes]: [node: RyanlinkNode, event: K, player: Player, track: Track | null, payload: NodeLinkEventPayload<K>];
|
|
1132
|
+
}[NodeLinkEventTypes]) => void;
|
|
1133
|
+
}
|
|
1134
|
+
declare enum ReconnectionState {
|
|
1135
|
+
IDLE = "IDLE",
|
|
1136
|
+
RECONNECTING = "RECONNECTING",
|
|
1137
|
+
PENDING = "PENDING",
|
|
1138
|
+
DESTROYING = "DESTROYING"
|
|
1139
|
+
}
|
|
1140
|
+
type NodeTypes = 'Core' | 'NodeLink';
|
|
824
1141
|
|
|
825
1142
|
declare class FilterManager {
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
1143
|
+
static EQList: {
|
|
1144
|
+
BassboostEarrape: EQBand[];
|
|
1145
|
+
BassboostHigh: EQBand[];
|
|
1146
|
+
BassboostMedium: EQBand[];
|
|
1147
|
+
BassboostLow: EQBand[];
|
|
1148
|
+
BetterMusic: EQBand[];
|
|
1149
|
+
Rock: EQBand[];
|
|
1150
|
+
Classic: EQBand[];
|
|
1151
|
+
Pop: EQBand[];
|
|
1152
|
+
Electronic: EQBand[];
|
|
1153
|
+
FullSound: EQBand[];
|
|
1154
|
+
Gaming: EQBand[];
|
|
1155
|
+
};
|
|
1156
|
+
equalizerBands: EQBand[];
|
|
1157
|
+
filterUpdatedState: boolean;
|
|
1158
|
+
filters: PlayerFilters;
|
|
1159
|
+
data: FilterData;
|
|
1160
|
+
player: Player;
|
|
1161
|
+
constructor(player: Player);
|
|
1162
|
+
applyPlayerFilters(): Promise<void>;
|
|
1163
|
+
private privateNot0;
|
|
1164
|
+
private getAudioFilters;
|
|
1165
|
+
checkFiltersState(oldFilterTimescale?: Partial<TimescaleFilter>): boolean;
|
|
1166
|
+
resetFilters(): Promise<FilterManager>;
|
|
1167
|
+
setVolume(volume: number): Promise<this>;
|
|
1168
|
+
setAudioOutput(type: AudioOutputs): Promise<FilterManager>;
|
|
1169
|
+
setSpeed(speed?: number): Promise<FilterManager>;
|
|
1170
|
+
setPitch(pitch?: number): Promise<FilterManager>;
|
|
1171
|
+
setRate(rate?: number): Promise<FilterManager>;
|
|
1172
|
+
toggleRotation(rotationHz?: number): Promise<FilterManager>;
|
|
1173
|
+
toggleVibrato(frequency?: number, depth?: number): Promise<FilterManager>;
|
|
1174
|
+
toggleTremolo(frequency?: number, depth?: number): Promise<FilterManager>;
|
|
1175
|
+
toggleLowPass(smoothing?: number): Promise<FilterManager>;
|
|
1176
|
+
dspxPlugin: {
|
|
1177
|
+
toggleLowPass: (boostFactor?: number, cutoffFrequency?: number) => Promise<FilterManager>;
|
|
1178
|
+
toggleHighPass: (boostFactor?: number, cutoffFrequency?: number) => Promise<FilterManager>;
|
|
1179
|
+
toggleNormalization: (maxAmplitude?: number, adaptive?: boolean) => Promise<FilterManager>;
|
|
1180
|
+
toggleEcho: (decay?: number, echoLength?: number) => Promise<FilterManager>;
|
|
1181
|
+
};
|
|
1182
|
+
coreFilterPlugin: {
|
|
1183
|
+
toggleEcho: (delay?: number, decay?: number) => Promise<FilterManager>;
|
|
1184
|
+
toggleReverb: (delays?: number[], gains?: number[]) => Promise<FilterManager>;
|
|
1185
|
+
};
|
|
1186
|
+
toggleNightcore(speed?: number, pitch?: number, rate?: number): Promise<FilterManager>;
|
|
1187
|
+
toggleVaporwave(speed?: number, pitch?: number, rate?: number): Promise<FilterManager>;
|
|
1188
|
+
toggleKaraoke(level?: number, monoLevel?: number, filterBand?: number, filterWidth?: number): Promise<FilterManager>;
|
|
1189
|
+
isCustomFilterActive(): boolean;
|
|
1190
|
+
setEQPreset(preset: keyof typeof EQList): Promise<this>;
|
|
1191
|
+
setEQ(bands: EQBand | EQBand[]): Promise<this>;
|
|
1192
|
+
clearEQ(): Promise<this>;
|
|
859
1193
|
}
|
|
860
1194
|
|
|
861
|
-
declare class
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
get
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
1195
|
+
declare class QueueSaver {
|
|
1196
|
+
private _;
|
|
1197
|
+
options: {
|
|
1198
|
+
maxPreviousTracks: number;
|
|
1199
|
+
};
|
|
1200
|
+
constructor(options: ManagerQueueOptions);
|
|
1201
|
+
get(guildId: string): Promise<Partial<StoredQueue>>;
|
|
1202
|
+
delete(guildId: string): Promise<boolean | void>;
|
|
1203
|
+
set(guildId: string, valueToStringify: StoredQueue): Promise<boolean | void>;
|
|
1204
|
+
sync(guildId: string): Promise<Partial<StoredQueue>>;
|
|
1205
|
+
}
|
|
1206
|
+
declare class DefaultQueueStore implements QueueStoreManager {
|
|
1207
|
+
private data;
|
|
1208
|
+
constructor();
|
|
1209
|
+
get(guildId: string): StoredQueue | undefined;
|
|
1210
|
+
set(guildId: string, valueToStringify: any): boolean;
|
|
1211
|
+
delete(guildId: string): boolean;
|
|
1212
|
+
stringify(value: StoredQueue | string): StoredQueue | string;
|
|
1213
|
+
parse(value: StoredQueue | string): Partial<StoredQueue>;
|
|
1214
|
+
}
|
|
1215
|
+
declare class Queue {
|
|
1216
|
+
readonly tracks: (Track | UnresolvedTrack)[];
|
|
1217
|
+
readonly previous: Track[];
|
|
1218
|
+
current: Track | null;
|
|
1219
|
+
options: {
|
|
1220
|
+
maxPreviousTracks: number;
|
|
1221
|
+
};
|
|
1222
|
+
private readonly guildId;
|
|
1223
|
+
private readonly QueueSaver;
|
|
1224
|
+
private managerUtils;
|
|
1225
|
+
private queueChanges;
|
|
1226
|
+
constructor(guildId: string, data?: Partial<StoredQueue>, QueueSaver?: QueueSaver, queueOptions?: ManagerQueueOptions);
|
|
1227
|
+
utils: {
|
|
1228
|
+
save: () => Promise<boolean | void>;
|
|
1229
|
+
sync: (override?: boolean, dontSyncCurrent?: boolean) => Promise<void>;
|
|
1230
|
+
destroy: () => Promise<boolean | void>;
|
|
1231
|
+
toJSON: () => StoredQueue;
|
|
1232
|
+
totalDuration: () => number;
|
|
1233
|
+
filterTracks: (predicate: ((track: Track | UnresolvedTrack, index: number) => boolean) | {
|
|
1234
|
+
title?: string;
|
|
1235
|
+
author?: string;
|
|
1236
|
+
duration?: number | {
|
|
1237
|
+
min?: number;
|
|
1238
|
+
max?: number;
|
|
1239
|
+
};
|
|
1240
|
+
uri?: string;
|
|
1241
|
+
identifier?: string;
|
|
1242
|
+
sourceName?: string;
|
|
1243
|
+
isStream?: boolean;
|
|
1244
|
+
isSeekable?: boolean;
|
|
1245
|
+
}) => Array<{
|
|
1246
|
+
track: Track | UnresolvedTrack;
|
|
1247
|
+
index: number;
|
|
1248
|
+
}>;
|
|
1249
|
+
findTrack: (predicate: ((track: Track | UnresolvedTrack, index: number) => boolean) | {
|
|
1250
|
+
title?: string;
|
|
1251
|
+
author?: string;
|
|
1252
|
+
duration?: number | {
|
|
1253
|
+
min?: number;
|
|
1254
|
+
max?: number;
|
|
1255
|
+
};
|
|
1256
|
+
uri?: string;
|
|
1257
|
+
identifier?: string;
|
|
1258
|
+
sourceName?: string;
|
|
1259
|
+
isStream?: boolean;
|
|
1260
|
+
isSeekable?: boolean;
|
|
1261
|
+
}) => {
|
|
1262
|
+
track: Track | UnresolvedTrack;
|
|
1263
|
+
index: number;
|
|
1264
|
+
} | null;
|
|
1265
|
+
};
|
|
1266
|
+
shuffle(): Promise<number>;
|
|
1267
|
+
add(TrackOrTracks: Track | UnresolvedTrack | (Track | UnresolvedTrack)[], index?: number): any;
|
|
1268
|
+
splice(index: number, amount: number, TrackOrTracks?: Track | UnresolvedTrack | (Track | UnresolvedTrack)[]): any;
|
|
1269
|
+
remove<T extends Track | UnresolvedTrack | number | Track[] | UnresolvedTrack[] | number[] | (number | Track | UnresolvedTrack)[]>(removeQueryTrack: T): Promise<{
|
|
1270
|
+
removed: (Track | UnresolvedTrack)[];
|
|
1271
|
+
} | null>;
|
|
1272
|
+
shiftPrevious(): Promise<Track>;
|
|
1273
|
+
filter(predicate: ((track: Track | UnresolvedTrack, index: number) => boolean) | {
|
|
916
1274
|
title?: string;
|
|
917
1275
|
author?: string;
|
|
918
1276
|
duration?: number | {
|
|
@@ -925,10 +1283,10 @@ declare class Queue<Context extends Record<string, unknown> = QueueContext> {
|
|
|
925
1283
|
isStream?: boolean;
|
|
926
1284
|
isSeekable?: boolean;
|
|
927
1285
|
}): Array<{
|
|
928
|
-
track: Track;
|
|
1286
|
+
track: Track | UnresolvedTrack;
|
|
929
1287
|
index: number;
|
|
930
1288
|
}>;
|
|
931
|
-
|
|
1289
|
+
find(predicate: ((track: Track | UnresolvedTrack, index: number) => boolean) | {
|
|
932
1290
|
title?: string;
|
|
933
1291
|
author?: string;
|
|
934
1292
|
duration?: number | {
|
|
@@ -941,395 +1299,405 @@ declare class Queue<Context extends Record<string, unknown> = QueueContext> {
|
|
|
941
1299
|
isStream?: boolean;
|
|
942
1300
|
isSeekable?: boolean;
|
|
943
1301
|
}): {
|
|
944
|
-
track: Track;
|
|
1302
|
+
track: Track | UnresolvedTrack;
|
|
945
1303
|
index: number;
|
|
946
1304
|
} | null;
|
|
947
|
-
|
|
948
|
-
|
|
1305
|
+
sortBy(sortBy: 'duration' | 'title' | 'author' | ((a: Track | UnresolvedTrack, b: Track | UnresolvedTrack) => number), order?: 'asc' | 'desc'): Promise<this>;
|
|
1306
|
+
toSortedBy(sortBy: 'duration' | 'title' | 'author' | ((a: Track | UnresolvedTrack, b: Track | UnresolvedTrack) => number), order?: 'asc' | 'desc'): (Track | UnresolvedTrack)[];
|
|
1307
|
+
getTracks(start: number, end?: number): (Track | UnresolvedTrack)[];
|
|
949
1308
|
}
|
|
950
1309
|
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
[LookupSymbol](guildId: string): APIPlayer | undefined;
|
|
966
|
-
[OnStateUpdateSymbol](guildId: string, state: PlayerState): void;
|
|
967
|
-
[OnEventUpdateSymbol](guildId: string, event: EventPayload): void;
|
|
968
|
-
}
|
|
969
|
-
|
|
970
|
-
type ConstrainEventMap<T> = {
|
|
971
|
-
[K in keyof T]: T[K] extends unknown[] ? T[K] : never;
|
|
972
|
-
};
|
|
973
|
-
declare class Player<Context extends Record<string, unknown> = QueueContext, Plugins extends PlayerPlugin[] = []> extends EventEmitter<ConstrainEventMap<PlayerEventMap & MergeUnionType<PluginEventMap<Plugins[number]>>>> {
|
|
974
|
-
#private;
|
|
975
|
-
readonly options: PlayerInstanceOptions;
|
|
976
|
-
readonly plugins: PluginRecord<Plugins>;
|
|
977
|
-
readonly nodes: NodeManager;
|
|
978
|
-
readonly voices: VoiceManager;
|
|
979
|
-
readonly queues: QueueManager<Context>;
|
|
980
|
-
constructor(options: PlayerOptions<Plugins>);
|
|
981
|
-
get ready(): boolean;
|
|
982
|
-
get clientId(): string | null;
|
|
983
|
-
init(clientId: string): Promise<void>;
|
|
984
|
-
getQueue(guildId: string): Queue<Context> | undefined;
|
|
985
|
-
createQueue(options: CreateQueueOptions<Context>): Promise<Queue<Context>>;
|
|
986
|
-
destroyQueue(guildId: string, reason?: string): Promise<void>;
|
|
987
|
-
search(query: string, options?: SearchOptions): Promise<SearchResult>;
|
|
988
|
-
play(source: string | Parameters<Queue["add"]>[0], options: PlayOptions<Context>): Promise<Queue<Context>>;
|
|
989
|
-
jump(guildId: string, index: number): Promise<Track>;
|
|
990
|
-
pause(guildId: string): Promise<boolean>;
|
|
991
|
-
previous(guildId: string): Promise<Track | null>;
|
|
992
|
-
resume(guildId: string): Promise<boolean>;
|
|
993
|
-
seek(guildId: string, ms: number): Promise<number>;
|
|
994
|
-
setAutoplay(guildId: string, autoplay?: boolean): boolean;
|
|
995
|
-
setRepeatMode(guildId: string, repeatMode: RepeatMode): RepeatMode;
|
|
996
|
-
setVolume(guildId: string, volume: number): Promise<number>;
|
|
997
|
-
shuffle(guildId: string, includePrevious?: boolean): Queue<Context>;
|
|
998
|
-
next(guildId: string): Promise<Track | null>;
|
|
999
|
-
stop(guildId: string): Promise<void>;
|
|
1000
|
-
}
|
|
1001
|
-
|
|
1002
|
-
declare abstract class PlayerPlugin<EventMap extends Record<string, unknown[]> = Record<string, unknown[]>> {
|
|
1003
|
-
protected _: EventMap;
|
|
1004
|
-
abstract readonly name: string;
|
|
1005
|
-
abstract init(player: Player): void;
|
|
1006
|
-
}
|
|
1007
|
-
|
|
1008
|
-
type EmptyObject = Record<never, never>;
|
|
1009
|
-
type JsonLike = string | number | null | boolean | JsonArray | JsonObject;
|
|
1010
|
-
type JsonArray = JsonLike[];
|
|
1011
|
-
type JsonObject = {
|
|
1012
|
-
[x: string]: JsonLike;
|
|
1013
|
-
};
|
|
1014
|
-
type RequiredProp<T, P extends keyof T> = Omit<T, P> & Required<Pick<T, P>>;
|
|
1015
|
-
type NonNullableProp<T, P extends keyof T> = {
|
|
1016
|
-
[K in keyof T]: K extends P ? NonNullable<T[K]> : T[K];
|
|
1017
|
-
};
|
|
1018
|
-
type MergeUnionType<U> = (U extends unknown ? (i: U) => void : never) extends (i: infer I) => void ? I : never;
|
|
1019
|
-
type PluginEventMap<Plugin> = Plugin extends PlayerPlugin<infer EventMap> ? EventMap : Record<string, unknown>;
|
|
1020
|
-
interface QueueContext extends Record<string, unknown> {
|
|
1021
|
-
}
|
|
1022
|
-
interface CommonUserData extends Record<string, JsonLike> {
|
|
1023
|
-
}
|
|
1024
|
-
interface CommonPluginInfo extends Record<string, JsonLike> {
|
|
1025
|
-
}
|
|
1026
|
-
interface CommonPluginFilters extends Record<string, JsonLike> {
|
|
1027
|
-
}
|
|
1028
|
-
|
|
1029
|
-
type FilterData = Filters;
|
|
1030
|
-
type FilterKey = keyof Filters;
|
|
1031
|
-
|
|
1032
|
-
type RepeatMode = "none" | "track" | "queue";
|
|
1033
|
-
|
|
1034
|
-
interface CreateQueueOptions<Context extends Record<string, unknown> = QueueContext> extends Pick<PlayerUpdateRequestBody, "filters" | "volume"> {
|
|
1310
|
+
interface AutoplayConfig {
|
|
1311
|
+
enabled?: boolean;
|
|
1312
|
+
defaultSource?: 'ytsearch' | 'ytmsearch' | 'scsearch' | 'spsearch' | 'amsearch';
|
|
1313
|
+
limit?: number;
|
|
1314
|
+
minDuration?: number;
|
|
1315
|
+
maxDuration?: number;
|
|
1316
|
+
excludeKeywords?: string[];
|
|
1317
|
+
}
|
|
1318
|
+
declare class Player {
|
|
1319
|
+
filterManager: FilterManager;
|
|
1320
|
+
RyanlinkManager: RyanlinkManager;
|
|
1321
|
+
options: PlayerOptions;
|
|
1322
|
+
node: RyanlinkNode | NodeLinkNode;
|
|
1323
|
+
queue: Queue;
|
|
1035
1324
|
guildId: string;
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
}
|
|
1045
|
-
interface BotReadyPayload extends CommonDispatchPayloadInfo {
|
|
1046
|
-
t: "READY";
|
|
1047
|
-
d: {
|
|
1048
|
-
user: {
|
|
1049
|
-
id: string;
|
|
1050
|
-
};
|
|
1325
|
+
voiceChannelId: string | null;
|
|
1326
|
+
textChannelId: string | null;
|
|
1327
|
+
playing: boolean;
|
|
1328
|
+
paused: boolean;
|
|
1329
|
+
repeatMode: RepeatMode;
|
|
1330
|
+
ping: {
|
|
1331
|
+
node: number;
|
|
1332
|
+
ws: number;
|
|
1051
1333
|
};
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1334
|
+
volume: number;
|
|
1335
|
+
internalVolume: number;
|
|
1336
|
+
get position(): number;
|
|
1337
|
+
lastPositionChange: number | null;
|
|
1338
|
+
lastPosition: number;
|
|
1339
|
+
lastSavedPosition: number;
|
|
1340
|
+
createdTimeStamp: number;
|
|
1341
|
+
connected: boolean | undefined;
|
|
1342
|
+
voice: VoiceConnectionOptions;
|
|
1343
|
+
voiceState: {
|
|
1344
|
+
selfDeaf: boolean;
|
|
1345
|
+
selfMute: boolean;
|
|
1346
|
+
serverDeaf: boolean;
|
|
1347
|
+
serverMute: boolean;
|
|
1064
1348
|
suppress: boolean;
|
|
1065
1349
|
};
|
|
1350
|
+
private readonly data;
|
|
1351
|
+
private dispatchDebug;
|
|
1352
|
+
constructor(options: PlayerOptions, RyanlinkManager: RyanlinkManager, dontEmitPlayerCreateEvent?: boolean);
|
|
1353
|
+
set(key: string, value: unknown): this;
|
|
1354
|
+
get<T>(key: string): T;
|
|
1355
|
+
setData(key: string, value: unknown): this;
|
|
1356
|
+
getData<T>(key: string): T;
|
|
1357
|
+
deleteData(key: string): this;
|
|
1358
|
+
clearData(): this;
|
|
1359
|
+
getAllData(): Record<string, unknown>;
|
|
1360
|
+
play(options?: Partial<PlayOptions>): any;
|
|
1361
|
+
oldJSON: PlayerJson;
|
|
1362
|
+
syncState(): void;
|
|
1363
|
+
setVolume(volume: number, ignoreVolumeDecrementer?: boolean): Promise<this>;
|
|
1364
|
+
audioSearch(query: AudioSearchQuery, requestUser: unknown, throwOnEmpty?: boolean): Promise<AudioSearchResponse | SearchResult>;
|
|
1365
|
+
setSponsorBlock(segments?: SponsorBlockSegment[]): Promise<void>;
|
|
1366
|
+
getSponsorBlock(): Promise<SponsorBlockSegment[]>;
|
|
1367
|
+
deleteSponsorBlock(): Promise<void>;
|
|
1368
|
+
search(query: SearchQuery, requestUser: unknown, throwOnEmpty?: boolean): Promise<SearchResult | UnresolvedSearchResult>;
|
|
1369
|
+
private _bandCampSearch;
|
|
1370
|
+
pause(): Promise<this>;
|
|
1371
|
+
resume(): Promise<this>;
|
|
1372
|
+
seek(position: number): Promise<this>;
|
|
1373
|
+
setRepeatMode(repeatMode: RepeatMode): Promise<this>;
|
|
1374
|
+
skip(skipTo?: number, throwError?: boolean): Promise<this>;
|
|
1375
|
+
stopPlaying(clearQueue?: boolean, executeAutoplay?: boolean): Promise<this>;
|
|
1376
|
+
connect(): Promise<this>;
|
|
1377
|
+
changeVoiceState(data: {
|
|
1378
|
+
voiceChannelId?: string;
|
|
1379
|
+
selfDeaf?: boolean;
|
|
1380
|
+
selfMute?: boolean;
|
|
1381
|
+
}): Promise<this>;
|
|
1382
|
+
disconnect(force?: boolean): Promise<this>;
|
|
1383
|
+
destroy(reason?: DestroyReasons | string, disconnect?: boolean): Promise<this>;
|
|
1384
|
+
getCurrentLyrics(skipTrackSource?: boolean): Promise<LyricsResult>;
|
|
1385
|
+
getLyrics(track: Track, skipTrackSource?: boolean): Promise<LyricsResult>;
|
|
1386
|
+
subscribeLyrics(skipTrackSource?: boolean): Promise<unknown>;
|
|
1387
|
+
unsubscribeLyrics(): Promise<void>;
|
|
1388
|
+
changeNode(newNode: RyanlinkNode | string, checkSources?: boolean): Promise<string>;
|
|
1389
|
+
moveNode(node?: string): Promise<string | this>;
|
|
1390
|
+
toJSON(): PlayerJson;
|
|
1391
|
+
}
|
|
1392
|
+
declare class Autoplay {
|
|
1393
|
+
private static adding;
|
|
1394
|
+
static defaultAutoplay(player: Player, lastTrack: Track): Promise<void>;
|
|
1395
|
+
private static buildPlayedData;
|
|
1396
|
+
private static fetchRelatedTracks;
|
|
1397
|
+
private static filterTracks;
|
|
1398
|
+
private static getSpotifyRecommendations;
|
|
1399
|
+
private static getYouTubeSimilar;
|
|
1400
|
+
private static getArtistSearch;
|
|
1066
1401
|
}
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1402
|
+
|
|
1403
|
+
declare class NodeLinkNode extends RyanlinkNode {
|
|
1404
|
+
nodeType: "NodeLink";
|
|
1405
|
+
constructor(options: NodeConfiguration, manager: NodeManager);
|
|
1406
|
+
setNextTrackGapLess(player: Player, track?: Track | UnresolvedTrack): Promise<boolean>;
|
|
1407
|
+
removeNextTrackGapLess(player: Player): Promise<boolean>;
|
|
1408
|
+
getMeaning(track?: Track | UnresolvedTrack): Promise<MeaningResponse>;
|
|
1409
|
+
addMixerLayer(player: Player, trackToAdd: Track, volume: number): Promise<AddMixerLayerResponse>;
|
|
1410
|
+
listMixerLayers(player: Player): Promise<ListMixerLayersResponse>;
|
|
1411
|
+
updateMixerLayerVolume(player: Player, mixId: string, volume: number): Promise<boolean>;
|
|
1412
|
+
removeMixerLayer(player: Player, mixId: string): Promise<boolean>;
|
|
1413
|
+
specificFilters: {
|
|
1414
|
+
echo: (player: Player, options: NodeLink_EchoFilter, disableFilter?: boolean) => Promise<boolean>;
|
|
1415
|
+
chorus: (player: Player, options: NodeLink_ChorusFilter, disableFilter?: boolean) => Promise<boolean>;
|
|
1416
|
+
compressor: (player: Player, options: NodeLink_CompressorFilter, disableFilter?: boolean) => Promise<boolean>;
|
|
1417
|
+
highPass: (player: Player, options: NodeLink_HighPassFilter, disableFilter?: boolean) => Promise<boolean>;
|
|
1418
|
+
phaser: (player: Player, options: NodeLink_PhaserFilter, disableFilter?: boolean) => Promise<boolean>;
|
|
1419
|
+
spatial: (player: Player, options: NodeLink_SpatialFilter, disableFilter?: boolean) => Promise<boolean>;
|
|
1420
|
+
resetNodeLinkFilters: (player: Player) => Promise<boolean>;
|
|
1073
1421
|
};
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1422
|
+
nodeLinkLyrics(player: Player, track?: Track | UnresolvedTrack, language?: string): Promise<NodeLinkLyrics | NodeLinkNoLyrics>;
|
|
1423
|
+
getChapters(player: Player, track?: Track | UnresolvedTrack): Promise<NodeLinkChapter[]>;
|
|
1424
|
+
getConnectionMetrics(): Promise<ConnectionMetricsResponse>;
|
|
1425
|
+
getDirectStream(track: Track | UnresolvedTrack): Promise<DirectStreamResponse>;
|
|
1426
|
+
loadDirectStream(track: Track | UnresolvedTrack, volume: number, position: number, filters: object | string): Promise<ReadableStream>;
|
|
1427
|
+
changeAudioTrackLanguage(player: Player, language_audioTrackId: string): Promise<any>;
|
|
1428
|
+
updateYoutubeConfig(refreshToken?: string, visitorData?: string): Promise<any>;
|
|
1429
|
+
getYoutubeConfig(validate?: boolean): Promise<{
|
|
1430
|
+
refreshToken: string;
|
|
1431
|
+
visitorData: string | null;
|
|
1432
|
+
isConfigured: boolean;
|
|
1433
|
+
isValid: boolean | null;
|
|
1434
|
+
}>;
|
|
1435
|
+
getYoutubeOAUTH(refreshToken: string): Promise<YoutubeOAuthResponse>;
|
|
1436
|
+
updateYoutubeOAUTH(refreshToken: string): Promise<YoutubeOAuthResponse>;
|
|
1083
1437
|
}
|
|
1084
1438
|
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
title: string;
|
|
1101
|
-
artist: string;
|
|
1102
|
-
album?: string;
|
|
1103
|
-
duration: number;
|
|
1439
|
+
declare class RyanlinkNode {
|
|
1440
|
+
private heartBeatPingTimestamp;
|
|
1441
|
+
private heartBeatPongTimestamp;
|
|
1442
|
+
private heartBeatInterval?;
|
|
1443
|
+
private pingTimeout?;
|
|
1444
|
+
nodeType: NodeTypes;
|
|
1445
|
+
isAlive: boolean;
|
|
1446
|
+
static _NodeLinkClass: unknown;
|
|
1447
|
+
options: NodeConfiguration;
|
|
1448
|
+
calls: number;
|
|
1449
|
+
stats: NodeStats;
|
|
1450
|
+
sessionId?: string | null;
|
|
1451
|
+
resuming: {
|
|
1452
|
+
enabled: boolean;
|
|
1453
|
+
timeout: number | null;
|
|
1104
1454
|
};
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1455
|
+
info: NodeInfo | null;
|
|
1456
|
+
reconnectionState: ReconnectionState;
|
|
1457
|
+
private NodeManager;
|
|
1458
|
+
private reconnectTimeout?;
|
|
1459
|
+
private reconnectAttempts;
|
|
1460
|
+
private socket;
|
|
1461
|
+
private version;
|
|
1462
|
+
private get _LManager();
|
|
1463
|
+
get heartBeatPing(): number;
|
|
1464
|
+
get _checkForPlugins(): boolean;
|
|
1465
|
+
get _checkForSources(): boolean;
|
|
1466
|
+
private dispatchDebug;
|
|
1467
|
+
get connected(): boolean;
|
|
1468
|
+
get connectionStatus(): string;
|
|
1469
|
+
constructor(options: NodeConfiguration, manager: NodeManager);
|
|
1470
|
+
rawRequest(endpoint: string, modify?: ModifyRequest): Promise<{
|
|
1471
|
+
response: Response;
|
|
1472
|
+
options: RequestInit & {
|
|
1473
|
+
path: string;
|
|
1474
|
+
extraQueryUrlParams?: URLSearchParams;
|
|
1475
|
+
};
|
|
1476
|
+
}>;
|
|
1477
|
+
request(endpoint: string, modify: ModifyRequest | undefined, parseAsText: true): Promise<string>;
|
|
1478
|
+
request(endpoint: string, modify?: ModifyRequest, parseAsText?: false): Promise<any>;
|
|
1479
|
+
search(query: SearchQuery, requestUser: unknown, throwOnEmpty?: boolean): Promise<SearchResult>;
|
|
1480
|
+
audioSearch(query: AudioSearchQuery, requestUser: unknown, throwOnEmpty?: boolean): Promise<AudioSearchResponse | SearchResult>;
|
|
1481
|
+
updatePlayer(data: PlayerUpdateInfo): Promise<AudioPlayerState>;
|
|
1482
|
+
destroyPlayer(guildId: any): Promise<void>;
|
|
1483
|
+
connect(sessionId?: string): void;
|
|
1484
|
+
private heartBeat;
|
|
1485
|
+
get id(): string;
|
|
1486
|
+
destroy(destroyReason?: DestroyReasonsType, deleteNode?: boolean, movePlayers?: boolean): void;
|
|
1487
|
+
disconnect(disconnectReason?: DisconnectReasonsType): void;
|
|
1488
|
+
fetchAllPlayers(): Promise<AudioPlayerState[] | InvalidRestRequest | null>;
|
|
1489
|
+
fetchPlayer(guildId: string): Promise<AudioPlayerState | InvalidRestRequest | null>;
|
|
1490
|
+
updateSession(resuming?: boolean, timeout?: number): Promise<Session | InvalidRestRequest | null>;
|
|
1491
|
+
decode: {
|
|
1492
|
+
singleTrack: (encoded: Base64, requester: unknown) => Promise<Track>;
|
|
1493
|
+
multipleTracks: (encodeds: Base64[], requester: unknown) => Promise<Track[]>;
|
|
1112
1494
|
};
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1495
|
+
lyrics: {
|
|
1496
|
+
get: (track: Track, skipTrackSource?: boolean) => Promise<LyricsResult | null>;
|
|
1497
|
+
getCurrent: (guildId: string, skipTrackSource?: boolean) => Promise<LyricsResult | null>;
|
|
1498
|
+
subscribe: (guildId: string, skipTrackSource?: boolean) => Promise<unknown>;
|
|
1499
|
+
unsubscribe: (guildId: string) => Promise<void>;
|
|
1116
1500
|
};
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
type ExcludeLast<T extends unknown[]> = T extends [...infer Items, unknown] ? Items : never;
|
|
1128
|
-
interface PlayerEventMap {
|
|
1129
|
-
init: [];
|
|
1130
|
-
nodeConnect: [node: LavalinkNode, ...ExcludeLast<NodeEventMap["connect"]>];
|
|
1131
|
-
nodeReady: [node: LavalinkNode, ...ExcludeLast<NodeEventMap["ready"]>];
|
|
1132
|
-
nodeDispatch: [node: LavalinkNode, ...ExcludeLast<NodeEventMap["dispatch"]>];
|
|
1133
|
-
nodeError: [node: LavalinkNode, ...ExcludeLast<NodeEventMap["error"]>];
|
|
1134
|
-
nodeClose: [node: LavalinkNode, ...ExcludeLast<NodeEventMap["close"]>];
|
|
1135
|
-
nodeDisconnect: [node: LavalinkNode, ...ExcludeLast<NodeEventMap["disconnect"]>];
|
|
1136
|
-
voiceConnect: [voice: VoiceState];
|
|
1137
|
-
voiceClose: [voice: VoiceState, code: number, reason: string, byRemote: boolean];
|
|
1138
|
-
voiceChange: [voice: VoiceState, previousNode: LavalinkNode, wasPlaying: boolean];
|
|
1139
|
-
voiceDestroy: [voice: VoiceState, reason: string];
|
|
1140
|
-
queueCreate: [queue: Queue];
|
|
1141
|
-
queueUpdate: [queue: Queue, state: PlayerState];
|
|
1142
|
-
queueFinish: [queue: Queue];
|
|
1143
|
-
queueDestroy: [queue: Queue, reason: string];
|
|
1144
|
-
trackStart: [queue: Queue, track: Track];
|
|
1145
|
-
trackAdd: [player: Player, guildId: string, tracks: Track[]];
|
|
1146
|
-
trackStuck: [queue: Queue, track: Track, thresholdMs: number];
|
|
1147
|
-
trackError: [queue: Queue, track: Track, exception: Exception];
|
|
1148
|
-
trackFinish: [queue: Queue, track: Track, reason: TrackEndReason];
|
|
1149
|
-
debug: [name: string, info: unknown];
|
|
1150
|
-
segmentsLoaded: [queue: Queue, track: Track, payload: unknown];
|
|
1151
|
-
segmentSkipped: [queue: Queue, track: Track, payload: unknown];
|
|
1152
|
-
fairPlayApplied: [player: Player, guildId: string, count: number];
|
|
1153
|
-
lyricsFound: [player: Player, track: Track, result: LyricsResult];
|
|
1154
|
-
lyricsNotFound: [player: Player, track: Track];
|
|
1155
|
-
queueSaved: [guildId: string];
|
|
1156
|
-
queueLoaded: [guildId: string, count: number];
|
|
1157
|
-
}
|
|
1158
|
-
type PluginRecord<Plugins extends PlayerPlugin[]> = {
|
|
1159
|
-
[Name in Plugins[number]["name"]]: Extract<Plugins[number], {
|
|
1160
|
-
name: Name;
|
|
1161
|
-
}>;
|
|
1162
|
-
};
|
|
1163
|
-
interface PlayerOptions<Plugins extends PlayerPlugin[] = PlayerPlugin[]> {
|
|
1164
|
-
nodes: CreateNodeOptions[];
|
|
1165
|
-
plugins?: Plugins;
|
|
1166
|
-
autoInit?: boolean;
|
|
1167
|
-
autoSync?: boolean;
|
|
1168
|
-
queryPrefix?: string;
|
|
1169
|
-
relocateQueues?: boolean;
|
|
1170
|
-
forwardVoiceUpdate: (guildId: string, payload: VoiceUpdatePayload) => Promise<void>;
|
|
1171
|
-
fetchRelatedTracks?: (queue: Queue, track: Track) => Promise<Track[]>;
|
|
1172
|
-
}
|
|
1173
|
-
type PlayerInstanceOptions = Omit<RequiredProp<PlayerOptions, keyof typeof DefaultPlayerOptions>, "nodes" | "plugins">;
|
|
1174
|
-
interface VoiceUpdatePayload {
|
|
1175
|
-
op: 4;
|
|
1176
|
-
d: {
|
|
1177
|
-
guild_id: string;
|
|
1178
|
-
channel_id: string | null;
|
|
1179
|
-
self_deaf: boolean;
|
|
1180
|
-
self_mute: boolean;
|
|
1501
|
+
fetchStats(): Promise<BaseNodeStats>;
|
|
1502
|
+
fetchConnectionMetrics(): Promise<NodeLinkConnectionMetrics>;
|
|
1503
|
+
fetchVersion(): Promise<string>;
|
|
1504
|
+
fetchInfo(): Promise<NodeInfo>;
|
|
1505
|
+
nodeMetricSummary(): NodeMetricSummary;
|
|
1506
|
+
getHealthStatus(thresholds?: HealthStatusThresholdOptions): HealthStatusObject;
|
|
1507
|
+
routePlannerApi: {
|
|
1508
|
+
getStatus: () => Promise<RoutePlanner>;
|
|
1509
|
+
unmarkFailedAddress: (address: string) => Promise<unknown>;
|
|
1510
|
+
unmarkAllFailedAddresses: () => Promise<unknown>;
|
|
1181
1511
|
};
|
|
1512
|
+
private validate;
|
|
1513
|
+
isNodeLink(): this is NodeLinkNode;
|
|
1514
|
+
isRyanlinkNode(): this is RyanlinkNode;
|
|
1515
|
+
private syncPlayerData;
|
|
1516
|
+
private get restAddress();
|
|
1517
|
+
get isNodeReconnecting(): boolean;
|
|
1518
|
+
private reconnect;
|
|
1519
|
+
get reconnectionAttemptCount(): number;
|
|
1520
|
+
private executeReconnect;
|
|
1521
|
+
private resetReconnectionAttempts;
|
|
1522
|
+
private resetAckTimeouts;
|
|
1523
|
+
private open;
|
|
1524
|
+
private close;
|
|
1525
|
+
private error;
|
|
1526
|
+
private message;
|
|
1527
|
+
private handleEvent;
|
|
1528
|
+
private nodeLinkEventHandler;
|
|
1529
|
+
private getTrackOfPayload;
|
|
1530
|
+
private trackStart;
|
|
1531
|
+
private trackEnd;
|
|
1532
|
+
private trackStuck;
|
|
1533
|
+
private trackError;
|
|
1534
|
+
private socketClosed;
|
|
1535
|
+
private SponsorBlockSegmentLoaded;
|
|
1536
|
+
private SponsorBlockSegmentSkipped;
|
|
1537
|
+
private SponsorBlockChaptersLoaded;
|
|
1538
|
+
private SponsorBlockChapterStarted;
|
|
1539
|
+
getSponsorBlock(player: Player): Promise<SponsorBlockSegment[]>;
|
|
1540
|
+
setSponsorBlock(player: Player, segments?: SponsorBlockSegment[]): Promise<void>;
|
|
1541
|
+
deleteSponsorBlock(player: Player): Promise<void>;
|
|
1542
|
+
private queueEnd;
|
|
1543
|
+
private LyricsLine;
|
|
1544
|
+
private LyricsFound;
|
|
1545
|
+
private LyricsNotFound;
|
|
1182
1546
|
}
|
|
1183
|
-
interface SearchOptions {
|
|
1184
|
-
node?: string;
|
|
1185
|
-
prefix?: string;
|
|
1186
|
-
}
|
|
1187
|
-
interface PlayOptions<Context extends Record<string, unknown> = QueueContext, UserData extends JsonObject = CommonUserData> extends SearchOptions, CreateQueueOptions<Context> {
|
|
1188
|
-
userData?: UserData;
|
|
1189
|
-
}
|
|
1190
|
-
interface TrackSearchResult {
|
|
1191
|
-
type: "track";
|
|
1192
|
-
data: Track;
|
|
1193
|
-
}
|
|
1194
|
-
interface PlaylistSearchResult {
|
|
1195
|
-
type: "playlist";
|
|
1196
|
-
data: Playlist;
|
|
1197
|
-
}
|
|
1198
|
-
interface QuerySearchResult {
|
|
1199
|
-
type: "query";
|
|
1200
|
-
data: Track[];
|
|
1201
|
-
}
|
|
1202
|
-
interface EmptySearchResult {
|
|
1203
|
-
type: "empty";
|
|
1204
|
-
data: [];
|
|
1205
|
-
}
|
|
1206
|
-
interface ErrorSearchResult {
|
|
1207
|
-
type: "error";
|
|
1208
|
-
data: Exception;
|
|
1209
|
-
}
|
|
1210
|
-
type SearchResult = TrackSearchResult | PlaylistSearchResult | QuerySearchResult | EmptySearchResult | ErrorSearchResult;
|
|
1211
1547
|
|
|
1212
|
-
declare
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
minPlayTime: number;
|
|
1229
|
-
sources: {
|
|
1230
|
-
spotify: boolean;
|
|
1231
|
-
youtube: boolean;
|
|
1232
|
-
youtubemusic: boolean;
|
|
1233
|
-
soundcloud: boolean;
|
|
1234
|
-
};
|
|
1235
|
-
limit: number;
|
|
1236
|
-
minDuration: number;
|
|
1237
|
-
maxDuration: number;
|
|
1238
|
-
excludeKeywords: string[];
|
|
1239
|
-
}
|
|
1240
|
-
declare class AutoplayPlugin extends PlayerPlugin {
|
|
1241
|
-
#private;
|
|
1242
|
-
readonly name: "autoplay";
|
|
1243
|
-
init(player: Player): void;
|
|
1548
|
+
declare class NodeManager extends EventEmitter {
|
|
1549
|
+
emit<Event extends keyof NodeManagerEvents>(event: Event, ...args: Parameters<NodeManagerEvents[Event]>): boolean;
|
|
1550
|
+
on<Event extends keyof NodeManagerEvents>(event: Event, listener: NodeManagerEvents[Event]): this;
|
|
1551
|
+
once<Event extends keyof NodeManagerEvents>(event: Event, listener: NodeManagerEvents[Event]): this;
|
|
1552
|
+
off<Event extends keyof NodeManagerEvents>(event: Event, listener: NodeManagerEvents[Event]): this;
|
|
1553
|
+
removeListener<Event extends keyof NodeManagerEvents>(event: Event, listener: NodeManagerEvents[Event]): this;
|
|
1554
|
+
RyanlinkManager: RyanlinkManager;
|
|
1555
|
+
nodes: MiniMap<string, RyanlinkNode | NodeLinkNode>;
|
|
1556
|
+
constructor(RyanlinkManager: RyanlinkManager);
|
|
1557
|
+
disconnectAll(deleteAllNodes?: boolean, destroyPlayers?: boolean): Promise<number>;
|
|
1558
|
+
connectAll(): Promise<number>;
|
|
1559
|
+
reconnectAll(): Promise<number>;
|
|
1560
|
+
createNode<T extends RyanlinkNode | NodeLinkNode>(options: NodeConfiguration): T;
|
|
1561
|
+
leastUsedNodes(sortType?: 'memory' | 'cpuLavalink' | 'cpuSystem' | 'calls' | 'playingPlayers' | 'players'): RyanlinkNode[];
|
|
1562
|
+
deleteNode(node: RyanlinkNodeIdentifier | RyanlinkNode | NodeLinkNode, movePlayers?: boolean): void;
|
|
1563
|
+
getNode(node: RyanlinkNodeIdentifier | RyanlinkNode | NodeLinkNode): RyanlinkNode | NodeLinkNode | undefined;
|
|
1244
1564
|
}
|
|
1245
1565
|
|
|
1246
|
-
interface
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1566
|
+
interface ManagerEvents<CustomPlayerT extends Player = Player> {
|
|
1567
|
+
trackStart: (player: CustomPlayerT, track: Track | null, payload: TrackStartEvent) => void;
|
|
1568
|
+
trackEnd: (player: CustomPlayerT, track: Track | null, payload: TrackEndEvent) => void;
|
|
1569
|
+
trackStuck: (player: CustomPlayerT, track: Track | null, payload: TrackStuckEvent) => void;
|
|
1570
|
+
trackError: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: TrackExceptionEvent) => void;
|
|
1571
|
+
queueEnd: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: TrackEndEvent | TrackStuckEvent | TrackExceptionEvent) => void;
|
|
1572
|
+
playerCreate: (player: CustomPlayerT) => void;
|
|
1573
|
+
playerMove: (player: CustomPlayerT, oldVoiceChannelId: string, newVoiceChannelId: string) => void;
|
|
1574
|
+
playerDisconnect: (player: CustomPlayerT, voiceChannelId: string) => void;
|
|
1575
|
+
playerReconnect: (player: CustomPlayerT, voiceChannelId: string) => void;
|
|
1576
|
+
playerSocketClosed: (player: CustomPlayerT, payload: WebSocketClosedEvent) => void;
|
|
1577
|
+
playerDestroy: (player: CustomPlayerT, destroyReason?: DestroyReasonsType) => void;
|
|
1578
|
+
playerUpdate: (oldPlayerJson: PlayerJson, newPlayer: CustomPlayerT) => void;
|
|
1579
|
+
playerClientUpdate: (oldPlayerJson: PlayerJson, newPlayer: CustomPlayerT) => void;
|
|
1580
|
+
playerMuteChange: (player: CustomPlayerT, selfMuted: boolean, serverMuted: boolean) => void;
|
|
1581
|
+
playerDeafChange: (player: CustomPlayerT, selfDeafed: boolean, serverDeafed: boolean) => void;
|
|
1582
|
+
playerSuppressChange: (player: CustomPlayerT, suppress: boolean) => void;
|
|
1583
|
+
playerQueueEmptyStart: (player: CustomPlayerT, timeoutMs: number) => void;
|
|
1584
|
+
playerQueueEmptyEnd: (player: CustomPlayerT) => void;
|
|
1585
|
+
playerQueueEmptyCancel: (player: CustomPlayerT) => void;
|
|
1586
|
+
playerVoiceJoin: (player: CustomPlayerT, userId: string) => void;
|
|
1587
|
+
playerVoiceLeave: (player: CustomPlayerT, userId: string) => void;
|
|
1588
|
+
SegmentsLoaded: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: SponsorBlockSegmentsLoaded) => void;
|
|
1589
|
+
SegmentSkipped: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: SponsorBlockSegmentSkipped) => void;
|
|
1590
|
+
ChapterStarted: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: SponsorBlockChapterStarted) => void;
|
|
1591
|
+
ChaptersLoaded: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: SponsorBlockChaptersLoaded) => void;
|
|
1592
|
+
debug: (eventKey: DebugEvents, eventData: {
|
|
1593
|
+
message: string;
|
|
1594
|
+
state: 'log' | 'warn' | 'error';
|
|
1595
|
+
error?: Error | string;
|
|
1596
|
+
functionLayer: string;
|
|
1597
|
+
}) => void;
|
|
1598
|
+
LyricsLine: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: LyricsLineEvent) => void;
|
|
1599
|
+
LyricsFound: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: LyricsFoundEvent) => void;
|
|
1600
|
+
LyricsNotFound: (player: CustomPlayerT, track: Track | UnresolvedTrack | null, payload: LyricsNotFoundEvent) => void;
|
|
1601
|
+
playerResumed: (player: CustomPlayerT, track: Track | UnresolvedTrack | null) => void;
|
|
1602
|
+
playerPaused: (player: CustomPlayerT, track: Track | UnresolvedTrack | null) => void;
|
|
1603
|
+
}
|
|
1604
|
+
interface BotClientOptions {
|
|
1605
|
+
id: string;
|
|
1606
|
+
username?: string;
|
|
1607
|
+
[x: string | number | symbol]: unknown;
|
|
1608
|
+
}
|
|
1609
|
+
interface ManagerPlayerOptions<CustomPlayerT extends Player = Player> {
|
|
1610
|
+
volumeDecrementer?: number;
|
|
1611
|
+
clientBasedPositionUpdateInterval?: number;
|
|
1612
|
+
defaultSearchPlatform?: SearchPlatform;
|
|
1613
|
+
allowCustomSources?: boolean;
|
|
1614
|
+
applyVolumeAsFilter?: boolean;
|
|
1615
|
+
requesterTransformer?: (requester: unknown) => unknown;
|
|
1616
|
+
onDisconnect?: {
|
|
1617
|
+
autoReconnect?: boolean;
|
|
1618
|
+
autoReconnectOnlyWithTracks?: boolean;
|
|
1619
|
+
destroyPlayer?: boolean;
|
|
1620
|
+
};
|
|
1621
|
+
minAutoPlayMs?: number;
|
|
1622
|
+
maxErrorsPerTime?: {
|
|
1623
|
+
threshold: number;
|
|
1624
|
+
maxAmount: number;
|
|
1625
|
+
};
|
|
1626
|
+
onEmptyQueue?: {
|
|
1627
|
+
autoPlayFunction?: (player: CustomPlayerT, lastPlayedTrack: Track) => Promise<void>;
|
|
1628
|
+
destroyAfterMs?: number;
|
|
1629
|
+
};
|
|
1630
|
+
autoplayConfig?: AutoplayConfig;
|
|
1631
|
+
useUnresolvedData?: boolean;
|
|
1632
|
+
enforceSponsorBlockRequestForEventEnablement?: boolean;
|
|
1633
|
+
}
|
|
1634
|
+
type PlayerConstructor<T extends Player = Player> = new (options: PlayerOptions, RyanlinkManager: RyanlinkManager, dontEmitPlayerCreateEvent?: boolean) => T;
|
|
1635
|
+
interface RyanConfiguration<CustomPlayerT extends Player = Player> {
|
|
1636
|
+
nodes: NodeConfiguration[];
|
|
1637
|
+
sendToShard: (guildId: string, payload: GuildShardPayload) => void;
|
|
1638
|
+
client?: BotClientOptions;
|
|
1639
|
+
queueOptions?: ManagerQueueOptions;
|
|
1640
|
+
playerOptions?: ManagerPlayerOptions<CustomPlayerT>;
|
|
1641
|
+
playerClass?: PlayerConstructor<CustomPlayerT>;
|
|
1642
|
+
autoSkip?: boolean;
|
|
1643
|
+
autoMove?: boolean;
|
|
1644
|
+
autoSkipOnResolveError?: boolean;
|
|
1645
|
+
emitNewSongsOnly?: boolean;
|
|
1646
|
+
linksWhitelist?: (RegExp | string)[];
|
|
1647
|
+
linksBlacklist?: (RegExp | string)[];
|
|
1648
|
+
linksAllowed?: boolean;
|
|
1649
|
+
advancedOptions?: {
|
|
1650
|
+
maxFilterFixDuration?: number;
|
|
1651
|
+
enableDebugEvents?: boolean;
|
|
1652
|
+
debugOptions?: {
|
|
1653
|
+
logCustomSearches?: boolean;
|
|
1654
|
+
noAudio?: boolean;
|
|
1655
|
+
playerDestroy?: {
|
|
1656
|
+
debugLog?: boolean;
|
|
1657
|
+
dontThrowError?: boolean;
|
|
1658
|
+
};
|
|
1659
|
+
};
|
|
1660
|
+
};
|
|
1257
1661
|
}
|
|
1258
1662
|
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
readonly
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1663
|
+
declare class RyanlinkManager<CustomPlayerT extends Player = Player> extends EventEmitter {
|
|
1664
|
+
emit<Event extends keyof ManagerEvents<CustomPlayerT>>(event: Event, ...args: Parameters<ManagerEvents<CustomPlayerT>[Event]>): boolean;
|
|
1665
|
+
on<Event extends keyof ManagerEvents<CustomPlayerT>>(event: Event, listener: ManagerEvents<CustomPlayerT>[Event]): this;
|
|
1666
|
+
once<Event extends keyof ManagerEvents<CustomPlayerT>>(event: Event, listener: ManagerEvents<CustomPlayerT>[Event]): this;
|
|
1667
|
+
off<Event extends keyof ManagerEvents<CustomPlayerT>>(event: Event, listener: ManagerEvents<CustomPlayerT>[Event]): this;
|
|
1668
|
+
removeListener<Event extends keyof ManagerEvents<CustomPlayerT>>(event: Event, listener: ManagerEvents<CustomPlayerT>[Event]): this;
|
|
1669
|
+
options: RyanConfiguration<CustomPlayerT>;
|
|
1670
|
+
nodeManager: NodeManager;
|
|
1671
|
+
utils: RyanlinkUtils;
|
|
1672
|
+
initiated: boolean;
|
|
1673
|
+
readonly players: MiniMap<string, CustomPlayerT>;
|
|
1674
|
+
private applyOptions;
|
|
1675
|
+
private validateOptions;
|
|
1676
|
+
private dispatchDebug;
|
|
1677
|
+
private static readonly _noAudioDebugPrefix;
|
|
1678
|
+
private _debugNoAudio;
|
|
1679
|
+
constructor(options: RyanConfiguration<CustomPlayerT>);
|
|
1680
|
+
getPlayer(guildId: string): CustomPlayerT | undefined;
|
|
1681
|
+
createPlayer(options: PlayerOptions): CustomPlayerT;
|
|
1682
|
+
destroyPlayer(guildId: string, destroyReason?: string): Promise<void | CustomPlayerT>;
|
|
1683
|
+
deletePlayer(guildId: string): boolean | void;
|
|
1684
|
+
get useable(): boolean;
|
|
1685
|
+
init(clientData: BotClientOptions): Promise<this>;
|
|
1686
|
+
provideVoiceUpdate(data: VoicePacket | VoiceServer | VoiceState | ChannelDeletePacket): Promise<void>;
|
|
1273
1687
|
}
|
|
1274
1688
|
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
}>;
|
|
1287
|
-
previousTracks: Array<{
|
|
1288
|
-
encoded: string;
|
|
1289
|
-
info: unknown;
|
|
1290
|
-
pluginInfo?: unknown;
|
|
1291
|
-
userData?: unknown;
|
|
1292
|
-
}>;
|
|
1293
|
-
currentTrack?: {
|
|
1294
|
-
encoded: string;
|
|
1295
|
-
info: unknown;
|
|
1296
|
-
position: number;
|
|
1297
|
-
};
|
|
1298
|
-
volume: number;
|
|
1299
|
-
repeatMode: RepeatMode;
|
|
1300
|
-
autoplay: boolean;
|
|
1301
|
-
paused: boolean;
|
|
1302
|
-
timestamp: number;
|
|
1303
|
-
}
|
|
1304
|
-
interface QueueStore {
|
|
1305
|
-
get(guildId: string): Promise<StoredQueue | null> | StoredQueue | null;
|
|
1306
|
-
set(guildId: string, data: StoredQueue): Promise<void> | void;
|
|
1307
|
-
delete(guildId: string): Promise<void> | void;
|
|
1308
|
-
}
|
|
1309
|
-
declare class MemoryQueueStore implements QueueStore {
|
|
1310
|
-
#private;
|
|
1311
|
-
get(guildId: string): StoredQueue | null;
|
|
1312
|
-
set(guildId: string, data: StoredQueue): void;
|
|
1313
|
-
delete(guildId: string): void;
|
|
1314
|
-
}
|
|
1315
|
-
declare class QueuePersistencePlugin extends PlayerPlugin<QueuePersistencePluginEvents & Record<string, unknown[]>> {
|
|
1316
|
-
#private;
|
|
1317
|
-
readonly name: "queue-persistence";
|
|
1318
|
-
constructor(store?: QueueStore, autoSave?: boolean);
|
|
1319
|
-
init(player: Player): void;
|
|
1320
|
-
saveQueue(guildId: string): Promise<void>;
|
|
1321
|
-
loadQueue(guildId: string): Promise<StoredQueue | null>;
|
|
1322
|
-
deleteQueue(guildId: string): Promise<void>;
|
|
1323
|
-
getAllQueues(): Promise<StoredQueue[]>;
|
|
1324
|
-
}
|
|
1689
|
+
declare const SourceMappings: Record<SearchPlatform, RyanlinkSearchPlatform | ClientCustomSearchPlatformUtils>;
|
|
1690
|
+
declare const BuiltinSources: {
|
|
1691
|
+
DuncteBot_Plugin: string;
|
|
1692
|
+
LavaSrc: string;
|
|
1693
|
+
GoogleCloudTTS: string;
|
|
1694
|
+
LavaSearch: string;
|
|
1695
|
+
JioSaavn_Engine: string;
|
|
1696
|
+
Filter_Engine: string;
|
|
1697
|
+
TimedLyrics_Engine: string;
|
|
1698
|
+
};
|
|
1699
|
+
declare const LinkMatchers: Record<SourcesRegex, RegExp>;
|
|
1325
1700
|
|
|
1326
|
-
declare const
|
|
1327
|
-
declare const CLIENT_VERSION: string;
|
|
1328
|
-
declare const PACKAGE_INFO: Readonly<{
|
|
1329
|
-
name: string;
|
|
1330
|
-
version: string;
|
|
1331
|
-
repository: string;
|
|
1332
|
-
description: string | undefined;
|
|
1333
|
-
}>;
|
|
1701
|
+
declare const version: string;
|
|
1334
1702
|
|
|
1335
|
-
export {
|
|
1703
|
+
export { type AudioClientSearchPlatform, type AudioClientSearchPlatformResolve, type AudioFilters, AudioNodeSymbol, type AudioOutputs, type AudioPlayerState, AudioQueueSymbol, type AudioSearchFilteredResponse, type AudioSearchQuery, type AudioSearchResponse, type AudioSearchType, type AudioSourceNames, type AudioTrack, type AudioTrackInfo, AudioTrackSymbol, Autoplay, type AutoplayConfig, type Awaitable, type Base64, type BaseNodeStats, type BasePlayOptions, BuiltinSources, type CPUStats, type ChannelDeletePacket, type ChannelMixFilter, type ClientCustomSearchPlatformUtils, type ClientSearchPlatform, type CoreSourceNames, DebugEvents, DefaultQueueStore, DestroyReasons, type DestroyReasonsType, DisconnectReasons, type DisconnectReasonsType, type DistortionFilter, type DuncteSearchPlatform, type EQBand, EQList, type Exception, type ExtendedSearchPlatform, type FailingAddress, type FilterData, FilterManager, type FloatNumber, type FrameStats, type GitObject, type GuildShardPayload, type IntegerNumber, type InvalidRestRequest, type JioSaavnSearchPlatform, type KaraokeFilter, LinkMatchers, type LoadTypes, type LowPassFilter, type LyricsEvent, type LyricsEventType, type LyricsFoundEvent, type LyricsLine, type LyricsLineEvent, type LyricsNotFoundEvent, type LyricsResult, type ManagerQueueOptions, type MemoryStats, MiniMap, type MiniMapConstructor, type ModifyRequest, type NodeConfiguration, type NodeInfo, type NodeLinkConnectionMetrics, NodeLinkExclusiveEvents, NodeLinkNode, type NodeLink_ChorusFilter, type NodeLink_CompressorFilter, type NodeLink_EchoFilter, type NodeLink_HighPassFilter, type NodeLink_PhaserFilter, type NodeLink_SpatialFilter, NodeManager, type NodeManagerEvents, type NodeMessage, type NodeStats, type NodeTypes, type Opaque, type PlayConfiguration, type PlayOptions, Player, type PlayerEvent, type PlayerEventType, type PlayerEvents, type PlayerFilters, type PlayerJson, type PlayerOptions, type PlayerUpdateInfo, type PlaylistInfo, type PluginInfo, type PluginObject, Queue, type QueueChangesWatcher, QueueSaver, type QueueStoreManager, RecommendationsStrings, ReconnectionState, type RepeatMode, type RotationFilter, type RoutePlanner, type RoutePlannerTypes, RyanlinkManager, RyanlinkNode, type RyanlinkNodeIdentifier, type RyanlinkSearchPlatform, RyanlinkUtils, type SearchPlatform, type SearchQuery, type SearchResult, type Session, type Severity, SourceMappings, type SourceSearchPlatform, type SourceSearchPlatformBase, type SourcesRegex, type SponsorBlockChapterStarted, type SponsorBlockChaptersLoaded, type SponsorBlockSegment, type SponsorBlockSegmentEventType, type SponsorBlockSegmentEvents, type SponsorBlockSegmentSkipped, type SponsorBlockSegmentsLoaded, type State, type StoredQueue, type TimescaleFilter, type Track, type TrackEndEvent, type TrackEndReason, type TrackExceptionEvent, type TrackInfo, type TrackRequester, type TrackStartEvent, type TrackStuckEvent, type TremoloFilter, UnresolvedAudioTrackSymbol, type UnresolvedQuery, type UnresolvedSearchResult, type UnresolvedTrack, type UnresolvedTrackInfo, type VersionObject, type VibratoFilter, type VoiceConnectionOptions, type VoiceConnectionState, type VoicePacket, type VoiceServer, type VoiceState, type WebSocketClosedEvent, type anyObject, audioOutputsData, parseConnectionUrl, queueTrackEnd, safeStringify, validSponsorBlocks, version };
|