distube 4.0.0-dev.2 → 4.0.0-dev.3

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.
Files changed (129) hide show
  1. package/README.md +1 -1
  2. package/dist/index.d.ts +593 -8
  3. package/dist/index.js +2360 -22
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +2300 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/package.json +67 -40
  8. package/dist/DisTube.d.ts +0 -54
  9. package/dist/DisTube.d.ts.map +0 -1
  10. package/dist/DisTube.js +0 -279
  11. package/dist/DisTube.js.map +0 -1
  12. package/dist/constant.d.ts +0 -27
  13. package/dist/constant.d.ts.map +0 -1
  14. package/dist/constant.js +0 -47
  15. package/dist/constant.js.map +0 -1
  16. package/dist/core/DisTubeBase.d.ts +0 -14
  17. package/dist/core/DisTubeBase.d.ts.map +0 -1
  18. package/dist/core/DisTubeBase.js +0 -31
  19. package/dist/core/DisTubeBase.js.map +0 -1
  20. package/dist/core/DisTubeHandler.d.ts +0 -27
  21. package/dist/core/DisTubeHandler.d.ts.map +0 -1
  22. package/dist/core/DisTubeHandler.js +0 -230
  23. package/dist/core/DisTubeHandler.js.map +0 -1
  24. package/dist/core/DisTubeOptions.d.ts +0 -23
  25. package/dist/core/DisTubeOptions.d.ts.map +0 -1
  26. package/dist/core/DisTubeOptions.js +0 -90
  27. package/dist/core/DisTubeOptions.js.map +0 -1
  28. package/dist/core/DisTubeStream.d.ts +0 -19
  29. package/dist/core/DisTubeStream.d.ts.map +0 -1
  30. package/dist/core/DisTubeStream.js +0 -72
  31. package/dist/core/DisTubeStream.js.map +0 -1
  32. package/dist/core/index.d.ts +0 -7
  33. package/dist/core/index.d.ts.map +0 -1
  34. package/dist/core/index.js +0 -19
  35. package/dist/core/index.js.map +0 -1
  36. package/dist/core/manager/BaseManager.d.ts +0 -7
  37. package/dist/core/manager/BaseManager.d.ts.map +0 -1
  38. package/dist/core/manager/BaseManager.js +0 -16
  39. package/dist/core/manager/BaseManager.js.map +0 -1
  40. package/dist/core/manager/FilterManager.d.ts +0 -16
  41. package/dist/core/manager/FilterManager.d.ts.map +0 -1
  42. package/dist/core/manager/FilterManager.js +0 -88
  43. package/dist/core/manager/FilterManager.js.map +0 -1
  44. package/dist/core/manager/GuildIdManager.d.ts +0 -9
  45. package/dist/core/manager/GuildIdManager.d.ts.map +0 -1
  46. package/dist/core/manager/GuildIdManager.js +0 -25
  47. package/dist/core/manager/GuildIdManager.js.map +0 -1
  48. package/dist/core/manager/QueueManager.d.ts +0 -11
  49. package/dist/core/manager/QueueManager.d.ts.map +0 -1
  50. package/dist/core/manager/QueueManager.js +0 -172
  51. package/dist/core/manager/QueueManager.js.map +0 -1
  52. package/dist/core/manager/index.d.ts +0 -5
  53. package/dist/core/manager/index.d.ts.map +0 -1
  54. package/dist/core/manager/index.js +0 -17
  55. package/dist/core/manager/index.js.map +0 -1
  56. package/dist/core/voice/DisTubeVoice.d.ts +0 -32
  57. package/dist/core/voice/DisTubeVoice.d.ts.map +0 -1
  58. package/dist/core/voice/DisTubeVoice.js +0 -190
  59. package/dist/core/voice/DisTubeVoice.js.map +0 -1
  60. package/dist/core/voice/DisTubeVoiceManager.d.ts +0 -10
  61. package/dist/core/voice/DisTubeVoiceManager.d.ts.map +0 -1
  62. package/dist/core/voice/DisTubeVoiceManager.js +0 -36
  63. package/dist/core/voice/DisTubeVoiceManager.js.map +0 -1
  64. package/dist/core/voice/index.d.ts +0 -3
  65. package/dist/core/voice/index.d.ts.map +0 -1
  66. package/dist/core/voice/index.js +0 -15
  67. package/dist/core/voice/index.js.map +0 -1
  68. package/dist/index.d.ts.map +0 -1
  69. package/dist/plugin/http.d.ts +0 -10
  70. package/dist/plugin/http.d.ts.map +0 -1
  71. package/dist/plugin/http.js +0 -18
  72. package/dist/plugin/http.js.map +0 -1
  73. package/dist/plugin/https.d.ts +0 -19
  74. package/dist/plugin/https.d.ts.map +0 -1
  75. package/dist/plugin/https.js +0 -47
  76. package/dist/plugin/https.js.map +0 -1
  77. package/dist/plugin/index.d.ts +0 -3
  78. package/dist/plugin/index.d.ts.map +0 -1
  79. package/dist/plugin/index.js +0 -15
  80. package/dist/plugin/index.js.map +0 -1
  81. package/dist/struct/CustomPlugin.d.ts +0 -10
  82. package/dist/struct/CustomPlugin.d.ts.map +0 -1
  83. package/dist/struct/CustomPlugin.js +0 -16
  84. package/dist/struct/CustomPlugin.js.map +0 -1
  85. package/dist/struct/DisTubeError.d.ts +0 -55
  86. package/dist/struct/DisTubeError.d.ts.map +0 -1
  87. package/dist/struct/DisTubeError.js +0 -64
  88. package/dist/struct/DisTubeError.js.map +0 -1
  89. package/dist/struct/ExtractorPlugin.d.ts +0 -13
  90. package/dist/struct/ExtractorPlugin.d.ts.map +0 -1
  91. package/dist/struct/ExtractorPlugin.js +0 -16
  92. package/dist/struct/ExtractorPlugin.js.map +0 -1
  93. package/dist/struct/Playlist.d.ts +0 -25
  94. package/dist/struct/Playlist.d.ts.map +0 -1
  95. package/dist/struct/Playlist.js +0 -77
  96. package/dist/struct/Playlist.js.map +0 -1
  97. package/dist/struct/Plugin.d.ts +0 -17
  98. package/dist/struct/Plugin.d.ts.map +0 -1
  99. package/dist/struct/Plugin.js +0 -37
  100. package/dist/struct/Plugin.js.map +0 -1
  101. package/dist/struct/Queue.d.ts +0 -49
  102. package/dist/struct/Queue.d.ts.map +0 -1
  103. package/dist/struct/Queue.js +0 -272
  104. package/dist/struct/Queue.js.map +0 -1
  105. package/dist/struct/SearchResult.d.ts +0 -19
  106. package/dist/struct/SearchResult.d.ts.map +0 -1
  107. package/dist/struct/SearchResult.js +0 -30
  108. package/dist/struct/SearchResult.js.map +0 -1
  109. package/dist/struct/Song.d.ts +0 -43
  110. package/dist/struct/Song.d.ts.map +0 -1
  111. package/dist/struct/Song.js +0 -138
  112. package/dist/struct/Song.js.map +0 -1
  113. package/dist/struct/TaskQueue.d.ts +0 -8
  114. package/dist/struct/TaskQueue.d.ts.map +0 -1
  115. package/dist/struct/TaskQueue.js +0 -39
  116. package/dist/struct/TaskQueue.js.map +0 -1
  117. package/dist/struct/index.d.ts +0 -10
  118. package/dist/struct/index.d.ts.map +0 -1
  119. package/dist/struct/index.js +0 -22
  120. package/dist/struct/index.js.map +0 -1
  121. package/dist/tsconfig.tsbuildinfo +0 -1
  122. package/dist/type.d.ts +0 -104
  123. package/dist/type.d.ts.map +0 -1
  124. package/dist/type.js +0 -3
  125. package/dist/type.js.map +0 -1
  126. package/dist/util.d.ts +0 -22
  127. package/dist/util.d.ts.map +0 -1
  128. package/dist/util.js +0 -189
  129. package/dist/util.js.map +0 -1
