distube 2.8.15 → 3.0.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/README.md +32 -98
- package/dist/DisTube.d.ts +522 -0
- package/dist/DisTube.d.ts.map +1 -0
- package/dist/DisTube.js +794 -0
- package/dist/DisTube.js.map +1 -0
- package/dist/constant.d.ts +130 -0
- package/dist/constant.d.ts.map +1 -0
- package/dist/constant.js +150 -0
- package/dist/constant.js.map +1 -0
- package/dist/core/DisTubeBase.d.ts +55 -0
- package/dist/core/DisTubeBase.d.ts.map +1 -0
- package/dist/core/DisTubeBase.js +76 -0
- package/dist/core/DisTubeBase.js.map +1 -0
- package/dist/core/DisTubeHandler.d.ts +84 -0
- package/dist/core/DisTubeHandler.d.ts.map +1 -0
- package/dist/core/DisTubeHandler.js +311 -0
- package/dist/core/DisTubeHandler.js.map +1 -0
- package/dist/core/DisTubeOptions.d.ts +26 -0
- package/dist/core/DisTubeOptions.d.ts.map +1 -0
- package/dist/core/DisTubeOptions.js +93 -0
- package/dist/core/DisTubeOptions.js.map +1 -0
- package/dist/core/DisTubeStream.d.ts +52 -0
- package/dist/core/DisTubeStream.d.ts.map +1 -0
- package/dist/core/DisTubeStream.js +109 -0
- package/dist/core/DisTubeStream.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +19 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/manager/BaseManager.d.ts +18 -0
- package/dist/core/manager/BaseManager.d.ts.map +1 -0
- package/dist/core/manager/BaseManager.js +44 -0
- package/dist/core/manager/BaseManager.js.map +1 -0
- package/dist/core/manager/QueueManager.d.ts +60 -0
- package/dist/core/manager/QueueManager.d.ts.map +1 -0
- package/dist/core/manager/QueueManager.js +202 -0
- package/dist/core/manager/QueueManager.js.map +1 -0
- package/dist/core/manager/index.d.ts +3 -0
- package/dist/core/manager/index.d.ts.map +1 -0
- package/dist/core/manager/index.js +15 -0
- package/dist/core/manager/index.js.map +1 -0
- package/dist/core/voice/DJSAdapter.d.ts +4 -0
- package/dist/core/voice/DJSAdapter.d.ts.map +1 -0
- package/dist/core/voice/DJSAdapter.js +61 -0
- package/dist/core/voice/DJSAdapter.js.map +1 -0
- package/dist/core/voice/DisTubeVoice.d.ts +83 -0
- package/dist/core/voice/DisTubeVoice.d.ts.map +1 -0
- package/dist/core/voice/DisTubeVoice.js +236 -0
- package/dist/core/voice/DisTubeVoice.js.map +1 -0
- package/dist/core/voice/DisTubeVoiceManager.d.ts +41 -0
- package/dist/core/voice/DisTubeVoiceManager.d.ts.map +1 -0
- package/dist/core/voice/DisTubeVoiceManager.js +67 -0
- package/dist/core/voice/DisTubeVoiceManager.js.map +1 -0
- package/dist/core/voice/index.d.ts +4 -0
- package/dist/core/voice/index.d.ts.map +1 -0
- package/dist/core/voice/index.js +16 -0
- package/dist/core/voice/index.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin/http.d.ts +8 -0
- package/dist/plugin/http.d.ts.map +1 -0
- package/dist/plugin/http.js +20 -0
- package/dist/plugin/http.js.map +1 -0
- package/dist/plugin/https.d.ts +14 -0
- package/dist/plugin/https.d.ts.map +1 -0
- package/dist/plugin/https.js +50 -0
- package/dist/plugin/https.js.map +1 -0
- package/dist/plugin/index.d.ts +4 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +16 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/youtube-dl.d.ts +11 -0
- package/dist/plugin/youtube-dl.d.ts.map +1 -0
- package/dist/plugin/youtube-dl.js +75 -0
- package/dist/plugin/youtube-dl.js.map +1 -0
- package/dist/struct/CustomPlugin.d.ts +27 -0
- package/dist/struct/CustomPlugin.d.ts.map +1 -0
- package/dist/struct/CustomPlugin.js +35 -0
- package/dist/struct/CustomPlugin.js.map +1 -0
- package/dist/struct/DisTubeError.d.ts +54 -0
- package/dist/struct/DisTubeError.d.ts.map +1 -0
- package/dist/struct/DisTubeError.js +72 -0
- package/dist/struct/DisTubeError.js.map +1 -0
- package/dist/struct/ExtractorPlugin.d.ts +29 -0
- package/dist/struct/ExtractorPlugin.d.ts.map +1 -0
- package/dist/struct/ExtractorPlugin.js +32 -0
- package/dist/struct/ExtractorPlugin.js.map +1 -0
- package/dist/struct/Playlist.d.ts +42 -0
- package/dist/struct/Playlist.d.ts.map +1 -0
- package/dist/struct/Playlist.js +104 -0
- package/dist/struct/Playlist.js.map +1 -0
- package/dist/struct/Plugin.d.ts +82 -0
- package/dist/struct/Plugin.d.ts.map +1 -0
- package/dist/struct/Plugin.js +108 -0
- package/dist/struct/Plugin.js.map +1 -0
- package/dist/struct/Queue.d.ts +217 -0
- package/dist/struct/Queue.d.ts.map +1 -0
- package/dist/struct/Queue.js +480 -0
- package/dist/struct/Queue.js.map +1 -0
- package/dist/struct/SearchResult.d.ts +28 -0
- package/dist/struct/SearchResult.d.ts.map +1 -0
- package/dist/struct/SearchResult.js +79 -0
- package/dist/struct/SearchResult.js.map +1 -0
- package/dist/struct/Song.d.ts +68 -0
- package/dist/struct/Song.d.ts.map +1 -0
- package/dist/struct/Song.js +229 -0
- package/dist/struct/Song.js.map +1 -0
- package/dist/struct/TaskQueue.d.ts +33 -0
- package/dist/struct/TaskQueue.d.ts.map +1 -0
- package/dist/struct/TaskQueue.js +58 -0
- package/dist/struct/TaskQueue.js.map +1 -0
- package/dist/struct/index.d.ts +10 -0
- package/dist/struct/index.d.ts.map +1 -0
- package/dist/struct/index.js +22 -0
- package/dist/struct/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/type.d.ts +159 -0
- package/dist/type.d.ts.map +1 -0
- package/dist/type.js +3 -0
- package/dist/type.js.map +1 -0
- package/dist/util.d.ts +47 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +205 -0
- package/dist/util.js.map +1 -0
- package/package.json +53 -25
- package/.eslintrc.json +0 -150
- package/.gitattributes +0 -2
- package/.github/FUNDING.yml +0 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -17
- package/.github/ISSUE_TEMPLATE/config.yml +0 -8
- package/.github/workflows/npm-publish.yml +0 -17
- package/jsdoc.json +0 -97
- package/src/DisTube.js +0 -1121
- package/src/Playlist.js +0 -107
- package/src/Queue.js +0 -120
- package/src/SearchResult.js +0 -81
- package/src/Song.js +0 -135
- package/src/duration.js +0 -39
- package/tsconfig.json +0 -24
- package/typings/DisTube.d.ts +0 -635
- package/typings/Playlist.d.ts +0 -73
- package/typings/Queue.d.ts +0 -106
- package/typings/SearchResult.d.ts +0 -59
- package/typings/Song.d.ts +0 -104
- package/typings/duration.d.ts +0 -2
package/typings/DisTube.d.ts
DELETED
|
@@ -1,635 +0,0 @@
|
|
|
1
|
-
export = DisTube;
|
|
2
|
-
/**
|
|
3
|
-
* Class representing a DisTube.
|
|
4
|
-
* @extends EventEmitter
|
|
5
|
-
*/
|
|
6
|
-
declare class DisTube extends EventEmitter {
|
|
7
|
-
static get version(): any;
|
|
8
|
-
/**
|
|
9
|
-
* Create new DisTube.
|
|
10
|
-
* @param {Discord.Client} client Discord.JS client
|
|
11
|
-
* @param {DisTubeOptions} [otp={}] Custom DisTube options
|
|
12
|
-
* @example
|
|
13
|
-
* const Discord = require('discord.js'),
|
|
14
|
-
* DisTube = require('distube'),
|
|
15
|
-
* client = new Discord.Client();
|
|
16
|
-
* // Create a new DisTube
|
|
17
|
-
* const distube = new DisTube(client, { searchSongs: true });
|
|
18
|
-
* // client.DisTube = distube // make it access easily
|
|
19
|
-
* client.login("Your Discord Bot Token")
|
|
20
|
-
*/
|
|
21
|
-
constructor(client: Discord.Client, otp?: DisTubeOptions);
|
|
22
|
-
/**
|
|
23
|
-
* DisTube's current version.
|
|
24
|
-
* @type {string}
|
|
25
|
-
* @ignore
|
|
26
|
-
*/
|
|
27
|
-
get version(): string;
|
|
28
|
-
/**
|
|
29
|
-
* Discord.JS client
|
|
30
|
-
* @type {Discord.Client}
|
|
31
|
-
*/
|
|
32
|
-
client: Discord.Client;
|
|
33
|
-
/**
|
|
34
|
-
* Collection of guild queues
|
|
35
|
-
* @type {Discord.Collection<string, Queue>}
|
|
36
|
-
*/
|
|
37
|
-
guildQueues: Discord.Collection<string, Queue>;
|
|
38
|
-
/**
|
|
39
|
-
* DisTube options
|
|
40
|
-
* @type {DisTubeOptions}
|
|
41
|
-
*/
|
|
42
|
-
options: DisTubeOptions;
|
|
43
|
-
/**
|
|
44
|
-
* DisTube filters
|
|
45
|
-
* @type {Filter}
|
|
46
|
-
*/
|
|
47
|
-
filters: Filter;
|
|
48
|
-
requestOptions: {
|
|
49
|
-
headers: {
|
|
50
|
-
cookie: string;
|
|
51
|
-
"x-youtube-identity-token": string;
|
|
52
|
-
};
|
|
53
|
-
};
|
|
54
|
-
/**
|
|
55
|
-
* Resolve a Song
|
|
56
|
-
* @async
|
|
57
|
-
* @param {Discord.Message} message The message from guild channel
|
|
58
|
-
* @param {string|Song} song Youtube url | Search string | {@link Song}
|
|
59
|
-
* @private
|
|
60
|
-
* @ignore
|
|
61
|
-
* @returns {Promise<Song|Song[]>} Resolved Song
|
|
62
|
-
*/
|
|
63
|
-
private _resolveSong;
|
|
64
|
-
/**
|
|
65
|
-
* Handle a Song or an array of Song
|
|
66
|
-
* @async
|
|
67
|
-
* @param {Discord.Message} message The message from guild channel
|
|
68
|
-
* @param {Song|SearchResult} song {@link Song} | {@link SearchResult}
|
|
69
|
-
* @private
|
|
70
|
-
* @ignore
|
|
71
|
-
*/
|
|
72
|
-
private _handleSong;
|
|
73
|
-
/**
|
|
74
|
-
* Play / add a song or playlist from url. Search and play a song if it is not a valid url.
|
|
75
|
-
* @async
|
|
76
|
-
* @param {Discord.Message} message The message from guild channel
|
|
77
|
-
* @param {string|Song|SearchResult} song Youtube url | Search string | {@link Song} | {@link SearchResult}
|
|
78
|
-
* @example
|
|
79
|
-
* client.on('message', (message) => {
|
|
80
|
-
* if (!message.content.startsWith(config.prefix)) return;
|
|
81
|
-
* const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
|
|
82
|
-
* const command = args.shift();
|
|
83
|
-
* if (command == "play")
|
|
84
|
-
* distube.play(message, args.join(" "));
|
|
85
|
-
* });
|
|
86
|
-
*/
|
|
87
|
-
play(message: Discord.Message, song: string | Song | SearchResult): Promise<void>;
|
|
88
|
-
/**
|
|
89
|
-
* `@2.0.0` Skip the playing song and play a song or playlist
|
|
90
|
-
* @async
|
|
91
|
-
* @param {Discord.Message} message The message from guild channel
|
|
92
|
-
* @param {string|Song|SearchResult} song Youtube url | Search string | {@link Song} | {@link SearchResult}
|
|
93
|
-
* @example
|
|
94
|
-
* client.on('message', (message) => {
|
|
95
|
-
* if (!message.content.startsWith(config.prefix)) return;
|
|
96
|
-
* const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
|
|
97
|
-
* const command = args.shift();
|
|
98
|
-
* if (command == "playSkip")
|
|
99
|
-
* distube.playSkip(message, args.join(" "));
|
|
100
|
-
* });
|
|
101
|
-
*/
|
|
102
|
-
playSkip(message: Discord.Message, song: string | Song | SearchResult): Promise<void>;
|
|
103
|
-
/**
|
|
104
|
-
* `@2.1.0` Play or add array of Youtube video urls.
|
|
105
|
-
* {@link DisTube#event:playList} or {@link DisTube#event:addList} will be emitted
|
|
106
|
-
* with `playlist`'s properties include `properties` parameter's properties such as
|
|
107
|
-
* `user`, `songs`, `duration`, `formattedDuration`, `thumbnail` like {@link Playlist}
|
|
108
|
-
* @async
|
|
109
|
-
* @param {Discord.Message} message The message from guild channel
|
|
110
|
-
* @param {string[]} urls Array of Youtube url
|
|
111
|
-
* @param {Object} [properties={}] Additional properties such as `name`
|
|
112
|
-
* @param {boolean} [playSkip=false] Whether or not play this playlist instantly
|
|
113
|
-
* @example
|
|
114
|
-
* let songs = ["https://www.youtube.com/watch?v=xxx", "https://www.youtube.com/watch?v=yyy"];
|
|
115
|
-
* distube.playCustomPlaylist(message, songs, { name: "My playlist name" });
|
|
116
|
-
*/
|
|
117
|
-
playCustomPlaylist(message: Discord.Message, urls: string[], properties?: any, playSkip?: boolean): Promise<void>;
|
|
118
|
-
/**
|
|
119
|
-
* PLay / add a playlist
|
|
120
|
-
* @async
|
|
121
|
-
* @private
|
|
122
|
-
* @ignore
|
|
123
|
-
* @param {Discord.Message} message The message from guild channel
|
|
124
|
-
* @param {string|Song[]|Playlist} arg2 Youtube playlist url | a Playlist
|
|
125
|
-
* @param {boolean} skip Skip the current song
|
|
126
|
-
*/
|
|
127
|
-
private _handlePlaylist;
|
|
128
|
-
/**
|
|
129
|
-
* `@2.0.0` Search for a song. You can customize how user answers instead of send a number.
|
|
130
|
-
* Then use {@link DisTube#play|play(message, aResultFromSearch)} or {@link DisTube#playSkip|playSkip()} to play it.
|
|
131
|
-
* @async
|
|
132
|
-
* @param {string} string The string search for
|
|
133
|
-
* @throws {NotFound} If not found
|
|
134
|
-
* @throws {Error} If an error encountered
|
|
135
|
-
* @returns {Promise<SearchResult[]>} Array of results
|
|
136
|
-
*/
|
|
137
|
-
search(string: string, retried?: boolean): Promise<SearchResult[]>;
|
|
138
|
-
/**
|
|
139
|
-
* Search for a song, fire {@link DisTube#event:error} if not found.
|
|
140
|
-
* @async
|
|
141
|
-
* @private
|
|
142
|
-
* @ignore
|
|
143
|
-
* @param {Discord.Message} message The message from guild channel
|
|
144
|
-
* @param {string} name The string search for
|
|
145
|
-
* @returns {Song} Song info
|
|
146
|
-
*/
|
|
147
|
-
private _searchSong;
|
|
148
|
-
/**
|
|
149
|
-
* Create a new guild queue
|
|
150
|
-
* @async
|
|
151
|
-
* @private
|
|
152
|
-
* @ignore
|
|
153
|
-
* @param {Discord.Message} message The message from guild channel
|
|
154
|
-
* @param {Song} song Song to play
|
|
155
|
-
* @throws {NotInVoice} if user not in a voice channel
|
|
156
|
-
* @returns {Promise<Queue>}
|
|
157
|
-
*/
|
|
158
|
-
private _newQueue;
|
|
159
|
-
/**
|
|
160
|
-
* Delete a guild queue
|
|
161
|
-
* @private
|
|
162
|
-
* @ignore
|
|
163
|
-
* @param {Discord.Snowflake|Discord.Message} message The message from guild channel
|
|
164
|
-
*/
|
|
165
|
-
private _deleteQueue;
|
|
166
|
-
/**
|
|
167
|
-
* Get the guild queue
|
|
168
|
-
* @param {Discord.Snowflake|Discord.Message} message The guild ID or message from guild channel.
|
|
169
|
-
* @returns {Queue} The guild queue
|
|
170
|
-
* @example
|
|
171
|
-
* client.on('message', (message) => {
|
|
172
|
-
* if (!message.content.startsWith(config.prefix)) return;
|
|
173
|
-
* const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
|
|
174
|
-
* const command = args.shift();
|
|
175
|
-
* if (command == "queue") {
|
|
176
|
-
* let queue = distube.getQueue(message);
|
|
177
|
-
* message.channel.send('Current queue:\n' + queue.songs.map((song, id) =>
|
|
178
|
-
* `**${id+1}**. [${song.name}](${song.url}) - \`${song.formattedDuration}\``
|
|
179
|
-
* ).join("\n"));
|
|
180
|
-
* }
|
|
181
|
-
* });
|
|
182
|
-
*/
|
|
183
|
-
getQueue(message: Discord.Snowflake | Discord.Message): Queue;
|
|
184
|
-
/**
|
|
185
|
-
* Add a video to queue
|
|
186
|
-
* @private
|
|
187
|
-
* @ignore
|
|
188
|
-
* @param {Discord.Snowflake|Discord.Message} message The message from guild channel
|
|
189
|
-
* @param {Song} song Song to add
|
|
190
|
-
* @param {boolean} [unshift=false] Unshift
|
|
191
|
-
* @throws {NotInVoice} if result is empty
|
|
192
|
-
* @returns {Queue}
|
|
193
|
-
*/
|
|
194
|
-
private _addToQueue;
|
|
195
|
-
/**
|
|
196
|
-
* Add a array of videos to queue
|
|
197
|
-
* @private
|
|
198
|
-
* @ignore
|
|
199
|
-
* @param {Discord.Snowflake|Discord.Message} message The message from guild channel
|
|
200
|
-
* @param {Song[]} songs Array of song to add
|
|
201
|
-
* @param {boolean} [unshift=false] Unshift
|
|
202
|
-
* @returns {Queue}
|
|
203
|
-
*/
|
|
204
|
-
private _addSongsToQueue;
|
|
205
|
-
/**
|
|
206
|
-
* Pause the guild stream
|
|
207
|
-
* @param {Discord.Snowflake|Discord.Message} message The message from guild channel
|
|
208
|
-
* @returns {Queue} The guild queue
|
|
209
|
-
* @throws {NotPlaying} No playing queue
|
|
210
|
-
*/
|
|
211
|
-
pause(message: Discord.Snowflake | Discord.Message): Queue;
|
|
212
|
-
/**
|
|
213
|
-
* Resume the guild stream
|
|
214
|
-
* @param {Discord.Snowflake|Discord.Message} message The message from guild channel
|
|
215
|
-
* @returns {Queue} The guild queue
|
|
216
|
-
* @throws {NotPlaying} No playing queue
|
|
217
|
-
*/
|
|
218
|
-
resume(message: Discord.Snowflake | Discord.Message): Queue;
|
|
219
|
-
/**
|
|
220
|
-
* Stop the guild stream
|
|
221
|
-
* @param {Discord.Snowflake|Discord.Message} message The message from guild channel
|
|
222
|
-
* @throws {NotPlaying} No playing queue
|
|
223
|
-
* @example
|
|
224
|
-
* client.on('message', (message) => {
|
|
225
|
-
* if (!message.content.startsWith(config.prefix)) return;
|
|
226
|
-
* const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
|
|
227
|
-
* const command = args.shift();
|
|
228
|
-
* if (command == "stop") {
|
|
229
|
-
* distube.stop(message);
|
|
230
|
-
* message.channel.send("Stopped the queue!");
|
|
231
|
-
* }
|
|
232
|
-
* });
|
|
233
|
-
*/
|
|
234
|
-
stop(message: Discord.Snowflake | Discord.Message): void;
|
|
235
|
-
/**
|
|
236
|
-
* Set the guild stream's volume
|
|
237
|
-
* @param {Discord.Snowflake|Discord.Message} message The message from guild channel
|
|
238
|
-
* @param {number} percent The percentage of volume you want to set
|
|
239
|
-
* @returns {Queue} The guild queue
|
|
240
|
-
* @throws {NotPlaying} No playing queue
|
|
241
|
-
* @example
|
|
242
|
-
* client.on('message', (message) => {
|
|
243
|
-
* if (!message.content.startsWith(config.prefix)) return;
|
|
244
|
-
* const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
|
|
245
|
-
* const command = args.shift();
|
|
246
|
-
* if (command == "volume")
|
|
247
|
-
* distube.setVolume(message, args[0]);
|
|
248
|
-
* });
|
|
249
|
-
*/
|
|
250
|
-
setVolume(message: Discord.Snowflake | Discord.Message, percent: number): Queue;
|
|
251
|
-
/**
|
|
252
|
-
* Skip the playing song
|
|
253
|
-
*
|
|
254
|
-
* @param {Discord.Snowflake|Discord.Message} message The message from guild channel
|
|
255
|
-
* @returns {Queue} The guild queue
|
|
256
|
-
* @throws {NotPlaying} No playing queue
|
|
257
|
-
* @throws {NoSong} if there is no song in queue
|
|
258
|
-
* @example
|
|
259
|
-
* client.on('message', (message) => {
|
|
260
|
-
* if (!message.content.startsWith(config.prefix)) return;
|
|
261
|
-
* const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
|
|
262
|
-
* const command = args.shift();
|
|
263
|
-
* if (command == "skip")
|
|
264
|
-
* distube.skip(message);
|
|
265
|
-
* });
|
|
266
|
-
*/
|
|
267
|
-
skip(message: Discord.Snowflake | Discord.Message): Queue;
|
|
268
|
-
/**
|
|
269
|
-
* Shuffle the guild queue songs
|
|
270
|
-
* @param {Discord.Snowflake|Discord.Message} message The message from guild channel
|
|
271
|
-
* @returns {Queue} The guild queue
|
|
272
|
-
* @example
|
|
273
|
-
* client.on('message', (message) => {
|
|
274
|
-
* if (!message.content.startsWith(config.prefix)) return;
|
|
275
|
-
* const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
|
|
276
|
-
* const command = args.shift();
|
|
277
|
-
* if (command == "shuffle")
|
|
278
|
-
* distube.shuffle(message);
|
|
279
|
-
* });
|
|
280
|
-
*/
|
|
281
|
-
shuffle(message: Discord.Snowflake | Discord.Message): Queue;
|
|
282
|
-
/**
|
|
283
|
-
* Jump to the song number in the queue.
|
|
284
|
-
* The next one is 1,...
|
|
285
|
-
* @param {Discord.Snowflake|Discord.Message} message The message from guild channel
|
|
286
|
-
* @param {number} num The song number to play
|
|
287
|
-
* @returns {Queue} The guild queue
|
|
288
|
-
* @throws {InvalidSong} if `num` is invalid number (0 < num < {@link Queue#songs}.length)
|
|
289
|
-
* @example
|
|
290
|
-
* client.on('message', (message) => {
|
|
291
|
-
* if (!message.content.startsWith(config.prefix)) return;
|
|
292
|
-
* const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
|
|
293
|
-
* const command = args.shift();
|
|
294
|
-
* if (command == "jump")
|
|
295
|
-
* distube.jump(message, parseInt(args[0]))
|
|
296
|
-
* .catch(err => message.channel.send("Invalid song number."));
|
|
297
|
-
* });
|
|
298
|
-
*/
|
|
299
|
-
jump(message: Discord.Snowflake | Discord.Message, num: number): Queue;
|
|
300
|
-
/**
|
|
301
|
-
* Set the repeat mode of the guild queue.
|
|
302
|
-
* Turn off if repeat mode is the same value as new mode.
|
|
303
|
-
* Toggle mode: `mode = null` `(0 -> 1 -> 2 -> 0...)`
|
|
304
|
-
*
|
|
305
|
-
* @param {Discord.Snowflake|Discord.Message} message The message from guild channel
|
|
306
|
-
* @param {number} mode The repeat modes `(0: disabled, 1: Repeat a song, 2: Repeat all the queue)`
|
|
307
|
-
* @returns {number} The new repeat mode
|
|
308
|
-
*
|
|
309
|
-
* @example
|
|
310
|
-
* client.on('message', (message) => {
|
|
311
|
-
* if (!message.content.startsWith(config.prefix)) return;
|
|
312
|
-
* const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
|
|
313
|
-
* const command = args.shift();
|
|
314
|
-
* if (command == "repeat") {
|
|
315
|
-
* let mode = distube.setRepeatMode(message, parseInt(args[0]));
|
|
316
|
-
* mode = mode ? mode == 2 ? "Repeat queue" : "Repeat song" : "Off";
|
|
317
|
-
* message.channel.send("Set repeat mode to `" + mode + "`");
|
|
318
|
-
* }
|
|
319
|
-
* });
|
|
320
|
-
*/
|
|
321
|
-
setRepeatMode(message: Discord.Snowflake | Discord.Message, mode?: number): number;
|
|
322
|
-
/**
|
|
323
|
-
* Toggle autoplay mode
|
|
324
|
-
* @param {Discord.Snowflake|Discord.Message} message The message from guild channel
|
|
325
|
-
* @returns {boolean} Autoplay mode state
|
|
326
|
-
* @throws {NotPlaying} No playing queue
|
|
327
|
-
* @example
|
|
328
|
-
* client.on('message', (message) => {
|
|
329
|
-
* if (!message.content.startsWith(config.prefix)) return;
|
|
330
|
-
* const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
|
|
331
|
-
* const command = args.shift();
|
|
332
|
-
* if (command == "autoplay") {
|
|
333
|
-
* let mode = distube.toggleAutoplay(message);
|
|
334
|
-
* message.channel.send("Set autoplay mode to `" + (mode ? "On" : "Off") + "`");
|
|
335
|
-
* }
|
|
336
|
-
* });
|
|
337
|
-
*/
|
|
338
|
-
toggleAutoplay(message: Discord.Snowflake | Discord.Message): boolean;
|
|
339
|
-
/**
|
|
340
|
-
* Whether or not a guild is playing music.
|
|
341
|
-
* @param {Discord.Snowflake|Discord.Message} message The message from guild channel to check
|
|
342
|
-
* @returns {boolean} Whether or not the guild is playing song(s)
|
|
343
|
-
*/
|
|
344
|
-
isPlaying(message: Discord.Snowflake | Discord.Message): boolean;
|
|
345
|
-
/**
|
|
346
|
-
* Whether or not the guild queue is paused
|
|
347
|
-
* @param {Discord.Snowflake|Discord.Message} message The message from guild channel to check
|
|
348
|
-
* @returns {boolean} Whether or not the guild queue is paused
|
|
349
|
-
*/
|
|
350
|
-
isPaused(message: Discord.Snowflake | Discord.Message): boolean;
|
|
351
|
-
/**
|
|
352
|
-
* Whether or not the queue's voice channel is empty
|
|
353
|
-
* @private
|
|
354
|
-
* @ignore
|
|
355
|
-
* @param {Queue} queue The guild queue
|
|
356
|
-
* @returns {boolean} No user in voice channel return `true`
|
|
357
|
-
*/
|
|
358
|
-
private _isVoiceChannelEmpty;
|
|
359
|
-
/**
|
|
360
|
-
* TODO: Remove this
|
|
361
|
-
* @deprecated use {@link DisTube#addRelatedVideo} instead
|
|
362
|
-
* @param {DisTube.Message} message Message
|
|
363
|
-
* @returns {Promise<Queue>}
|
|
364
|
-
*/
|
|
365
|
-
runAutoplay(message: any): Promise<Queue>;
|
|
366
|
-
/**
|
|
367
|
-
* Add related song to the queue
|
|
368
|
-
* @async
|
|
369
|
-
* @param {Discord.Snowflake|Discord.Message} message The message from guild channel
|
|
370
|
-
* @returns {Promise<Queue>} The guild queue
|
|
371
|
-
*/
|
|
372
|
-
addRelatedVideo(message: Discord.Snowflake | Discord.Message): Promise<Queue>;
|
|
373
|
-
/**
|
|
374
|
-
* `@2.0.0` Enable or disable a filter of the queue, replay the playing song.
|
|
375
|
-
* Available filters: {@link Filter}
|
|
376
|
-
*
|
|
377
|
-
* @param {Discord.Message} message The message from guild channel
|
|
378
|
-
* @param {Filter} filter A filter name
|
|
379
|
-
* @returns {string} Current queue's filter name.
|
|
380
|
-
* @example
|
|
381
|
-
* client.on('message', (message) => {
|
|
382
|
-
* if (!message.content.startsWith(config.prefix)) return;
|
|
383
|
-
* const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
|
|
384
|
-
* const command = args.shift();
|
|
385
|
-
* if ([`3d`, `bassboost`, `echo`, `karaoke`, `nightcore`, `vaporwave`].includes(command)) {
|
|
386
|
-
* let filter = distube.setFilter(message, command);
|
|
387
|
-
* message.channel.send("Current queue filter: " + (filter || "Off"));
|
|
388
|
-
* }
|
|
389
|
-
* });
|
|
390
|
-
*/
|
|
391
|
-
setFilter(message: Discord.Message, filter: Filter): string;
|
|
392
|
-
/**
|
|
393
|
-
* `@2.7.0` Set the playing time to another position
|
|
394
|
-
*
|
|
395
|
-
* @param {Discord.Message} message The message from guild channel
|
|
396
|
-
* @param {number} time Time in milliseconds
|
|
397
|
-
* @example
|
|
398
|
-
* client.on('message', message => {
|
|
399
|
-
* if (!message.content.startsWith(config.prefix)) return;
|
|
400
|
-
* const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
|
|
401
|
-
* const command = args.shift();
|
|
402
|
-
* if (command = 'seek')
|
|
403
|
-
* distube.seek(message, Number(args[0]));
|
|
404
|
-
* });
|
|
405
|
-
*/
|
|
406
|
-
seek(message: Discord.Message, time: number): void;
|
|
407
|
-
/**
|
|
408
|
-
* Emit error event
|
|
409
|
-
* @private
|
|
410
|
-
* @ignore
|
|
411
|
-
*/
|
|
412
|
-
private _emitError;
|
|
413
|
-
/**
|
|
414
|
-
* Whether or not emit playSong event
|
|
415
|
-
* @private
|
|
416
|
-
* @ignore
|
|
417
|
-
*/
|
|
418
|
-
private _emitPlaySong;
|
|
419
|
-
/**
|
|
420
|
-
* Create a ytdl stream
|
|
421
|
-
* @private
|
|
422
|
-
* @ignore
|
|
423
|
-
*/
|
|
424
|
-
private _createStream;
|
|
425
|
-
/**
|
|
426
|
-
* Play a song on voice connection
|
|
427
|
-
* @private
|
|
428
|
-
* @ignore
|
|
429
|
-
* @param {Discord.Message} message The message from guild channel
|
|
430
|
-
*/
|
|
431
|
-
private _playSong;
|
|
432
|
-
/**
|
|
433
|
-
* Handle the queue when a Song finish
|
|
434
|
-
* @private
|
|
435
|
-
* @ignore
|
|
436
|
-
* @param {Discord.Message} message message
|
|
437
|
-
* @param {Queue} queue queue
|
|
438
|
-
*/
|
|
439
|
-
private _handleSongFinish;
|
|
440
|
-
/**
|
|
441
|
-
* Handle error while playing
|
|
442
|
-
* @private
|
|
443
|
-
* @ignore
|
|
444
|
-
* @param {Discord.Message} message message
|
|
445
|
-
* @param {Queue} queue queue
|
|
446
|
-
* @param {Error} error error
|
|
447
|
-
*/
|
|
448
|
-
private _handlePlayingError;
|
|
449
|
-
/**
|
|
450
|
-
* Emitted after DisTube add playlist to guild queue
|
|
451
|
-
*
|
|
452
|
-
* @event DisTube#addList
|
|
453
|
-
* @param {Discord.Message} message The message from guild channel
|
|
454
|
-
* @param {Queue} queue The guild queue
|
|
455
|
-
* @param {Playlist} playlist Playlist info
|
|
456
|
-
* @since 1.1.0
|
|
457
|
-
* @example
|
|
458
|
-
* const status = (queue) => `Volume: \`${queue.volume}%\` | Loop: \`${queue.repeatMode ? queue.repeatMode == 2 ? "Server Queue" : "This Song" : "Off"}\` | Autoplay: \`${queue.autoplay ? "On" : "Off"}\``;
|
|
459
|
-
*
|
|
460
|
-
* distube.on("addList", (message, queue, playlist) => message.channel.send(
|
|
461
|
-
* `Added \`${playlist.name}\` playlist (${playlist.songs.length} songs) to queue\n${status(queue)}`
|
|
462
|
-
* ));
|
|
463
|
-
*/
|
|
464
|
-
on(event: "addList", listener: (message: Discord.Message, queue: Queue, playlist: Playlist) => void): this;
|
|
465
|
-
/**
|
|
466
|
-
* Emitted after DisTube add new song to guild queue
|
|
467
|
-
*
|
|
468
|
-
* @event DisTube#addSong
|
|
469
|
-
* @param {Discord.Message} message The message from guild channel
|
|
470
|
-
* @param {Queue} queue The guild queue
|
|
471
|
-
* @param {Song} song Added song
|
|
472
|
-
* @example
|
|
473
|
-
* const status = (queue) => `Volume: \`${queue.volume}%\` | Loop: \`${queue.repeatMode ? queue.repeatMode == 2 ? "Server Queue" : "This Song" : "Off"}\` | Autoplay: \`${queue.autoplay ? "On" : "Off"}\``;
|
|
474
|
-
*
|
|
475
|
-
* distube.on("addSong", (message, queue, song) => message.channel.send(
|
|
476
|
-
* `Added ${song.name} - \`${song.formattedDuration}\` to the queue by ${song.user}`
|
|
477
|
-
* ));
|
|
478
|
-
*/
|
|
479
|
-
on(event: "addSong", listener: (message: Discord.Message, queue: Queue, song: Song) => void): this;
|
|
480
|
-
on(event: "empty" | "finish" | "noRelated" | "searchCancel", listener: (message: Discord.Message) => void): this;
|
|
481
|
-
/**
|
|
482
|
-
* Emitted when `DisTube` encounters an error.
|
|
483
|
-
*
|
|
484
|
-
* @event DisTube#error
|
|
485
|
-
* @param {Discord.Message} message The message from guild channel
|
|
486
|
-
* @param {Error} err The error encountered
|
|
487
|
-
* @example
|
|
488
|
-
* distube.on("error", (message, err) => message.channel.send(
|
|
489
|
-
* "An error encountered: " + err
|
|
490
|
-
* ));
|
|
491
|
-
*/
|
|
492
|
-
on(event: "error", listener: (message: Discord.Message, error: Error) => void): this;
|
|
493
|
-
|
|
494
|
-
/**
|
|
495
|
-
* Emitted when DisTube initialize a queue to change queue default properties.
|
|
496
|
-
*
|
|
497
|
-
* @event DisTube#initQueue
|
|
498
|
-
* @param {Queue} queue The guild queue
|
|
499
|
-
* @example
|
|
500
|
-
* distube.on("initQueue", queue => {
|
|
501
|
-
* queue.autoplay = false;
|
|
502
|
-
* queue.volume = 100;
|
|
503
|
-
* });
|
|
504
|
-
*/
|
|
505
|
-
on(event: "initQueue", listener: (queue: Queue) => void): this;
|
|
506
|
-
|
|
507
|
-
/**
|
|
508
|
-
* Emitted after DisTube play the first song of the playlist
|
|
509
|
-
* and add the rest to the guild queue
|
|
510
|
-
*
|
|
511
|
-
* @event DisTube#playList
|
|
512
|
-
* @param {Discord.Message} message The message from guild channel
|
|
513
|
-
* @param {Queue} queue The guild queue
|
|
514
|
-
* @param {Playlist} playlist Playlist info
|
|
515
|
-
* @param {Song} song Playing song
|
|
516
|
-
* @example
|
|
517
|
-
* const status = (queue) => `Volume: \`${queue.volume}%\` | Loop: \`${queue.repeatMode ? queue.repeatMode == 2 ? "Server Queue" : "This Song" : "Off"}\` | Autoplay: \`${queue.autoplay ? "On" : "Off"}\``;
|
|
518
|
-
*
|
|
519
|
-
* distube.on("playList", (message, queue, playlist, song) => message.channel.send(
|
|
520
|
-
* `Play \`${playlist.name}\` playlist (${playlist.songs.length} songs).\nRequested by: ${song.user}\nNow playing \`${song.name}\` - \`${song.formattedDuration}\`\n${status(queue)}`
|
|
521
|
-
* ));
|
|
522
|
-
*/
|
|
523
|
-
on(event: "playList", listener: (message: Discord.Message, queue: Queue, playlist: Playlist, song: Song) => void): this;
|
|
524
|
-
|
|
525
|
-
/**
|
|
526
|
-
* Emitted when DisTube play a song.
|
|
527
|
-
* If `DisTubeOptions.emitNewSongOnly` is `true`, event is not emitted when looping a song or next song is the previous one
|
|
528
|
-
*
|
|
529
|
-
* @event DisTube#playSong
|
|
530
|
-
* @param {Discord.Message} message The message from guild channel
|
|
531
|
-
* @param {Queue} queue The guild queue
|
|
532
|
-
* @param {Song} song Playing song
|
|
533
|
-
* @example
|
|
534
|
-
* const status = (queue) => `Volume: \`${queue.volume}%\` | Loop: \`${queue.repeatMode ? queue.repeatMode == 2 ? "Server Queue" : "This Song" : "Off"}\` | Autoplay: \`${queue.autoplay ? "On" : "Off"}\``;
|
|
535
|
-
*
|
|
536
|
-
* distube.on("playSong", (message, queue, song) => message.channel.send(
|
|
537
|
-
* `Playing \`${song.name}\` - \`${song.formattedDuration}\`\nRequested by: ${song.user}\n${status(queue)}`
|
|
538
|
-
* ));
|
|
539
|
-
*/
|
|
540
|
-
on(event: "playSong", listener: (message: Discord.Message, queue: Queue, song: Song) => void): this;
|
|
541
|
-
|
|
542
|
-
/**
|
|
543
|
-
* Emitted when `DisTubeOptions.searchSongs` is `true`.
|
|
544
|
-
* DisTube will wait for user's next message to choose song manually
|
|
545
|
-
* if song param of DisTube#play() is invalid url
|
|
546
|
-
*
|
|
547
|
-
* @event DisTube#searchResult
|
|
548
|
-
* @param {Discord.Message} message The message from guild channel
|
|
549
|
-
* @param {Song[]} result Searched result (max length = 12)
|
|
550
|
-
* @example
|
|
551
|
-
* // DisTubeOptions.searchSongs = true
|
|
552
|
-
* distube.on("searchResult", (message, result) => {
|
|
553
|
-
* let i = 0;
|
|
554
|
-
* message.channel.send(`**Choose an option from below**\n${result.map(song => `**${++i}**. ${song.title} - \`${song.formattedDuration}\``).join("\n")}\n*Enter anything else or wait 60 seconds to cancel*`);
|
|
555
|
-
* });
|
|
556
|
-
*/
|
|
557
|
-
on(event: "searchResult", listener: (message: Discord.Message, result: SearchResult[]) => void): this;
|
|
558
|
-
}
|
|
559
|
-
declare namespace DisTube {
|
|
560
|
-
export { DisTubeOptions, Filter };
|
|
561
|
-
}
|
|
562
|
-
import { EventEmitter } from "events";
|
|
563
|
-
import Discord = require("discord.js");
|
|
564
|
-
import Queue = require("./Queue");
|
|
565
|
-
import Playlist = require("./Playlist");
|
|
566
|
-
declare namespace DisTubeOptions {
|
|
567
|
-
const highWaterMark: number;
|
|
568
|
-
const emitNewSongOnly: boolean;
|
|
569
|
-
const leaveOnEmpty: boolean;
|
|
570
|
-
const leaveOnFinish: boolean;
|
|
571
|
-
const leaveOnStop: boolean;
|
|
572
|
-
const searchSongs: boolean;
|
|
573
|
-
const youtubeCookie: any;
|
|
574
|
-
const youtubeIdentityToken: any;
|
|
575
|
-
const youtubeDL: boolean;
|
|
576
|
-
const updateYouTubeDL: boolean;
|
|
577
|
-
const customFilters: {};
|
|
578
|
-
}
|
|
579
|
-
/**
|
|
580
|
-
* DisTube audio filters.
|
|
581
|
-
*/
|
|
582
|
-
type Filter = ("3d" | "bassboost" | "echo" | "karaoke" | "nightcore" | "vaporwave" | "flanger" | "gate" | "haas" | "reverse" | "surround" | "mcompand" | "phaser" | "tremolo" | "earwax" | string);
|
|
583
|
-
import Song = require("./Song");
|
|
584
|
-
import SearchResult = require("./SearchResult");
|
|
585
|
-
/**
|
|
586
|
-
* DisTube options.
|
|
587
|
-
*/
|
|
588
|
-
type DisTubeOptions = {
|
|
589
|
-
/**
|
|
590
|
-
* `@1.3.0`. If `true`, {@link DisTube#event:playSong} is not emitted when looping a song or next song is the same as the previous one
|
|
591
|
-
*/
|
|
592
|
-
emitNewSongOnly?: boolean;
|
|
593
|
-
/**
|
|
594
|
-
* `@2.2.0` ytdl's highWaterMark option.
|
|
595
|
-
*/
|
|
596
|
-
highWaterMark?: number;
|
|
597
|
-
/**
|
|
598
|
-
* Whether or not leaving voice channel if channel is empty in 60s. (Avoid accident leaving)
|
|
599
|
-
*/
|
|
600
|
-
leaveOnEmpty?: boolean;
|
|
601
|
-
/**
|
|
602
|
-
* Whether or not leaving voice channel when the queue ends.
|
|
603
|
-
*/
|
|
604
|
-
leaveOnFinish?: boolean;
|
|
605
|
-
/**
|
|
606
|
-
* Whether or not leaving voice channel after using {@link DisTube#stop|stop()} function.
|
|
607
|
-
*/
|
|
608
|
-
leaveOnStop?: boolean;
|
|
609
|
-
/**
|
|
610
|
-
* Whether or not searching for multiple songs to select manually, DisTube will play the first result if `false`
|
|
611
|
-
*/
|
|
612
|
-
searchSongs?: boolean;
|
|
613
|
-
/**
|
|
614
|
-
* `@2.4.0` YouTube cookies. How to get it: {@link https://github.com/fent/node-ytdl-core/blob/784c04eaf9f3cfac0fe0933155adffe0e2e0848a/example/cookies.js#L6-L12|YTDL's Example}
|
|
615
|
-
*/
|
|
616
|
-
youtubeCookie?: string;
|
|
617
|
-
/**
|
|
618
|
-
* `@2.4.0` If not given, ytdl-core will try to find it. You can find this by going to a video's watch page, viewing the source, and searching for "ID_TOKEN".
|
|
619
|
-
*/
|
|
620
|
-
youtubeIdentityToken?: string;
|
|
621
|
-
/**
|
|
622
|
-
* `@2.8.0` Whether or not using youtube-dl.
|
|
623
|
-
*/
|
|
624
|
-
youtubeDL?: boolean;
|
|
625
|
-
/**
|
|
626
|
-
* `@2.8.0` Whether or not updating youtube-dl automatically.
|
|
627
|
-
*/
|
|
628
|
-
updateYouTubeDL?: boolean;
|
|
629
|
-
/**
|
|
630
|
-
* `@2.7.0` Override or add more ffmpeg filters. Example: `{ "Filter name": "Filter value", "8d": "apulsator=hz=0.075" }`
|
|
631
|
-
*/
|
|
632
|
-
customFilters?: {
|
|
633
|
-
[x: string]: string;
|
|
634
|
-
};
|
|
635
|
-
};
|