package/dist/DisTube.d.ts DELETED
@@ -1,54 +0,0 @@
1
- import { TypedEmitter } from "tiny-typed-emitter";
2
- import { DisTubeHandler, DisTubeVoiceManager, Options, Playlist, Queue, QueueManager, SearchResult, Song } from ".";
3
- import type { Client, GuildMember, GuildTextBasedChannel, Message, VoiceBasedChannel } from "discord.js";
4
- import type { CustomPlugin, DisTubeEvents, DisTubeOptions, ExtractorPlugin, Filters, GuildIdResolvable } from ".";
5
- export declare const version: string;
6
- export declare class DisTube extends TypedEmitter<DisTubeEvents> {
7
- readonly handler: DisTubeHandler;
8
- readonly options: Options;
9
- readonly client: Client;
10
- readonly queues: QueueManager;
11
- readonly voices: DisTubeVoiceManager;
12
- readonly extractorPlugins: ExtractorPlugin[];
13
- readonly customPlugins: CustomPlugin[];
14
- readonly filters: Filters;
15
- constructor(client: Client, otp?: DisTubeOptions);
16
- static get version(): string;
17
- get version(): string;
18
- play(voiceChannel: VoiceBasedChannel, song: string | Song | SearchResult | Playlist, options?: {
19
- skip?: boolean;
20
- position?: number;
21
- member?: GuildMember;
22
- textChannel?: GuildTextBasedChannel;
23
- message?: Message;
24
- metadata?: any;
25
- }): Promise<void>;
26
- createCustomPlaylist(songs: (string | Song | SearchResult)[], options?: {
27
- member?: GuildMember;
28
- properties?: Record<string, any>;
29
- parallel?: boolean;
30
- metadata?: any;
31
- }): Promise<Playlist>;
32
- search(string: string, options?: {
33
- type?: "video" | "playlist";
34
- limit?: number;
35
- safeSearch?: boolean;
36
- retried?: boolean;
37
- }): Promise<Array<SearchResult>>;
38
- getQueue(guild: GuildIdResolvable): Queue | undefined;
39
- pause(guild: GuildIdResolvable): Queue;
40
- resume(guild: GuildIdResolvable): Queue;
41
- stop(guild: GuildIdResolvable): Promise<void>;
42
- setVolume(guild: GuildIdResolvable, percent: number): Queue;
43
- skip(guild: GuildIdResolvable): Promise<Song>;
44
- previous(guild: GuildIdResolvable): Promise<Song>;
45
- shuffle(guild: GuildIdResolvable): Promise<Queue>;
46
- jump(guild: GuildIdResolvable, num: number): Promise<Song>;
47
- setRepeatMode(guild: GuildIdResolvable, mode?: number): number;
48
- toggleAutoplay(guild: GuildIdResolvable): boolean;
49
- addRelatedSong(guild: GuildIdResolvable): Promise<Song>;
50
- seek(guild: GuildIdResolvable, time: number): Queue;
51
- emitError(error: Error, channel?: GuildTextBasedChannel): void;
52
- }
53
- export default DisTube;
54
- //# sourceMappingURL=DisTube.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DisTube.d.ts","sourceRoot":"","sources":["../src/DisTube.ts"],"names":[],"mappings":"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"}
package/dist/DisTube.js DELETED
@@ -1,279 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.DisTube = exports.version = void 0;
7
- const ytpl_1 = __importDefault(require("@distube/ytpl"));
8
- const ytsr_1 = __importDefault(require("@distube/ytsr"));
9
- const util_1 = require("./util");
10
- const tiny_typed_emitter_1 = require("tiny-typed-emitter");
11
- const _1 = require(".");
12
- exports.version = require("../package.json").version;
13
- class DisTube extends tiny_typed_emitter_1.TypedEmitter {
14
- constructor(client, otp = {}) {
15
- super();
16
- this.setMaxListeners(1);
17
- if (!(0, _1.isClientInstance)(client))
18
- throw new _1.DisTubeError("INVALID_TYPE", "Discord.Client", client, "client");
19
- this.client = client;
20
- (0, util_1.checkIntents)(client.options);
21
- this.options = new _1.Options(otp);
22
- this.voices = new _1.DisTubeVoiceManager(this);
23
- this.handler = new _1.DisTubeHandler(this);
24
- this.queues = new _1.QueueManager(this);
25
- this.filters = { ..._1.defaultFilters, ...this.options.customFilters };
26
- this.options.plugins.push(new _1.HTTPPlugin(), new _1.HTTPSPlugin());
27
- this.options.plugins.map(p => p.init(this));
28
- this.extractorPlugins = this.options.plugins.filter((p) => p.type === "extractor");
29
- this.customPlugins = this.options.plugins.filter((p) => p.type === "custom");
30
- }
31
- static get version() {
32
- return exports.version;
33
- }
34
- get version() {
35
- return exports.version;
36
- }
37
- async play(voiceChannel, song, options = {}) {
38
- if (!(0, _1.isSupportedVoiceChannel)(voiceChannel)) {
39
- throw new _1.DisTubeError("INVALID_TYPE", "BaseGuildVoiceChannel", voiceChannel, "voiceChannel");
40
- }
41
- if (!(0, util_1.isObject)(options))
42
- throw new _1.DisTubeError("INVALID_TYPE", "object", options, "options");
43
- const { textChannel, member, skip, message, metadata } = {
44
- member: voiceChannel.guild.me ?? undefined,
45
- textChannel: options?.message?.channel,
46
- skip: false,
47
- ...options,
48
- };
49
- let position = Number(options.position);
50
- if (!position) {
51
- if (skip && position !== 0)
52
- position = 1;
53
- else
54
- position = 0;
55
- }
56
- if (message && !(0, _1.isMessageInstance)(message)) {
57
- throw new _1.DisTubeError("INVALID_TYPE", ["Discord.Message", "a falsy value"], message, "options.message");
58
- }
59
- if (textChannel && !(0, _1.isTextChannelInstance)(textChannel)) {
60
- throw new _1.DisTubeError("INVALID_TYPE", "Discord.GuildTextBasedChannel", textChannel, "options.textChannel");
61
- }
62
- if (member && !(0, _1.isMemberInstance)(member)) {
63
- throw new _1.DisTubeError("INVALID_TYPE", "Discord.GuildMember", member, "options.member");
64
- }
65
- try {
66
- if (typeof song === "string") {
67
- for (const plugin of this.customPlugins) {
68
- if (await plugin.validate(song)) {
69
- return plugin.play(voiceChannel, song, options);
70
- }
71
- }
72
- }
73
- let queue = this.getQueue(voiceChannel);
74
- const queuing = !!queue && !queue._taskQueue.hasResolveTask;
75
- if (queuing)
76
- await queue?._taskQueue.queuing(true);
77
- try {
78
- if (song instanceof _1.SearchResult && song.type === "playlist")
79
- song = song.url;
80
- if (typeof song === "string" && ytpl_1.default.validateID(song)) {
81
- song = await this.handler.resolvePlaylist(song, { member, metadata });
82
- }
83
- if (typeof song === "string" && !(0, util_1.isURL)(song)) {
84
- if (!message) {
85
- song = (await this.search(song, { limit: 1 }))[0];
86
- }
87
- else {
88
- const result = await this.handler.searchSong(message, song);
89
- if (!result)
90
- return;
91
- song = result;
92
- }
93
- }
94
- song = await this.handler.resolveSong(song, { member, metadata });
95
- if (song instanceof _1.Playlist) {
96
- await this.handler.handlePlaylist(voiceChannel, song, { textChannel, skip, position });
97
- }
98
- else if (!this.options.nsfw && song.age_restricted && !textChannel?.nsfw) {
99
- throw new _1.DisTubeError("NON_NSFW");
100
- }
101
- else {
102
- queue = this.getQueue(voiceChannel);
103
- if (queue) {
104
- queue.addToQueue(song, position);
105
- if (skip)
106
- queue.skip();
107
- else
108
- this.emit("addSong", queue, song);
109
- }
110
- else {
111
- const newQueue = await this.queues.create(voiceChannel, song, textChannel);
112
- if (newQueue instanceof _1.Queue) {
113
- if (this.options.emitAddSongWhenCreatingQueue)
114
- this.emit("addSong", newQueue, song);
115
- this.emit("playSong", newQueue, song);
116
- }
117
- }
118
- }
119
- }
120
- finally {
121
- if (queuing)
122
- queue?._taskQueue.resolve();
123
- }
124
- }
125
- catch (e) {
126
- if (!(e instanceof _1.DisTubeError)) {
127
- try {
128
- e.name = "PlayError";
129
- e.message = `${song?.url || song}\n${e.message}`;
130
- }
131
- catch { }
132
- }
133
- this.emitError(e, textChannel);
134
- }
135
- }
136
- async createCustomPlaylist(songs, options = {}) {
137
- const { member, properties, parallel, metadata } = { parallel: true, ...options };
138
- if (!Array.isArray(songs))
139
- throw new _1.DisTubeError("INVALID_TYPE", "Array", songs, "songs");
140
- if (!songs.length)
141
- throw new _1.DisTubeError("EMPTY_ARRAY", "songs");
142
- const filteredSongs = songs.filter(song => song instanceof _1.Song || (song instanceof _1.SearchResult && song.type === "video") || (0, util_1.isURL)(song));
143
- if (!filteredSongs.length)
144
- throw new _1.DisTubeError("NO_VALID_SONG");
145
- if (member && !(0, _1.isMemberInstance)(member)) {
146
- throw new _1.DisTubeError("INVALID_TYPE", "Discord.Member", member, "options.member");
147
- }
148
- if (!filteredSongs.length)
149
- throw new _1.DisTubeError("NO_VALID_SONG");
150
- let resolvedSongs;
151
- if (parallel) {
152
- const promises = filteredSongs.map((song) => this.handler.resolveSong(song, { member, metadata }).catch(() => undefined));
153
- resolvedSongs = (await Promise.all(promises)).filter((s) => !!s);
154
- }
155
- else {
156
- const resolved = [];
157
- for (const song of filteredSongs) {
158
- resolved.push(await this.handler.resolveSong(song, { member, metadata }).catch(() => undefined));
159
- }
160
- resolvedSongs = resolved.filter((s) => !!s);
161
- }
162
- return new _1.Playlist(resolvedSongs, { member, properties, metadata });
163
- }
164
- async search(string, options = {}) {
165
- const opts = { type: "video", limit: 10, safeSearch: false, ...options };
166
- if (typeof opts.type !== "string" || !["video", "playlist"].includes(opts.type)) {
167
- throw new _1.DisTubeError("INVALID_TYPE", ["video", "playlist"], opts.type, "options.type");
168
- }
169
- if (typeof opts.limit !== "number")
170
- throw new _1.DisTubeError("INVALID_TYPE", "number", opts.limit, "options.limit");
171
- if (opts.limit < 1)
172
- throw new _1.DisTubeError("NUMBER_COMPARE", "option.limit", "bigger or equal to", 1);
173
- if (typeof opts.safeSearch !== "boolean") {
174
- throw new _1.DisTubeError("INVALID_TYPE", "boolean", opts.safeSearch, "options.safeSearch");
175
- }
176
- try {
177
- const search = await (0, ytsr_1.default)(string, opts);
178
- const results = search.items.map(i => new _1.SearchResult(i));
179
- if (results.length === 0)
180
- throw new _1.DisTubeError("NO_RESULT");
181
- return results;
182
- }
183
- catch (e) {
184
- if (options.retried)
185
- throw e;
186
- options.retried = true;
187
- return this.search(string, options);
188
- }
189
- }
190
- getQueue(guild) {
191
- return this.queues.get(guild);
192
- }
193
- pause(guild) {
194
- const q = this.getQueue(guild);
195
- if (!q)
196
- throw new _1.DisTubeError("NO_QUEUE");
197
- return q.pause();
198
- }
199
- resume(guild) {
200
- const q = this.getQueue(guild);
201
- if (!q)
202
- throw new _1.DisTubeError("NO_QUEUE");
203
- return q.resume();
204
- }
205
- stop(guild) {
206
- const q = this.getQueue(guild);
207
- if (!q)
208
- throw new _1.DisTubeError("NO_QUEUE");
209
- return q.stop();
210
- }
211
- setVolume(guild, percent) {
212
- const q = this.getQueue(guild);
213
- if (!q)
214
- throw new _1.DisTubeError("NO_QUEUE");
215
- return q.setVolume(percent);
216
- }
217
- skip(guild) {
218
- const q = this.getQueue(guild);
219
- if (!q)
220
- throw new _1.DisTubeError("NO_QUEUE");
221
- return q.skip();
222
- }
223
- previous(guild) {
224
- const q = this.getQueue(guild);
225
- if (!q)
226
- throw new _1.DisTubeError("NO_QUEUE");
227
- return q.previous();
228
- }
229
- shuffle(guild) {
230
- const q = this.getQueue(guild);
231
- if (!q)
232
- throw new _1.DisTubeError("NO_QUEUE");
233
- return q.shuffle();
234
- }
235
- jump(guild, num) {
236
- const q = this.getQueue(guild);
237
- if (!q)
238
- throw new _1.DisTubeError("NO_QUEUE");
239
- return q.jump(num);
240
- }
241
- setRepeatMode(guild, mode) {
242
- const q = this.getQueue(guild);
243
- if (!q)
244
- throw new _1.DisTubeError("NO_QUEUE");
245
- return q.setRepeatMode(mode);
246
- }
247
- toggleAutoplay(guild) {
248
- const q = this.getQueue(guild);
249
- if (!q)
250
- throw new _1.DisTubeError("NO_QUEUE");
251
- q.autoplay = !q.autoplay;
252
- return q.autoplay;
253
- }
254
- addRelatedSong(guild) {
255
- const q = this.getQueue(guild);
256
- if (!q)
257
- throw new _1.DisTubeError("NO_QUEUE");
258
- return q.addRelatedSong();
259
- }
260
- seek(guild, time) {
261
- const q = this.getQueue(guild);
262
- if (!q)
263
- throw new _1.DisTubeError("NO_QUEUE");
264
- return q.seek(time);
265
- }
266
- emitError(error, channel) {
267
- if (this.listeners("error").length) {
268
- this.emit("error", channel, error);
269
- }
270
- else {
271
- console.error(error);
272
- console.warn("Unhandled 'error' event.");
273
- console.warn("See: https://distube.js.org/#/docs/DisTube/stable/class/DisTube?scrollTo=e-error and https://nodejs.org/api/events.html#events_error_events");
274
- }
275
- }
276
- }
277
- exports.DisTube = DisTube;
278
- exports.default = DisTube;
279
- //# sourceMappingURL=DisTube.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DisTube.js","sourceRoot":"","sources":["../src/DisTube.ts"],"names":[],"mappings":";;;;;;AAAA,yDAAiC;AACjC,yDAAiC;AACjC,iCAAuD;AACvD,2DAAkD;AAClD,wBAkBW;AAMI,eAAO,GAA0B,OAAO,CAAC,iBAAiB,CAAC,SAAC;AAM3E,MAAa,OAAQ,SAAQ,iCAA2B;IAsBtD,YAAY,MAAc,EAAE,MAAsB,EAAE;QAClD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,IAAA,mBAAgB,EAAC,MAAM,CAAC;YAAE,MAAM,IAAI,eAAY,CAAC,cAAc,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAK1G,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAA,mBAAY,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAK7B,IAAI,CAAC,OAAO,GAAG,IAAI,UAAO,CAAC,GAAG,CAAC,CAAC;QAKhC,IAAI,CAAC,MAAM,GAAG,IAAI,sBAAmB,CAAC,IAAI,CAAC,CAAC;QAM5C,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAc,CAAC,IAAI,CAAC,CAAC;QAKxC,IAAI,CAAC,MAAM,GAAG,IAAI,eAAY,CAAC,IAAI,CAAC,CAAC;QAKrC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,iBAAc,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAEpE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,aAAU,EAAE,EAAE,IAAI,cAAW,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAM5C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAwB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QAMzG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,KAAK,OAAO;QAChB,OAAO,eAAO,CAAC;IACjB,CAAC;IAMD,IAAI,OAAO;QACT,OAAO,eAAO,CAAC;IACjB,CAAC;IAmCD,KAAK,CAAC,IAAI,CACR,YAA+B,EAC/B,IAA6C,EAC7C,UAOI,EAAE;QAEN,IAAI,CAAC,IAAA,0BAAuB,EAAC,YAAY,CAAC,EAAE;YAC1C,MAAM,IAAI,eAAY,CAAC,cAAc,EAAE,uBAAuB,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;SAC/F;QACD,IAAI,CAAC,IAAA,eAAQ,EAAC,OAAO,CAAC;YAAE,MAAM,IAAI,eAAY,CAAC,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAE7F,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG;YACvD,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,SAAS;YAC1C,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;YACtC,IAAI,EAAE,KAAK;YACX,GAAG,OAAO;SACX,CAAC;QAEF,IAAI,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,IAAI,IAAI,QAAQ,KAAK,CAAC;gBAAE,QAAQ,GAAG,CAAC,CAAC;;gBACpC,QAAQ,GAAG,CAAC,CAAC;SACnB;QAED,IAAI,OAAO,IAAI,CAAC,IAAA,oBAAiB,EAAC,OAAO,CAAC,EAAE;YAC1C,MAAM,IAAI,eAAY,CAAC,cAAc,EAAE,CAAC,iBAAiB,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;SAC1G;QACD,IAAI,WAAW,IAAI,CAAC,IAAA,wBAAqB,EAAC,WAAW,CAAC,EAAE;YACtD,MAAM,IAAI,eAAY,CAAC,cAAc,EAAE,+BAA+B,EAAE,WAAW,EAAE,qBAAqB,CAAC,CAAC;SAC7G;QACD,IAAI,MAAM,IAAI,CAAC,IAAA,mBAAgB,EAAC,MAAM,CAAC,EAAE;YACvC,MAAM,IAAI,eAAY,CAAC,cAAc,EAAE,qBAAqB,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;SACzF;QACD,IAAI;YACF,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;gBAC5B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE;oBACvC,IAAI,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;wBAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;qBACjD;iBACF;aACF;YACD,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC;YAC5D,IAAI,OAAO;gBAAE,MAAM,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI;gBACF,IAAI,IAAI,YAAY,eAAY,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;oBAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;gBAC9E,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,cAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;oBACrD,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;iBACvE;gBACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAA,YAAK,EAAC,IAAI,CAAC,EAAE;oBAC5C,IAAI,CAAC,OAAO,EAAE;wBACZ,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBACnD;yBAAM;wBACL,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;wBAC5D,IAAI,CAAC,MAAM;4BAAE,OAAO;wBACpB,IAAI,GAAG,MAAM,CAAC;qBACf;iBACF;gBACD,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAClE,IAAI,IAAI,YAAY,WAAQ,EAAE;oBAC5B,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;iBACxF;qBAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,CAAE,WAA2B,EAAE,IAAI,EAAE;oBAC3F,MAAM,IAAI,eAAY,CAAC,UAAU,CAAC,CAAC;iBACpC;qBAAM;oBACL,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;oBACpC,IAAI,KAAK,EAAE;wBACT,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;wBACjC,IAAI,IAAI;4BAAE,KAAK,CAAC,IAAI,EAAE,CAAC;;4BAClB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;qBACxC;yBAAM;wBACL,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;wBAC3E,IAAI,QAAQ,YAAY,QAAK,EAAE;4BAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,4BAA4B;gCAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;4BACpF,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;yBACvC;qBACF;iBACF;aACF;oBAAS;gBACR,IAAI,OAAO;oBAAE,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC;aAC1C;SACF;QAAC,OAAO,CAAM,EAAE;YACf,IAAI,CAAC,CAAC,CAAC,YAAY,eAAY,CAAC,EAAE;gBAChC,IAAI;oBACF,CAAC,CAAC,IAAI,GAAG,WAAW,CAAC;oBACrB,CAAC,CAAC,OAAO,GAAG,GAAI,IAAa,EAAE,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC5D;gBAAC,MAAM,GAAE;aACX;YACD,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;SAChC;IACH,CAAC;IAoBD,KAAK,CAAC,oBAAoB,CACxB,KAAuC,EACvC,UAKI,EAAE;QAEN,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;QAClF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,eAAY,CAAC,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3F,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,MAAM,IAAI,eAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAChC,IAAI,CAAC,EAAE,CAAC,IAAI,YAAY,OAAI,IAAI,CAAC,IAAI,YAAY,eAAY,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,IAAA,YAAK,EAAC,IAAI,CAAC,CACvG,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,MAAM;YAAE,MAAM,IAAI,eAAY,CAAC,eAAe,CAAC,CAAC;QACnE,IAAI,MAAM,IAAI,CAAC,IAAA,mBAAgB,EAAC,MAAM,CAAC,EAAE;YACvC,MAAM,IAAI,eAAY,CAAC,cAAc,EAAE,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;SACpF;QACD,IAAI,CAAC,aAAa,CAAC,MAAM;YAAE,MAAM,IAAI,eAAY,CAAC,eAAe,CAAC,CAAC;QACnE,IAAI,aAAqB,CAAC;QAC1B,IAAI,QAAQ,EAAE;YACZ,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAkC,EAAE,EAAE,CACxE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAC5E,CAAC;YACF,aAAa,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAM,EAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAClF;aAAM;YACL,MAAM,QAAQ,GAAG,EAAE,CAAC;YACpB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE;gBAChC,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;aAClG;YACD,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAM,EAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7D;QACD,OAAO,IAAI,WAAQ,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvE,CAAC;IAcD,KAAK,CAAC,MAAM,CACV,MAAc,EACd,UAAoG,EAAE;QAEtG,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,OAAgB,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;QAClF,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC/E,MAAM,IAAI,eAAY,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;SAC1F;QACD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,MAAM,IAAI,eAAY,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QAClH,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC;YAAE,MAAM,IAAI,eAAY,CAAC,gBAAgB,EAAE,cAAc,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC;QACtG,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;YACxC,MAAM,IAAI,eAAY,CAAC,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;SAC1F;QAED,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAA,cAAI,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,eAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,eAAY,CAAC,WAAW,CAAC,CAAC;YAC9D,OAAO,OAAO,CAAC;SAChB;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,OAAO,CAAC,OAAO;gBAAE,MAAM,CAAC,CAAC;YAC7B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YACvB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACrC;IACH,CAAC;IAoBD,QAAQ,CAAC,KAAwB;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAQD,KAAK,CAAC,KAAwB;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,eAAY,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAQD,MAAM,CAAC,KAAwB;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,eAAY,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;IACpB,CAAC;IAkBD,IAAI,CAAC,KAAwB;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,eAAY,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAClB,CAAC;IAiBD,SAAS,CAAC,KAAwB,EAAE,OAAe;QACjD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,eAAY,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAkBD,IAAI,CAAC,KAAwB;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,eAAY,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAClB,CAAC;IAgBD,QAAQ,CAAC,KAAwB;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,eAAY,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtB,CAAC;IAeD,OAAO,CAAC,KAAwB;QAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,eAAY,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;IAoBD,IAAI,CAAC,KAAwB,EAAE,GAAW;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,eAAY,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAmCD,aAAa,CAAC,KAAwB,EAAE,IAAa;QACnD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,eAAY,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAkBD,cAAc,CAAC,KAAwB;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,eAAY,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;QACzB,OAAO,CAAC,CAAC,QAAQ,CAAC;IACpB,CAAC;IAOD,cAAc,CAAC,KAAwB;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,eAAY,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC;IAC5B,CAAC;IAgBD,IAAI,CAAC,KAAwB,EAAE,IAAY;QACzC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,eAAY,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAQD,SAAS,CAAC,KAAY,EAAE,OAA+B;QACrD,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;YAClC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;SACpC;aAAM;YAEL,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CACV,6IAA6I,CAC9I,CAAC;SAEH;IACH,CAAC;CACF;AAnlBD,0BAmlBC;AAED,kBAAe,OAAO,CAAC","sourcesContent":["import ytpl from \"@distube/ytpl\";\nimport ytsr from \"@distube/ytsr\";\nimport { checkIntents, isObject, isURL } from \"./util\";\nimport { TypedEmitter } from \"tiny-typed-emitter\";\nimport {\n DisTubeError,\n DisTubeHandler,\n DisTubeVoiceManager,\n HTTPPlugin,\n HTTPSPlugin,\n Options,\n Playlist,\n Queue,\n QueueManager,\n SearchResult,\n Song,\n defaultFilters,\n isClientInstance,\n isMemberInstance,\n isMessageInstance,\n isSupportedVoiceChannel,\n isTextChannelInstance,\n} from \".\";\nimport type { Client, GuildMember, GuildTextBasedChannel, Message, TextChannel, VoiceBasedChannel } from \"discord.js\";\nimport type { CustomPlugin, DisTubeEvents, DisTubeOptions, ExtractorPlugin, Filters, GuildIdResolvable } from \".\";\n\n// Cannot be `import` as it's not under TS root dir\n// eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports\nexport const { version }: { version: string } = require(\"../package.json\");\n\n/**\n * DisTube class\n * @extends EventEmitter\n */\nexport class DisTube extends TypedEmitter<DisTubeEvents> {\n readonly handler: DisTubeHandler;\n readonly options: Options;\n readonly client: Client;\n readonly queues: QueueManager;\n readonly voices: DisTubeVoiceManager;\n readonly extractorPlugins: ExtractorPlugin[];\n readonly customPlugins: CustomPlugin[];\n readonly filters: Filters;\n /**\n * Create a new DisTube class.\n * @param {Discord.Client} client Discord.JS client\n * @param {DisTubeOptions} [otp] Custom DisTube options\n * @example\n * const Discord = require('discord.js'),\n * DisTube = require('distube'),\n * client = new Discord.Client();\n * // Create a new DisTube\n * const distube = new DisTube.default(client, { searchSongs: 10 });\n * // client.DisTube = distube // make it access easily\n * client.login(\"Your Discord Bot Token\")\n */\n constructor(client: Client, otp: DisTubeOptions = {}) {\n super();\n this.setMaxListeners(1);\n if (!isClientInstance(client)) throw new DisTubeError(\"INVALID_TYPE\", \"Discord.Client\", client, \"client\");\n /**\n * Discord.JS client\n * @type {Discord.Client}\n */\n this.client = client;\n checkIntents(client.options);\n /**\n * DisTube options\n * @type {DisTubeOptions}\n */\n this.options = new Options(otp);\n /**\n * Voice connections manager\n * @type {DisTubeVoiceManager}\n */\n this.voices = new DisTubeVoiceManager(this);\n /**\n * DisTube's Handler\n * @type {DisTubeHandler}\n * @private\n */\n this.handler = new DisTubeHandler(this);\n /**\n * Queues manager\n * @type {QueueManager}\n */\n this.queues = new QueueManager(this);\n /**\n * DisTube filters\n * @type {Filters}\n */\n this.filters = { ...defaultFilters, ...this.options.customFilters };\n // Default plugin\n this.options.plugins.push(new HTTPPlugin(), new HTTPSPlugin());\n this.options.plugins.map(p => p.init(this));\n /**\n * Extractor Plugins\n * @type {ExtractorPlugin[]}\n * @private\n */\n this.extractorPlugins = this.options.plugins.filter((p): p is ExtractorPlugin => p.type === \"extractor\");\n /**\n * Custom Plugins\n * @type {CustomPlugin[]}\n * @private\n */\n this.customPlugins = this.options.plugins.filter((p): p is CustomPlugin => p.type === \"custom\");\n }\n\n static get version() {\n return version;\n }\n\n /**\n * DisTube version\n * @type {string}\n */\n get version() {\n return version;\n }\n\n /**\n * Play / add a song or playlist from url. Search and play a song if it is not a valid url.\n *\n * @param {Discord.BaseGuildVoiceChannel} voiceChannel The channel will be joined if the bot isn't in any channels,\n * the bot will be moved to this channel if `options.move` is `true`\n * @param {string|Song|SearchResult|Playlist} song URL | Search string |\n * {@link Song} | {@link SearchResult} | {@link Playlist}\n * @param {Object} [options] Optional options\n * @param {Discord.GuildMember} [options.member] Requested user (default is your bot)\n * @param {Discord.BaseGuildTextChannel} [options.textChannel] Default {@link Queue#textChannel}\n * @param {boolean} [options.skip=false]\n * Skip the playing song (if exists) and play the added song/playlist if `position` is 1.\n * If `position` is defined and not equal to 1, it will skip to the next song instead of the added song\n * @param {number} [options.position=0] Position of the song/playlist to add to the queue,\n * <= 0 to add to the end of the queue.\n * @param {Discord.Message} [options.message] Called message (For built-in search events. If this is a {@link https://developer.mozilla.org/en-US/docs/Glossary/Falsy|falsy value}, it will play the first result instead)\n * @param {*} [options.metadata] Optional metadata that can be attached to the song/playlist will be played,\n * This is useful for identification purposes when the song/playlist is passed around in events.\n * See {@link Song#metadata} or {@link Playlist#metadata}\n * @example\n * client.on('message', (message) => {\n * if (!message.content.startsWith(config.prefix)) return;\n * const args = message.content.slice(config.prefix.length).trim().split(/ +/g);\n * const command = args.shift();\n * if (command == \"play\")\n * distube.play(message.member.voice.channel, args.join(\" \"), {\n * member: message.member,\n * textChannel: message.channel,\n * message\n * });\n * });\n * @returns {Promise<void>}\n */\n async play(\n voiceChannel: VoiceBasedChannel,\n song: string | Song | SearchResult | Playlist,\n options: {\n skip?: boolean;\n position?: number;\n member?: GuildMember;\n textChannel?: GuildTextBasedChannel;\n message?: Message;\n metadata?: any;\n } = {},\n ): Promise<void> {\n if (!isSupportedVoiceChannel(voiceChannel)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"BaseGuildVoiceChannel\", voiceChannel, \"voiceChannel\");\n }\n if (!isObject(options)) throw new DisTubeError(\"INVALID_TYPE\", \"object\", options, \"options\");\n\n const { textChannel, member, skip, message, metadata } = {\n member: voiceChannel.guild.me ?? undefined,\n textChannel: options?.message?.channel,\n skip: false,\n ...options,\n };\n\n let position = Number(options.position);\n if (!position) {\n if (skip && position !== 0) position = 1;\n else position = 0;\n }\n\n if (message && !isMessageInstance(message)) {\n throw new DisTubeError(\"INVALID_TYPE\", [\"Discord.Message\", \"a falsy value\"], message, \"options.message\");\n }\n if (textChannel && !isTextChannelInstance(textChannel)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"Discord.GuildTextBasedChannel\", textChannel, \"options.textChannel\");\n }\n if (member && !isMemberInstance(member)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"Discord.GuildMember\", member, \"options.member\");\n }\n try {\n if (typeof song === \"string\") {\n for (const plugin of this.customPlugins) {\n if (await plugin.validate(song)) {\n return plugin.play(voiceChannel, song, options);\n }\n }\n }\n let queue = this.getQueue(voiceChannel);\n const queuing = !!queue && !queue._taskQueue.hasResolveTask;\n if (queuing) await queue?._taskQueue.queuing(true);\n try {\n if (song instanceof SearchResult && song.type === \"playlist\") song = song.url;\n if (typeof song === \"string\" && ytpl.validateID(song)) {\n song = await this.handler.resolvePlaylist(song, { member, metadata });\n }\n if (typeof song === \"string\" && !isURL(song)) {\n if (!message) {\n song = (await this.search(song, { limit: 1 }))[0];\n } else {\n const result = await this.handler.searchSong(message, song);\n if (!result) return;\n song = result;\n }\n }\n song = await this.handler.resolveSong(song, { member, metadata });\n if (song instanceof Playlist) {\n await this.handler.handlePlaylist(voiceChannel, song, { textChannel, skip, position });\n } else if (!this.options.nsfw && song.age_restricted && !(textChannel as TextChannel)?.nsfw) {\n throw new DisTubeError(\"NON_NSFW\");\n } else {\n queue = this.getQueue(voiceChannel);\n if (queue) {\n queue.addToQueue(song, position);\n if (skip) queue.skip();\n else this.emit(\"addSong\", queue, song);\n } else {\n const newQueue = await this.queues.create(voiceChannel, song, textChannel);\n if (newQueue instanceof Queue) {\n if (this.options.emitAddSongWhenCreatingQueue) this.emit(\"addSong\", newQueue, song);\n this.emit(\"playSong\", newQueue, song);\n }\n }\n }\n } finally {\n if (queuing) queue?._taskQueue.resolve();\n }\n } catch (e: any) {\n if (!(e instanceof DisTubeError)) {\n try {\n e.name = \"PlayError\";\n e.message = `${(song as Song)?.url || song}\\n${e.message}`;\n } catch {}\n }\n this.emitError(e, textChannel);\n }\n }\n\n /**\n * Create a custom playlist\n * @returns {Promise<Playlist>}\n * @param {Array<string|Song|SearchResult>} songs Array of url, Song or SearchResult\n * @param {Object} [options] Optional options\n * @param {Discord.GuildMember} [options.message] A message from guild channel | A guild member\n * @param {Object} [options.properties] Additional properties such as `name`\n * @param {boolean} [options.parallel=true] Whether or not fetch the songs in parallel\n * @param {*} [options.metadata] Metadata\n * @example\n * const songs = [\"https://www.youtube.com/watch?v=xxx\", \"https://www.youtube.com/watch?v=yyy\"];\n * const playlist = await distube.createCustomPlaylist(songs, {\n * member: message.member,\n * properties: { name: \"My playlist name\" },\n * parallel: true\n * });\n * distube.play(voiceChannel, playlist, { ... });\n */\n async createCustomPlaylist(\n songs: (string | Song | SearchResult)[],\n options: {\n member?: GuildMember;\n properties?: Record<string, any>;\n parallel?: boolean;\n metadata?: any;\n } = {},\n ): Promise<Playlist> {\n const { member, properties, parallel, metadata } = { parallel: true, ...options };\n if (!Array.isArray(songs)) throw new DisTubeError(\"INVALID_TYPE\", \"Array\", songs, \"songs\");\n if (!songs.length) throw new DisTubeError(\"EMPTY_ARRAY\", \"songs\");\n const filteredSongs = songs.filter(\n song => song instanceof Song || (song instanceof SearchResult && song.type === \"video\") || isURL(song),\n );\n if (!filteredSongs.length) throw new DisTubeError(\"NO_VALID_SONG\");\n if (member && !isMemberInstance(member)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"Discord.Member\", member, \"options.member\");\n }\n if (!filteredSongs.length) throw new DisTubeError(\"NO_VALID_SONG\");\n let resolvedSongs: Song[];\n if (parallel) {\n const promises = filteredSongs.map((song: string | Song | SearchResult) =>\n this.handler.resolveSong(song, { member, metadata }).catch(() => undefined),\n );\n resolvedSongs = (await Promise.all(promises)).filter((s: any): s is Song => !!s);\n } else {\n const resolved = [];\n for (const song of filteredSongs) {\n resolved.push(await this.handler.resolveSong(song, { member, metadata }).catch(() => undefined));\n }\n resolvedSongs = resolved.filter((s: any): s is Song => !!s);\n }\n return new Playlist(resolvedSongs, { member, properties, metadata });\n }\n\n /**\n * Search for a song. You can customize how user answers instead of send a number.\n * Then use {@link DisTube#play} to play it.\n *\n * @param {string} string The string search for\n * @param {Object} options Search options\n * @param {number} [options.limit=10] Limit the results\n * @param {'video'|'playlist'} [options.type='video'] Type of results (`video` or `playlist`).\n * @param {boolean} [options.safeSearch=false] Whether or not use safe search (YouTube restricted mode)\n * @throws {Error}\n * @returns {Promise<Array<SearchResult>>} Array of results\n */\n async search(\n string: string,\n options: { type?: \"video\" | \"playlist\"; limit?: number; safeSearch?: boolean; retried?: boolean } = {},\n ): Promise<Array<SearchResult>> {\n const opts = { type: \"video\" as const, limit: 10, safeSearch: false, ...options };\n if (typeof opts.type !== \"string\" || ![\"video\", \"playlist\"].includes(opts.type)) {\n throw new DisTubeError(\"INVALID_TYPE\", [\"video\", \"playlist\"], opts.type, \"options.type\");\n }\n if (typeof opts.limit !== \"number\") throw new DisTubeError(\"INVALID_TYPE\", \"number\", opts.limit, \"options.limit\");\n if (opts.limit < 1) throw new DisTubeError(\"NUMBER_COMPARE\", \"option.limit\", \"bigger or equal to\", 1);\n if (typeof opts.safeSearch !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", opts.safeSearch, \"options.safeSearch\");\n }\n\n try {\n const search = await ytsr(string, opts);\n const results = search.items.map(i => new SearchResult(i));\n if (results.length === 0) throw new DisTubeError(\"NO_RESULT\");\n return results;\n } catch (e) {\n if (options.retried) throw e;\n options.retried = true;\n return this.search(string, options);\n }\n }\n\n /**\n * Get the guild queue\n * @param {GuildIdResolvable} guild The type can be resolved to give a {@link Queue}\n * @returns {Queue?}\n * @throws {Error}\n * @example\n * client.on('message', (message) => {\n * if (!message.content.startsWith(config.prefix)) return;\n * const args = message.content.slice(config.prefix.length).trim().split(/ +/g);\n * const command = args.shift();\n * if (command == \"queue\") {\n * const queue = distube.getQueue(message);\n * message.channel.send('Current queue:\\n' + queue.songs.map((song, id) =>\n * `**${id+1}**. [${song.name}](${song.url}) - \\`${song.formattedDuration}\\``\n * ).join(\"\\n\"));\n * }\n * });\n */\n getQueue(guild: GuildIdResolvable): Queue | undefined {\n return this.queues.get(guild);\n }\n\n /**\n * Pause the guild stream\n * @param {GuildIdResolvable} guild The type can be resolved to give a {@link Queue}\n * @returns {Queue} The guild queue\n * @throws {Error}\n */\n pause(guild: GuildIdResolvable): Queue {\n const q = this.getQueue(guild);\n if (!q) throw new DisTubeError(\"NO_QUEUE\");\n return q.pause();\n }\n\n /**\n * Resume the guild stream\n * @param {GuildIdResolvable} guild The type can be resolved to give a {@link Queue}\n * @returns {Queue} The guild queue\n * @throws {Error}\n */\n resume(guild: GuildIdResolvable): Queue {\n const q = this.getQueue(guild);\n if (!q) throw new DisTubeError(\"NO_QUEUE\");\n return q.resume();\n }\n\n /**\n * Stop the guild stream\n * @param {GuildIdResolvable} guild The type can be resolved to give a {@link Queue}\n * @returns {Promise<void>}\n * @throws {Error}\n * @example\n * client.on('message', (message) => {\n * if (!message.content.startsWith(config.prefix)) return;\n * const args = message.content.slice(config.prefix.length).trim().split(/ +/g);\n * const command = args.shift();\n * if (command == \"stop\") {\n * distube.stop(message);\n * message.channel.send(\"Stopped the queue!\");\n * }\n * });\n */\n stop(guild: GuildIdResolvable): Promise<void> {\n const q = this.getQueue(guild);\n if (!q) throw new DisTubeError(\"NO_QUEUE\");\n return q.stop();\n }\n\n /**\n * Set the guild stream's volume\n * @param {GuildIdResolvable} guild The type can be resolved to give a {@link Queue}\n * @param {number} percent The percentage of volume you want to set\n * @returns {Queue} The guild queue\n * @throws {Error}\n * @example\n * client.on('message', (message) => {\n * if (!message.content.startsWith(config.prefix)) return;\n * const args = message.content.slice(config.prefix.length).trim().split(/ +/g);\n * const command = args.shift();\n * if (command == \"volume\")\n * distube.setVolume(message, Number(args[0]));\n * });\n */\n setVolume(guild: GuildIdResolvable, percent: number): Queue {\n const q = this.getQueue(guild);\n if (!q) throw new DisTubeError(\"NO_QUEUE\");\n return q.setVolume(percent);\n }\n\n /**\n * Skip the playing song if there is a next song in the queue.\n * <info>If {@link Queue#autoplay} is `true` and there is no up next song,\n * DisTube will add and play a related song.</info>\n * @param {GuildIdResolvable} guild The type can be resolved to give a {@link Queue}\n * @returns {Promise<Song>} The new Song will be played\n * @throws {Error}\n * @example\n * client.on('message', (message) => {\n * if (!message.content.startsWith(config.prefix)) return;\n * const args = message.content.slice(config.prefix.length).trim().split(/ +/g);\n * const command = args.shift();\n * if (command == \"skip\")\n * distube.skip(message);\n * });\n */\n skip(guild: GuildIdResolvable): Promise<Song> {\n const q = this.getQueue(guild);\n if (!q) throw new DisTubeError(\"NO_QUEUE\");\n return q.skip();\n }\n\n /**\n * Play the previous song\n * @param {GuildIdResolvable} guild The type can be resolved to give a {@link Queue}\n * @returns {Promise<Song>} The new Song will be played\n * @throws {Error}\n * @example\n * client.on('message', (message) => {\n * if (!message.content.startsWith(config.prefix)) return;\n * const args = message.content.slice(config.prefix.length).trim().split(/ +/g);\n * const command = args.shift();\n * if (command == \"previous\")\n * distube.previous(message);\n * });\n */\n previous(guild: GuildIdResolvable): Promise<Song> {\n const q = this.getQueue(guild);\n if (!q) throw new DisTubeError(\"NO_QUEUE\");\n return q.previous();\n }\n\n /**\n * Shuffle the guild queue songs\n * @param {GuildIdResolvable} guild The type can be resolved to give a {@link Queue}\n * @returns {Promise<Queue>} The guild queue\n * @example\n * client.on('message', (message) => {\n * if (!message.content.startsWith(config.prefix)) return;\n * const args = message.content.slice(config.prefix.length).trim().split(/ +/g);\n * const command = args.shift();\n * if (command == \"shuffle\")\n * distube.shuffle(message);\n * });\n */\n shuffle(guild: GuildIdResolvable): Promise<Queue> {\n const q = this.getQueue(guild);\n if (!q) throw new DisTubeError(\"NO_QUEUE\");\n return q.shuffle();\n }\n\n /**\n * Jump to the song number in the queue.\n * The next one is 1, 2,...\n * The previous one is -1, -2,...\n * @param {GuildIdResolvable} guild The type can be resolved to give a {@link Queue}\n * @param {number} num The song number to play\n * @returns {Promise<Song>} The new Song will be played\n * @throws {Error} if `num` is invalid number (0 < num < {@link Queue#songs}.length)\n * @example\n * client.on('message', (message) => {\n * if (!message.content.startsWith(config.prefix)) return;\n * const args = message.content.slice(config.prefix.length).trim().split(/ +/g);\n * const command = args.shift();\n * if (command == \"jump\")\n * distube.jump(message, parseInt(args[0]))\n * .catch(err => message.channel.send(\"Invalid song number.\"));\n * });\n */\n jump(guild: GuildIdResolvable, num: number): Promise<Song> {\n const q = this.getQueue(guild);\n if (!q) throw new DisTubeError(\"NO_QUEUE\");\n return q.jump(num);\n }\n\n /**\n * Set the repeat mode of the guild queue.\\\n * Toggle mode `(Disabled -> Song -> Queue -> Disabled ->...)` if `mode` is `undefined`\n * @param {GuildIdResolvable} guild The type can be resolved to give a {@link Queue}\n * @param {RepeatMode?} [mode] The repeat modes (toggle if `undefined`)\n * @returns {RepeatMode} The new repeat mode\n * @example\n * client.on('message', (message) => {\n * if (!message.content.startsWith(config.prefix)) return;\n * const args = message.content.slice(config.prefix.length).trim().split(/ +/g);\n * const command = args.shift();\n * if (command == \"repeat\") {\n * let mode = distube.setRepeatMode(message, parseInt(args[0]));\n * mode = mode ? mode == 2 ? \"Repeat queue\" : \"Repeat song\" : \"Off\";\n * message.channel.send(\"Set repeat mode to `\" + mode + \"`\");\n * }\n * });\n * @example\n * const { RepeatMode } = require(\"distube\");\n * let mode;\n * switch(distube.setRepeatMode(message, parseInt(args[0]))) {\n * case RepeatMode.DISABLED:\n * mode = \"Off\";\n * break;\n * case RepeatMode.SONG:\n * mode = \"Repeat a song\";\n * break;\n * case RepeatMode.QUEUE:\n * mode = \"Repeat all queue\";\n * break;\n * }\n * message.channel.send(\"Set repeat mode to `\" + mode + \"`\");\n */\n setRepeatMode(guild: GuildIdResolvable, mode?: number): number {\n const q = this.getQueue(guild);\n if (!q) throw new DisTubeError(\"NO_QUEUE\");\n return q.setRepeatMode(mode);\n }\n\n /**\n * Toggle autoplay mode\n * @param {GuildIdResolvable} guild The type can be resolved to give a {@link Queue}\n * @returns {boolean} Autoplay mode state\n * @throws {Error}\n * @example\n * client.on('message', (message) => {\n * if (!message.content.startsWith(config.prefix)) return;\n * const args = message.content.slice(config.prefix.length).trim().split(/ +/g);\n * const command = args.shift();\n * if (command == \"autoplay\") {\n * const mode = distube.toggleAutoplay(message);\n * message.channel.send(\"Set autoplay mode to `\" + (mode ? \"On\" : \"Off\") + \"`\");\n * }\n * });\n */\n toggleAutoplay(guild: GuildIdResolvable): boolean {\n const q = this.getQueue(guild);\n if (!q) throw new DisTubeError(\"NO_QUEUE\");\n q.autoplay = !q.autoplay;\n return q.autoplay;\n }\n\n /**\n * Add related song to the queue\n * @param {GuildIdResolvable} guild The type can be resolved to give a {@link Queue}\n * @returns {Promise<Song>} The guild queue\n */\n addRelatedSong(guild: GuildIdResolvable): Promise<Song> {\n const q = this.getQueue(guild);\n if (!q) throw new DisTubeError(\"NO_QUEUE\");\n return q.addRelatedSong();\n }\n\n /**\n * Set the playing time to another position\n * @param {GuildIdResolvable} guild The type can be resolved to give a {@link Queue}\n * @param {number} time Time in seconds\n * @returns {Queue} Seeked queue\n * @example\n * client.on('message', message => {\n * if (!message.content.startsWith(config.prefix)) return;\n * const args = message.content.slice(config.prefix.length).trim().split(/ +/g);\n * const command = args.shift();\n * if (command = 'seek')\n * distube.seek(message, Number(args[0]));\n * });\n */\n seek(guild: GuildIdResolvable, time: number): Queue {\n const q = this.getQueue(guild);\n if (!q) throw new DisTubeError(\"NO_QUEUE\");\n return q.seek(time);\n }\n\n /**\n * Emit error event\n * @param {Error} error error\n * @param {Discord.BaseGuildTextChannel} [channel] Text channel where the error is encountered.\n * @private\n */\n emitError(error: Error, channel?: GuildTextBasedChannel): void {\n if (this.listeners(\"error\").length) {\n this.emit(\"error\", channel, error);\n } else {\n /* eslint-disable no-console */\n console.error(error);\n console.warn(\"Unhandled 'error' event.\");\n console.warn(\n \"See: https://distube.js.org/#/docs/DisTube/stable/class/DisTube?scrollTo=e-error and https://nodejs.org/api/events.html#events_error_events\",\n );\n /* eslint-enable no-console */\n }\n }\n}\n\nexport default DisTube;\n\n/**\n * Emitted after DisTube add a new playlist to the playing {@link Queue}.\n *\n * @event DisTube#addList\n * @param {Queue} queue The guild queue\n * @param {Playlist} playlist Playlist info\n * @example\n * distube.on(\"addList\", (queue, playlist) => queue.textChannel.send(\n * `Added \\`${playlist.name}\\` playlist (${playlist.songs.length} songs) to the queue!`\n * ));\n */\n\n/**\n * Emitted after DisTube add a new song to the playing {@link Queue}.\n *\n * @event DisTube#addSong\n * @param {Queue} queue The guild queue\n * @param {Song} song Added song\n * @example\n * distube.on(\"addSong\", (queue, song) => queue.textChannel.send(\n * `Added ${song.name} - \\`${song.formattedDuration}\\` to the queue by ${song.user}.`\n * ));\n */\n\n/**\n * Emitted when there is no user in the voice channel,\n * {@link DisTubeOptions}.leaveOnEmpty is `true` and there is a playing queue.\n *\n * If there is no playing queue (stopped and {@link DisTubeOptions}.leaveOnStop is `false`),\n * it will leave the channel without emitting this event.\n * @event DisTube#empty\n * @param {Queue} queue The guild queue\n * @example\n * distube.on(\"empty\", queue => queue.textChannel.send(\"Channel is empty. Leaving the channel\"))\n */\n\n/**\n * Emitted when DisTube encounters an error.\n *\n * @event DisTube#error\n * @param {Discord.BaseGuildTextChannel?} channel Text channel where the error is encountered.\n * @param {Error} error The error encountered\n * @example\n * distube.on('error', (channel, e) => {\n * if (channel) channel.send(`An error encountered: ${e}`)\n * else console.error(e)\n * })\n */\n\n/**\n * Emitted when there is no more song in the queue and {@link Queue#autoplay} is `false`.\n * DisTube will leave voice channel if {@link DisTubeOptions}.leaveOnFinish is `true`.\n *\n * @event DisTube#finish\n * @param {Queue} queue The guild queue\n * @example\n * distube.on(\"finish\", queue => queue.textChannel.send(\"No more song in queue\"));\n */\n\n/**\n * Emitted when DisTube initialize a queue to change queue default properties.\n *\n * @event DisTube#initQueue\n * @param {Queue} queue The guild queue\n * @example\n * distube.on(\"initQueue\", queue => {\n * queue.autoplay = false;\n * queue.volume = 100;\n * });\n */\n\n/**\n * Emitted when {@link Queue#autoplay} is `true`, {@link Queue#songs} is empty,\n * and DisTube cannot find related songs to play.\n *\n * @event DisTube#noRelated\n * @param {Queue} queue The guild queue\n * @example\n * distube.on(\"noRelated\", queue => queue.textChannel.send(\"Can't find related video to play.\"));\n */\n\n/**\n * Emitted when DisTube play a song.\n *\n * If {@link DisTubeOptions}.emitNewSongOnly is `true`,\n * this event is not emitted when looping a song or next song is the previous one.\n *\n * @event DisTube#playSong\n * @param {Queue} queue The guild queue\n * @param {Song} song Playing song\n * @example\n * distube.on(\"playSong\", (queue, song) => queue.textChannel.send(\n * `Playing \\`${song.name}\\` - \\`${song.formattedDuration}\\`\\nRequested by: ${song.user}`\n * ));\n */\n\n/**\n * Emitted when DisTube cannot find any results for the query.\n *\n * @event DisTube#searchNoResult\n * @param {Discord.Message} message The user message called play method\n * @param {string} query The search query\n * @example\n * distube.on(\"searchNoResult\", (message, query) => message.channel.send(`No result found for ${query}!`));\n */\n\n/**\n * Emitted when {@link DisTubeOptions|DisTubeOptions.searchSongs} bigger than 0,\n * and song param of {@link DisTube#play} is invalid url.\n * DisTube will wait for user's next message to choose a song manually.\n * <info>{@link https://support.google.com/youtube/answer/7354993|Safe search} is enabled\n * if {@link DisTubeOptions}.nsfw is disabled and the message's channel is not a nsfw channel.</info>\n *\n * @event DisTube#searchResult\n * @param {Discord.Message} message The user message called play method\n * @param {Array<SearchResult>} results Searched results\n * @param {string} query The search query\n * @example\n * // DisTubeOptions.searchSongs > 0\n * distube.on(\"searchResult\", (message, results) => {\n * message.channel.send(`**Choose an option from below**\\n${\n * results.map((song, i) => `**${i + 1}**. ${song.name} - \\`${song.formattedDuration}\\``).join(\"\\n\")\n * }\\n*Enter anything else or wait 60 seconds to cancel*`);\n * });\n */\n\n/**\n * Emitted when {@link DisTubeOptions|DisTubeOptions.searchSongs} bigger than 0,\n * and the search canceled due to {@link DisTubeOptions|DisTubeOptions.searchTimeout}.\n *\n * @event DisTube#searchCancel\n * @param {Discord.Message} message The user message called play method\n * @param {string} query The search query\n * @example\n * // DisTubeOptions.searchSongs > 0\n * distube.on(\"searchCancel\", (message) => message.channel.send(`Searching canceled`));\n */\n\n/**\n * Emitted when {@link DisTubeOptions|DisTubeOptions.searchSongs} bigger than 0,\n * and the search canceled due to user's next message is not a number or out of results range.\n *\n * @event DisTube#searchInvalidAnswer\n * @param {Discord.Message} message The user message called play method\n * @param {Discord.Message} answer The answered message of user\n * @param {string} query The search query\n * @example\n * // DisTubeOptions.searchSongs > 0\n * distube.on(\"searchInvalidAnswer\", (message) => message.channel.send(`You answered an invalid number!`));\n */\n\n/**\n * Emitted when {@link DisTubeOptions|DisTubeOptions.searchSongs} bigger than 0,\n * and after the user chose a search result to play.\n *\n * @event DisTube#searchDone\n * @param {Discord.Message} message The user message called play method\n * @param {Discord.Message} answer The answered message of user\n * @param {string} query The search query\n */\n\n/**\n * Emitted when the bot is disconnected to a voice channel.\n *\n * @event DisTube#disconnect\n * @param {Queue} queue The guild queue\n */\n\n/**\n * Emitted when a {@link Queue} is deleted with any reasons.\n *\n * @event DisTube#deleteQueue\n * @param {Queue} queue The guild queue\n */\n\n/**\n * Emitted when DisTube finished a song.\n *\n * @event DisTube#finishSong\n * @param {Queue} queue The guild queue\n * @param {Song} song Finished song\n */\n"]}
@@ -1,27 +0,0 @@
1
- import type { Filters } from ".";
2
- export declare const defaultFilters: Filters;
3
- export declare const defaultOptions: {
4
- plugins: never[];
5
- emitNewSongOnly: boolean;
6
- leaveOnEmpty: boolean;
7
- leaveOnFinish: boolean;
8
- leaveOnStop: boolean;
9
- savePreviousSongs: boolean;
10
- searchSongs: number;
11
- ytdlOptions: {};
12
- searchCooldown: number;
13
- emptyCooldown: number;
14
- nsfw: boolean;
15
- emitAddSongWhenCreatingQueue: boolean;
16
- emitAddListWhenCreatingQueue: boolean;
17
- };
18
- export declare enum RepeatMode {
19
- DISABLED = 0,
20
- SONG = 1,
21
- QUEUE = 2
22
- }
23
- export declare enum PluginType {
24
- CUSTOM = "custom",
25
- EXTRACTOR = "extractor"
26
- }
27
- //# sourceMappingURL=constant.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../src/constant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC;AAkFjC,eAAO,MAAM,cAAc,EAAE,OAgB5B,CAAC;AA8BF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;CAc1B,CAAC;AASF,oBAAY,UAAU;IACpB,QAAQ,IAAA;IACR,IAAI,IAAA;IACJ,KAAK,IAAA;CACN;AAQD,oBAAY,UAAU;IACpB,MAAM,WAAW;IACjB,SAAS,cAAc;CACxB"}
package/dist/constant.js DELETED
@@ -1,47 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PluginType = exports.RepeatMode = exports.defaultOptions = exports.defaultFilters = void 0;
4
- exports.defaultFilters = {
5
- "3d": "apulsator=hz=0.125",
6
- bassboost: "bass=g=10",
7
- echo: "aecho=0.8:0.9:1000:0.3",
8
- flanger: "flanger",
9
- gate: "agate",
10
- haas: "haas",
11
- karaoke: "stereotools=mlev=0.1",
12
- nightcore: "asetrate=48000*1.25,aresample=48000,bass=g=5",
13
- reverse: "areverse",
14
- vaporwave: "asetrate=48000*0.8,aresample=48000,atempo=1.1",
15
- mcompand: "mcompand",
16
- phaser: "aphaser",
17
- tremolo: "tremolo",
18
- surround: "surround",
19
- earwax: "earwax",
20
- };
21
- exports.defaultOptions = {
22
- plugins: [],
23
- emitNewSongOnly: false,
24
- leaveOnEmpty: true,
25
- leaveOnFinish: false,
26
- leaveOnStop: true,
27
- savePreviousSongs: true,
28
- searchSongs: 0,
29
- ytdlOptions: {},
30
- searchCooldown: 60,
31
- emptyCooldown: 60,
32
- nsfw: false,
33
- emitAddSongWhenCreatingQueue: true,
34
- emitAddListWhenCreatingQueue: true,
35
- };
36
- var RepeatMode;
37
- (function (RepeatMode) {
38
- RepeatMode[RepeatMode["DISABLED"] = 0] = "DISABLED";
39
- RepeatMode[RepeatMode["SONG"] = 1] = "SONG";
40
- RepeatMode[RepeatMode["QUEUE"] = 2] = "QUEUE";
41
- })(RepeatMode = exports.RepeatMode || (exports.RepeatMode = {}));
42
- var PluginType;
43
- (function (PluginType) {
44
- PluginType["CUSTOM"] = "custom";
45
- PluginType["EXTRACTOR"] = "extractor";
46
- })(PluginType = exports.PluginType || (exports.PluginType = {}));
47
- //# sourceMappingURL=constant.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constant.js","sourceRoot":"","sources":["../src/constant.ts"],"names":[],"mappings":";;;AAkFa,QAAA,cAAc,GAAY;IACrC,IAAI,EAAE,oBAAoB;IAC1B,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,wBAAwB;IAC9B,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,sBAAsB;IAC/B,SAAS,EAAE,8CAA8C;IACzD,OAAO,EAAE,UAAU;IACnB,SAAS,EAAE,+CAA+C;IAC1D,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;CACjB,CAAC;AA8BW,QAAA,cAAc,GAAG;IAC5B,OAAO,EAAE,EAAE;IACX,eAAe,EAAE,KAAK;IACtB,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE,KAAK;IACpB,WAAW,EAAE,IAAI;IACjB,iBAAiB,EAAE,IAAI;IACvB,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,EAAE;IACf,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,IAAI,EAAE,KAAK;IACX,4BAA4B,EAAE,IAAI;IAClC,4BAA4B,EAAE,IAAI;CACnC,CAAC;AASF,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,mDAAQ,CAAA;IACR,2CAAI,CAAA;IACJ,6CAAK,CAAA;AACP,CAAC,EAJW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAIrB;AAQD,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,+BAAiB,CAAA;IACjB,qCAAuB,CAAA;AACzB,CAAC,EAHW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAGrB","sourcesContent":["import type { Filters } from \".\";\n\n/**\n * Data that can be resolved to give a guild id string. This can be:\n * - A guild id string | a guild {@link https://discord.js.org/#/docs/main/stable/class/Snowflake|Snowflake}\n * - A {@link https://discord.js.org/#/docs/main/stable/class/Guild|Guild}\n * - A {@link https://discord.js.org/#/docs/main/stable/class/Message|Message}\n * - A {@link https://discord.js.org/#/docs/main/stable/class/BaseGuildVoiceChannel|BaseGuildVoiceChannel}\n * - A {@link https://discord.js.org/#/docs/main/stable/class/BaseGuildTextChannel|BaseGuildTextChannel}\n * - A {@link https://discord.js.org/#/docs/main/stable/class/VoiceState|VoiceState}\n * - A {@link https://discord.js.org/#/docs/main/stable/class/GuildMember|GuildMember}\n * - A {@link https://discord.js.org/#/docs/main/stable/class/Interaction|Interaction}\n * - A {@link DisTubeVoice}\n * - A {@link Queue}\n * @typedef {\n * Discord.Snowflake|\n * Discord.Guild|\n * Discord.Message|\n * Discord.BaseGuildVoiceChannel|\n * Discord.BaseGuildTextChannel|\n * Discord.VoiceState|\n * Discord.GuildMember|\n * Discord.Interaction|\n * DisTubeVoice|\n * Queue|\n * string\n * } GuildIdResolvable\n */\n\n/**\n * An FFmpeg audio filter object\n * ```\n * {\n * name: \"bassboost\",\n * value: \"bass=g=10\"\n * }\n * ```\n * @typedef {Object} Filter\n * @prop {string} name Name of the filter\n * @prop {string} value FFmpeg audio filter(s)\n */\n\n/**\n * Data that resolves to give an FFmpeg audio filter. This can be:\n * - A name of a default filters or custom filters (`string`)\n * - A {@link Filter} object\n * @typedef {string|Filter} FilterResolvable\n * @see {@link defaultFilters}\n * @see {@link DisTubeOptions|DisTubeOptions.customFilters}\n */\n\n/**\n * FFmpeg Filters\n * ```\n * {\n * \"Filter Name\": \"Filter Value\",\n * \"bassboost\": \"bass=g=10\"\n * }\n * ```\n * @typedef {Object.<string, string>} Filters\n * @see {@link defaultFilters}\n */\n\n/**\n * Default DisTube audio filters.\n * @typedef {Object} defaultFilters\n * @prop {string} 3d 3d\n * @prop {string} bassboost bassboost\n * @prop {string} echo echo\n * @prop {string} karaoke karaoke\n * @prop {string} nightcore nightcore\n * @prop {string} vaporwave vaporwave\n * @prop {string} flanger flanger\n * @prop {string} gate gate\n * @prop {string} haas haas\n * @prop {string} reverse reverse\n * @prop {string} surround surround\n * @prop {string} mcompand mcompand\n * @prop {string} phaser phaser\n * @prop {string} tremolo tremolo\n * @prop {string} earwax earwax\n */\nexport const defaultFilters: Filters = {\n \"3d\": \"apulsator=hz=0.125\",\n bassboost: \"bass=g=10\",\n echo: \"aecho=0.8:0.9:1000:0.3\",\n flanger: \"flanger\",\n gate: \"agate\",\n haas: \"haas\",\n karaoke: \"stereotools=mlev=0.1\",\n nightcore: \"asetrate=48000*1.25,aresample=48000,bass=g=5\",\n reverse: \"areverse\",\n vaporwave: \"asetrate=48000*0.8,aresample=48000,atempo=1.1\",\n mcompand: \"mcompand\",\n phaser: \"aphaser\",\n tremolo: \"tremolo\",\n surround: \"surround\",\n earwax: \"earwax\",\n};\n\n/**\n * DisTube options.\n * @typedef {Object} DisTubeOptions\n * @prop {Array<CustomPlugin|ExtractorPlugin>} [plugins] DisTube plugins.\n * @prop {boolean} [emitNewSongOnly=false] Whether or not emitting {@link DisTube#event:playSong} event\n * when looping a song or next song is the same as the previous one\n * @prop {boolean} [leaveOnEmpty=true] Whether or not leaving voice channel\n * if the voice channel is empty after {@link DisTubeOptions}.emptyCooldown seconds.\n * @prop {boolean} [leaveOnFinish=false] Whether or not leaving voice channel when the queue ends.\n * @prop {boolean} [leaveOnStop=true] Whether or not leaving voice channel after using {@link DisTube#stop} function.\n * @prop {boolean} [savePreviousSongs=true] Whether or not saving the previous songs of the queue\n * and enable {@link DisTube#previous} method\n * @prop {number} [searchSongs=0] Limit of search results emits in {@link DisTube#event:searchResult} event\n * when {@link DisTube#play} method executed. If `searchSongs <= 1`, play the first result\n * @prop {string} [youtubeCookie] YouTube cookies. Read how to get it in\n * {@link https://github.com/fent/node-ytdl-core/blob/997efdd5dd9063363f6ef668bb364e83970756e7/example/cookies.js#L6-L12|YTDL's Example}\n * @prop {string} [youtubeIdentityToken] If not given; ytdl-core will try to find it.\n * You can find this by going to a video's watch page; viewing the source; and searching for \"ID_TOKEN\".\n * @prop {Filters} [customFilters] Override {@link defaultFilters} or add more ffmpeg filters.\n * Example=`{ \"Filter name\"=\"Filter value\"; \"8d\"=\"apulsator=hz=0.075\" }`\n * @prop {ytdl.getInfoOptions} [ytdlOptions] `ytdl-core` get info options\n * @prop {number} [searchCooldown=60] Built-in search cooldown in seconds (When searchSongs is bigger than 0)\n * @prop {number} [emptyCooldown=60] Built-in leave on empty cooldown in seconds (When leaveOnEmpty is true)\n * @prop {boolean} [nsfw=false] Whether or not playing age-restricted content\n * and disabling safe search in non-NSFW channel.\n * @prop {boolean} [emitAddListWhenCreatingQueue=true] Whether or not emitting `addList` event when creating a new Queue\n * @prop {boolean} [emitAddSongWhenCreatingQueue=true] Whether or not emitting `addSong` event when creating a new Queue\n */\nexport const defaultOptions = {\n plugins: [],\n emitNewSongOnly: false,\n leaveOnEmpty: true,\n leaveOnFinish: false,\n leaveOnStop: true,\n savePreviousSongs: true,\n searchSongs: 0,\n ytdlOptions: {},\n searchCooldown: 60,\n emptyCooldown: 60,\n nsfw: false,\n emitAddSongWhenCreatingQueue: true,\n emitAddListWhenCreatingQueue: true,\n};\n\n/**\n * The repeat mode of a {@link Queue} (enum)\n * * `DISABLED` = 0\n * * `SONG` = 1\n * * `QUEUE` = 2\n * @typedef {number} RepeatMode\n */\nexport enum RepeatMode {\n DISABLED,\n SONG,\n QUEUE,\n}\n\n/**\n * All available plugin types:\n * * `custom`: {@link CustomPlugin}\n * * `extractor`: {@link ExtractorPlugin}\n * @typedef {\"custom\"|\"extractor\"} PluginType\n */\nexport enum PluginType {\n CUSTOM = \"custom\",\n EXTRACTOR = \"extractor\",\n}\n"]}
@@ -1,14 +0,0 @@
1
- import type { Client, GuildTextBasedChannel } from "discord.js";
2
- import type { DisTube, DisTubeEvents, DisTubeHandler, DisTubeVoiceManager, Options, QueueManager } from "..";
3
- export declare abstract class DisTubeBase {
4
- distube: DisTube;
5
- constructor(distube: DisTube);
6
- emit(eventName: keyof DisTubeEvents, ...args: any): boolean;
7
- emitError(error: Error, channel?: GuildTextBasedChannel): void;
8
- get queues(): QueueManager;
9
- get voices(): DisTubeVoiceManager;
10
- get client(): Client;
11
- get options(): Options;
12
- get handler(): DisTubeHandler;
13
- }
14
- //# sourceMappingURL=DisTubeBase.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DisTubeBase.d.ts","sourceRoot":"","sources":["../../src/core/DisTubeBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAM7G,8BAAsB,WAAW;IAC/B,OAAO,EAAE,OAAO,CAAC;gBACL,OAAO,EAAE,OAAO;IAa5B,IAAI,CAAC,SAAS,EAAE,MAAM,aAAa,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,OAAO;IAQ3D,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,qBAAqB;IAQvD,IAAI,MAAM,IAAI,YAAY,CAEzB;IAMD,IAAI,MAAM,IAAI,mBAAmB,CAEhC;IAMD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAMD,IAAI,OAAO,IAAI,OAAO,CAErB;IAMD,IAAI,OAAO,IAAI,cAAc,CAE5B;CACF"}
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DisTubeBase = void 0;
4
- class DisTubeBase {
5
- constructor(distube) {
6
- this.distube = distube;
7
- }
8
- emit(eventName, ...args) {
9
- return this.distube.emit(eventName, ...args);
10
- }
11
- emitError(error, channel) {
12
- this.distube.emitError(error, channel);
13
- }
14
- get queues() {
15
- return this.distube.queues;
16
- }
17
- get voices() {
18
- return this.distube.voices;
19
- }
20
- get client() {
21
- return this.distube.client;
22
- }
23
- get options() {
24
- return this.distube.options;
25
- }
26
- get handler() {
27
- return this.distube.handler;
28
- }
29
- }
30
- exports.DisTubeBase = DisTubeBase;
31
- //# sourceMappingURL=DisTubeBase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DisTubeBase.js","sourceRoot":"","sources":["../../src/core/DisTubeBase.ts"],"names":[],"mappings":";;;AAOA,MAAsB,WAAW;IAE/B,YAAY,OAAgB;QAK1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAOD,IAAI,CAAC,SAA8B,EAAE,GAAG,IAAS;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/C,CAAC;IAMD,SAAS,CAAC,KAAY,EAAE,OAA+B;QACrD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAMD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAMD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAMD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAMD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9B,CAAC;IAMD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9B,CAAC;CACF;AAlED,kCAkEC","sourcesContent":["import type { Client, GuildTextBasedChannel } from \"discord.js\";\nimport type { DisTube, DisTubeEvents, DisTubeHandler, DisTubeVoiceManager, Options, QueueManager } from \"..\";\n\n/**\n * @private\n * @abstract\n */\nexport abstract class DisTubeBase {\n distube: DisTube;\n constructor(distube: DisTube) {\n /**\n * DisTube\n * @type {DisTube}\n */\n this.distube = distube;\n }\n /**\n * Emit the {@link DisTube} of this base\n * @param {string} eventName Event name\n * @param {...any} args arguments\n * @returns {boolean}\n */\n emit(eventName: keyof DisTubeEvents, ...args: any): boolean {\n return this.distube.emit(eventName, ...args);\n }\n /**\n * Emit error event\n * @param {Error} error error\n * @param {Discord.BaseGuildTextChannel} [channel] Text channel where the error is encountered.\n */\n emitError(error: Error, channel?: GuildTextBasedChannel) {\n this.distube.emitError(error, channel);\n }\n /**\n * The queue manager\n * @type {QueueManager}\n * @readonly\n */\n get queues(): QueueManager {\n return this.distube.queues;\n }\n /**\n * The voice manager\n * @type {DisTubeVoiceManager}\n * @readonly\n */\n get voices(): DisTubeVoiceManager {\n return this.distube.voices;\n }\n /**\n * Discord.js client\n * @type {Discord.Client}\n * @readonly\n */\n get client(): Client {\n return this.distube.client;\n }\n /**\n * DisTube options\n * @type {DisTubeOptions}\n * @readonly\n */\n get options(): Options {\n return this.distube.options;\n }\n /**\n * DisTube handler\n * @type {DisTubeHandler}\n * @readonly\n */\n get handler(): DisTubeHandler {\n return this.distube.handler;\n }\n}\n"]}
@@ -1,27 +0,0 @@
1
- import ytdl from "@distube/ytdl-core";
2
- import { DisTubeBase } from ".";
3
- import { Playlist, SearchResult, Song } from "..";
4
- import type { DisTube, OtherSongInfo } from "..";
5
- import type { GuildMember, GuildTextBasedChannel, Message, VoiceBasedChannel } from "discord.js";
6
- export declare class DisTubeHandler extends DisTubeBase {
7
- constructor(distube: DisTube);
8
- get ytdlOptions(): ytdl.getInfoOptions;
9
- getYouTubeInfo(url: string, basic?: boolean): Promise<ytdl.videoInfo>;
10
- resolveSong(song: string | ytdl.videoInfo | Song | Playlist | SearchResult | OtherSongInfo | ytdl.relatedVideo, options?: {
11
- member?: GuildMember;
12
- metadata?: any;
13
- }): Promise<Song | Playlist>;
14
- resolvePlaylist(playlist: Playlist | Song[] | string, options?: {
15
- member?: GuildMember;
16
- source?: string;
17
- metadata?: any;
18
- }): Promise<Playlist>;
19
- handlePlaylist(voice: VoiceBasedChannel, playlist: Playlist, options?: {
20
- textChannel?: GuildTextBasedChannel;
21
- skip?: boolean;
22
- position?: number;
23
- }): Promise<void>;
24
- searchSong(message: Message<true>, query: string): Promise<SearchResult | null>;
25
- createSearchMessageCollector<R extends SearchResult | Song | Playlist>(message: Message<true>, results: Array<R>, query?: string): Promise<R | null>;
26
- }
27
- //# sourceMappingURL=DisTubeHandler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DisTubeHandler.d.ts","sourceRoot":"","sources":["../../src/core/DisTubeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,oBAAoB,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC;AAChC,OAAO,EAAgB,QAAQ,EAAS,YAAY,EAAE,IAAI,EAAiD,MAAM,IAAI,CAAC;AACtH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,OAAO,EAAe,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAO9G,qBAAa,cAAe,SAAQ,WAAW;gBACjC,OAAO,EAAE,OAAO;IA8C5B,IAAI,WAAW,wBAEd;IAOD,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;IAa7D,WAAW,CACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,QAAQ,GAAG,YAAY,GAAG,aAAa,GAAG,IAAI,CAAC,YAAY,EAClG,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,QAAQ,CAAC,EAAE,GAAG,CAAC;KACX,GACL,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC;IA8BrB,eAAe,CACnB,QAAQ,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,MAAM,EACpC,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,GAAG,CAAC;KACX,GACL,OAAO,CAAC,QAAQ,CAAC;IA6Bd,cAAc,CAClB,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE;QACP,WAAW,CAAC,EAAE,qBAAqB,CAAC;QACpC,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACd,GACL,OAAO,CAAC,IAAI,CAAC;IAuCV,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IA+B/E,4BAA4B,CAAC,CAAC,SAAS,YAAY,GAAG,IAAI,GAAG,QAAQ,EACzE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,EACtB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;CAuDrB"}