distube 3.0.0-beta.8 → 3.0.2

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 (158) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +64 -51
  3. package/dist/DisTube.d.ts +522 -0
  4. package/dist/DisTube.d.ts.map +1 -0
  5. package/dist/DisTube.js +794 -0
  6. package/dist/DisTube.js.map +1 -0
  7. package/dist/constant.d.ts +130 -0
  8. package/dist/constant.d.ts.map +1 -0
  9. package/dist/constant.js +150 -0
  10. package/dist/constant.js.map +1 -0
  11. package/dist/core/DisTubeBase.d.ts +55 -0
  12. package/dist/core/DisTubeBase.d.ts.map +1 -0
  13. package/dist/core/DisTubeBase.js +76 -0
  14. package/dist/core/DisTubeBase.js.map +1 -0
  15. package/dist/core/DisTubeHandler.d.ts +95 -0
  16. package/dist/core/DisTubeHandler.d.ts.map +1 -0
  17. package/dist/core/DisTubeHandler.js +337 -0
  18. package/dist/core/DisTubeHandler.js.map +1 -0
  19. package/dist/core/DisTubeOptions.d.ts +26 -0
  20. package/dist/core/DisTubeOptions.d.ts.map +1 -0
  21. package/dist/core/DisTubeOptions.js +93 -0
  22. package/dist/core/DisTubeOptions.js.map +1 -0
  23. package/dist/core/DisTubeStream.d.ts +52 -0
  24. package/dist/core/DisTubeStream.d.ts.map +1 -0
  25. package/dist/core/DisTubeStream.js +111 -0
  26. package/dist/core/DisTubeStream.js.map +1 -0
  27. package/dist/core/index.d.ts +7 -0
  28. package/dist/core/index.d.ts.map +1 -0
  29. package/dist/core/index.js +19 -0
  30. package/dist/core/index.js.map +1 -0
  31. package/dist/core/manager/BaseManager.d.ts +18 -0
  32. package/dist/core/manager/BaseManager.d.ts.map +1 -0
  33. package/dist/core/manager/BaseManager.js +44 -0
  34. package/dist/core/manager/BaseManager.js.map +1 -0
  35. package/dist/core/manager/QueueManager.d.ts +60 -0
  36. package/dist/core/manager/QueueManager.d.ts.map +1 -0
  37. package/dist/core/manager/QueueManager.js +202 -0
  38. package/dist/core/manager/QueueManager.js.map +1 -0
  39. package/dist/core/manager/index.d.ts +3 -0
  40. package/dist/core/manager/index.d.ts.map +1 -0
  41. package/dist/core/manager/index.js +15 -0
  42. package/dist/core/manager/index.js.map +1 -0
  43. package/dist/core/voice/DJSAdapter.d.ts +4 -0
  44. package/dist/core/voice/DJSAdapter.d.ts.map +1 -0
  45. package/dist/core/voice/DJSAdapter.js +61 -0
  46. package/dist/core/voice/DJSAdapter.js.map +1 -0
  47. package/dist/core/voice/DisTubeVoice.d.ts +85 -0
  48. package/dist/core/voice/DisTubeVoice.d.ts.map +1 -0
  49. package/dist/core/voice/DisTubeVoice.js +246 -0
  50. package/dist/core/voice/DisTubeVoice.js.map +1 -0
  51. package/dist/core/voice/DisTubeVoiceManager.d.ts +41 -0
  52. package/dist/core/voice/DisTubeVoiceManager.d.ts.map +1 -0
  53. package/dist/core/voice/DisTubeVoiceManager.js +67 -0
  54. package/dist/core/voice/DisTubeVoiceManager.js.map +1 -0
  55. package/dist/core/voice/index.d.ts +4 -0
  56. package/dist/core/voice/index.d.ts.map +1 -0
  57. package/dist/core/voice/index.js +16 -0
  58. package/dist/core/voice/index.js.map +1 -0
  59. package/dist/index.d.ts +8 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +23 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/plugin/http.d.ts +8 -0
  64. package/dist/plugin/http.d.ts.map +1 -0
  65. package/dist/plugin/http.js +20 -0
  66. package/dist/plugin/http.js.map +1 -0
  67. package/dist/plugin/https.d.ts +14 -0
  68. package/dist/plugin/https.d.ts.map +1 -0
  69. package/dist/plugin/https.js +50 -0
  70. package/dist/plugin/https.js.map +1 -0
  71. package/dist/plugin/index.d.ts +4 -0
  72. package/dist/plugin/index.d.ts.map +1 -0
  73. package/dist/plugin/index.js +16 -0
  74. package/dist/plugin/index.js.map +1 -0
  75. package/dist/plugin/youtube-dl.d.ts +11 -0
  76. package/dist/plugin/youtube-dl.d.ts.map +1 -0
  77. package/dist/plugin/youtube-dl.js +75 -0
  78. package/dist/plugin/youtube-dl.js.map +1 -0
  79. package/dist/struct/CustomPlugin.d.ts +27 -0
  80. package/dist/struct/CustomPlugin.d.ts.map +1 -0
  81. package/dist/struct/CustomPlugin.js +35 -0
  82. package/dist/struct/CustomPlugin.js.map +1 -0
  83. package/dist/struct/DisTubeError.d.ts +56 -0
  84. package/dist/struct/DisTubeError.d.ts.map +1 -0
  85. package/dist/struct/DisTubeError.js +75 -0
  86. package/dist/struct/DisTubeError.js.map +1 -0
  87. package/dist/struct/ExtractorPlugin.d.ts +29 -0
  88. package/dist/struct/ExtractorPlugin.d.ts.map +1 -0
  89. package/dist/struct/ExtractorPlugin.js +32 -0
  90. package/dist/struct/ExtractorPlugin.js.map +1 -0
  91. package/dist/struct/Playlist.d.ts +42 -0
  92. package/dist/struct/Playlist.d.ts.map +1 -0
  93. package/dist/struct/Playlist.js +104 -0
  94. package/dist/struct/Playlist.js.map +1 -0
  95. package/dist/struct/Plugin.d.ts +82 -0
  96. package/dist/struct/Plugin.d.ts.map +1 -0
  97. package/dist/struct/Plugin.js +108 -0
  98. package/dist/struct/Plugin.js.map +1 -0
  99. package/dist/struct/Queue.d.ts +217 -0
  100. package/dist/struct/Queue.d.ts.map +1 -0
  101. package/dist/struct/Queue.js +481 -0
  102. package/dist/struct/Queue.js.map +1 -0
  103. package/dist/struct/SearchResult.d.ts +28 -0
  104. package/dist/struct/SearchResult.d.ts.map +1 -0
  105. package/dist/struct/SearchResult.js +79 -0
  106. package/dist/struct/SearchResult.js.map +1 -0
  107. package/dist/struct/Song.d.ts +68 -0
  108. package/dist/struct/Song.d.ts.map +1 -0
  109. package/dist/struct/Song.js +229 -0
  110. package/dist/struct/Song.js.map +1 -0
  111. package/dist/struct/TaskQueue.d.ts +33 -0
  112. package/dist/struct/TaskQueue.d.ts.map +1 -0
  113. package/dist/struct/TaskQueue.js +58 -0
  114. package/dist/struct/TaskQueue.js.map +1 -0
  115. package/dist/struct/index.d.ts +10 -0
  116. package/dist/struct/index.d.ts.map +1 -0
  117. package/dist/struct/index.js +22 -0
  118. package/dist/struct/index.js.map +1 -0
  119. package/dist/tsconfig.tsbuildinfo +1 -0
  120. package/dist/type.d.ts +159 -0
  121. package/dist/type.d.ts.map +1 -0
  122. package/dist/type.js +3 -0
  123. package/dist/type.js.map +1 -0
  124. package/dist/util.d.ts +47 -0
  125. package/dist/util.d.ts.map +1 -0
  126. package/dist/util.js +205 -0
  127. package/dist/util.js.map +1 -0
  128. package/package.json +88 -62
  129. package/src/DisTube.js +0 -851
  130. package/src/DisTubeBase.js +0 -39
  131. package/src/DisTubeHandler.js +0 -440
  132. package/src/DisTubeOptions.js +0 -82
  133. package/src/Filter.js +0 -36
  134. package/src/Playlist.js +0 -75
  135. package/src/Plugin/CustomPlugin.js +0 -26
  136. package/src/Plugin/ExtractorPlugin.js +0 -25
  137. package/src/Plugin/Plugin.js +0 -36
  138. package/src/Plugin/http.js +0 -27
  139. package/src/Plugin/https.js +0 -27
  140. package/src/Queue.js +0 -340
  141. package/src/SearchResult.js +0 -57
  142. package/src/Song.js +0 -169
  143. package/src/util.js +0 -65
  144. package/typings/DisTube.d.ts +0 -518
  145. package/typings/DisTubeBase.d.ts +0 -31
  146. package/typings/DisTubeHandler.d.ts +0 -130
  147. package/typings/DisTubeOptions.d.ts +0 -5
  148. package/typings/Filter.d.ts +0 -83
  149. package/typings/Playlist.d.ts +0 -58
  150. package/typings/Plugin/CustomPlugin.d.ts +0 -21
  151. package/typings/Plugin/ExtractorPlugin.d.ts +0 -20
  152. package/typings/Plugin/Plugin.d.ts +0 -31
  153. package/typings/Plugin/http.d.ts +0 -4
  154. package/typings/Plugin/https.d.ts +0 -4
  155. package/typings/Queue.d.ts +0 -227
  156. package/typings/SearchResult.d.ts +0 -51
  157. package/typings/Song.d.ts +0 -153
  158. package/typings/util.d.ts +0 -6
@@ -0,0 +1 @@
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,aAAa,EAAE,MAAM,GAAG,CAAC;AAC/C,OAAO,EAEL,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,IAAI,EAKL,MAAM,IAAI,CAAC;AACZ,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEhG;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,WAAW;IAC7C,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC;gBACtB,OAAO,EAAE,OAAO;IA+C5B;;;;;;;OAOG;IACG,WAAW,CACf,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,YAAY,EAC9C,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,EACnB,WAAW,GAAE,WAAyD,GACrE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAOxB;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;IAKnE;;;;;OAKG;IACG,WAAW,CACf,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,QAAQ,GAAG,YAAY,GAAG,aAAa,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,GACxG,OAAO,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC;IAkBlC;;;;;;OAMG;IACG,eAAe,CACnB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,MAAM,EACpC,MAAM,SAAY,GACjB,OAAO,CAAC,QAAQ,CAAC;IAcpB;;;;;;;;;;;;;OAaG;IACG,oBAAoB,CACxB,OAAO,EAAE,OAAO,GAAG,WAAW,EAC9B,KAAK,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,YAAY,CAAC,EAAE,EACvC,UAAU,GAAE,GAAQ,EACpB,QAAQ,UAAO,GACd,OAAO,CAAC,QAAQ,CAAC;IAwBpB;;;;;;;;OAQG;IACG,cAAc,CAClB,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,YAAY,EAC9C,QAAQ,EAAE,QAAQ,EAClB,WAAW,CAAC,EAAE,WAAW,EACzB,IAAI,UAAQ,EACZ,OAAO,UAAQ,GACd,OAAO,CAAC,IAAI,CAAC;IAsBhB;;;;;OAKG;IACG,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAqB/E;;;;;;;;;OASG;IACG,4BAA4B,CAAC,CAAC,SAAS,YAAY,GAAG,IAAI,GAAG,QAAQ,EACzE,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IA6DpB;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa;CAW1C;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,337 @@
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.DisTubeHandler = void 0;
7
+ const ytdl_core_1 = __importDefault(require("@distube/ytdl-core"));
8
+ const ytpl_1 = __importDefault(require("@distube/ytpl"));
9
+ const _1 = require(".");
10
+ const __1 = require("..");
11
+ /**
12
+ * DisTube's Handler
13
+ * @extends DisTubeBase
14
+ * @private
15
+ */
16
+ class DisTubeHandler extends _1.DisTubeBase {
17
+ constructor(distube) {
18
+ super(distube);
19
+ this.ytdlOptions = this.options.ytdlOptions;
20
+ if (this.options.youtubeCookie) {
21
+ const requestOptions = {
22
+ headers: {
23
+ cookie: this.options.youtubeCookie,
24
+ },
25
+ };
26
+ if (this.options.youtubeIdentityToken) {
27
+ requestOptions.headers["x-youtube-identity-token"] = this.options.youtubeIdentityToken;
28
+ }
29
+ Object.assign(this.ytdlOptions, { requestOptions });
30
+ }
31
+ const client = this.client;
32
+ if (this.options.leaveOnEmpty) {
33
+ client.on("voiceStateUpdate", oldState => {
34
+ if (!(oldState === null || oldState === void 0 ? void 0 : oldState.channel))
35
+ return;
36
+ const queue = this.queues.get(oldState);
37
+ if (!queue) {
38
+ if ((0, __1.isVoiceChannelEmpty)(oldState)) {
39
+ setTimeout(() => {
40
+ if (!this.queues.get(oldState) && (0, __1.isVoiceChannelEmpty)(oldState))
41
+ this.voices.leave(oldState);
42
+ }, this.options.emptyCooldown * 1e3).unref();
43
+ }
44
+ return;
45
+ }
46
+ if (queue.emptyTimeout) {
47
+ clearTimeout(queue.emptyTimeout);
48
+ delete queue.emptyTimeout;
49
+ }
50
+ if ((0, __1.isVoiceChannelEmpty)(oldState)) {
51
+ queue.emptyTimeout = setTimeout(() => {
52
+ delete queue.emptyTimeout;
53
+ if ((0, __1.isVoiceChannelEmpty)(oldState)) {
54
+ queue.voice.leave();
55
+ this.emit("empty", queue);
56
+ if (queue.stopped)
57
+ queue.delete();
58
+ }
59
+ }, this.options.emptyCooldown * 1e3).unref();
60
+ }
61
+ });
62
+ }
63
+ }
64
+ /**
65
+ * Create a new guild queue
66
+ * @param {Discord.Message|Discord.VoiceChannel|Discord.StageChannel} message A user message | a voice channel
67
+ * @param {Song|Song[]} song Song to play
68
+ * @param {Discord.TextChannel} textChannel A text channel of the queue
69
+ * @throws {Error}
70
+ * @returns {Promise<Queue|true>} `true` if queue is not generated
71
+ */
72
+ async createQueue(message, song, textChannel = message.channel) {
73
+ var _a, _b, _c;
74
+ const voice = ((_c = (_b = (_a = message) === null || _a === void 0 ? void 0 : _a.member) === null || _b === void 0 ? void 0 : _b.voice) === null || _c === void 0 ? void 0 : _c.channel) || message;
75
+ if (!voice || (0, __1.isMessageInstance)(voice))
76
+ throw new __1.DisTubeError("NOT_IN_VOICE");
77
+ if (!(0, __1.isSupportedVoiceChannel)(voice))
78
+ throw new __1.DisTubeError("NOT_SUPPORTED_VOICE");
79
+ return this.queues.create(voice, song, textChannel);
80
+ }
81
+ /**
82
+ * @param {string} url url
83
+ * @param {boolean} [basic=false] getBasicInfo?
84
+ * @returns {Promise<ytdl.videoInfo>}
85
+ */
86
+ getYouTubeInfo(url, basic = false) {
87
+ if (basic)
88
+ return ytdl_core_1.default.getBasicInfo(url, this.ytdlOptions);
89
+ return ytdl_core_1.default.getInfo(url, this.ytdlOptions);
90
+ }
91
+ /**
92
+ * Resolve a Song
93
+ * @param {Discord.GuildMember} member Requested user
94
+ * @param {string|Song|SearchResult|Playlist} song URL | Search string | {@link Song}
95
+ * @returns {Promise<Song|Playlist|null>} Resolved
96
+ */
97
+ async resolveSong(member, song) {
98
+ if (!song)
99
+ return null;
100
+ if (song instanceof __1.Song || song instanceof __1.Playlist)
101
+ return song._patchMember(member);
102
+ if (song instanceof __1.SearchResult) {
103
+ if (song.type === "video")
104
+ return new __1.Song(song, member);
105
+ return this.resolvePlaylist(member, song.url);
106
+ }
107
+ if (typeof song === "object")
108
+ return new __1.Song(song, member);
109
+ if (ytdl_core_1.default.validateURL(song))
110
+ return new __1.Song(await this.getYouTubeInfo(song), member);
111
+ if ((0, __1.isURL)(song)) {
112
+ for (const plugin of this.distube.extractorPlugins) {
113
+ if (await plugin.validate(song))
114
+ return plugin.resolve(song, member);
115
+ }
116
+ throw new __1.DisTubeError("NOT_SUPPORTED_URL");
117
+ }
118
+ throw new __1.DisTubeError("CANNOT_RESOLVE_SONG", typeof song);
119
+ }
120
+ /**
121
+ * Resole Song[] or url to a Playlist
122
+ * @param {Discord.GuildMember} member Requested user
123
+ * @param {Song[]|string} playlist Resolvable playlist
124
+ * @param {string} [source="youtube"] Playlist source
125
+ * @returns {Promise<Playlist>}
126
+ */
127
+ async resolvePlaylist(member, playlist, source = "youtube") {
128
+ if (playlist instanceof __1.Playlist)
129
+ return playlist;
130
+ let solvablePlaylist;
131
+ if (typeof playlist === "string") {
132
+ solvablePlaylist = await (0, ytpl_1.default)(playlist, { limit: Infinity });
133
+ solvablePlaylist.items = solvablePlaylist.items
134
+ .filter(v => !v.thumbnail.includes("no_thumbnail"))
135
+ .map(v => new __1.Song(v, member));
136
+ }
137
+ else {
138
+ solvablePlaylist = playlist;
139
+ }
140
+ return new __1.Playlist(solvablePlaylist, member, { source });
141
+ }
142
+ /**
143
+ * Create a custom playlist
144
+ * @returns {Promise<Playlist>}
145
+ * @param {Discord.Message|Discord.GuildMember} message A message from guild channel | A guild member
146
+ * @param {Array<string|Song|SearchResult>} songs Array of url, Song or SearchResult
147
+ * @param {Object} [properties={}] Additional properties such as `name`
148
+ * @param {boolean} [parallel=true] Whether or not fetch the songs in parallel
149
+ * @example
150
+ * const songs = ["https://www.youtube.com/watch?v=xxx", "https://www.youtube.com/watch?v=yyy"];
151
+ * const playlist = await distube.handler.createCustomPlaylist(member, songs, { name: "My playlist name" }, true);
152
+ * // Or fetching custom playlist sequentially (reduce lag for low specs)
153
+ * const playlist = await distube.handler.createCustomPlaylist(member, songs, false);
154
+ * distube.playVoiceChannel(voiceChannel, playlist, { ... });
155
+ */
156
+ async createCustomPlaylist(message, songs, properties = {}, parallel = true) {
157
+ var _a;
158
+ const member = ((_a = message) === null || _a === void 0 ? void 0 : _a.member) || message;
159
+ if (!Array.isArray(songs))
160
+ throw new __1.DisTubeError("INVALID_TYPE", "Array", songs, "songs");
161
+ if (!songs.length)
162
+ throw new __1.DisTubeError("EMPTY_ARRAY", "songs");
163
+ songs = songs.filter(song => song instanceof __1.Song || (song instanceof __1.SearchResult && song.type === "video") || (0, __1.isURL)(song));
164
+ if (!songs.length)
165
+ throw new __1.DisTubeError("NO_VALID_SONG");
166
+ let resolvedSongs;
167
+ if (parallel) {
168
+ const promises = songs.map((song) => this.resolveSong(member, song).catch(() => undefined));
169
+ resolvedSongs = (await Promise.all(promises)).filter((s) => !!s);
170
+ }
171
+ else {
172
+ const resolved = [];
173
+ for (const song of songs) {
174
+ resolved.push(await this.resolveSong(member, song).catch(() => undefined));
175
+ }
176
+ resolvedSongs = resolved.filter((s) => !!s);
177
+ }
178
+ return new __1.Playlist(resolvedSongs, member, properties);
179
+ }
180
+ /**
181
+ * Play / add a playlist
182
+ * @returns {Promise<void>}
183
+ * @param {Discord.Message|Discord.VoiceChannel|Discord.StageChannel} message A message | a voice channel
184
+ * @param {Playlist|string} playlist A YouTube playlist url | a Playlist
185
+ * @param {Discord.TextChannel|boolean} [textChannel] The default text channel of the queue
186
+ * @param {boolean} [skip=false] Skip the playing song (if exists) and play the added playlist instantly
187
+ * @param {boolean} [unshift=false] Add the playlist to the beginning of the queue (after the playing song if exists)
188
+ */
189
+ async handlePlaylist(message, playlist, textChannel, skip = false, unshift = false) {
190
+ if (!(playlist instanceof __1.Playlist))
191
+ throw new __1.DisTubeError("INVALID_TYPE", "Playlist", playlist, "playlist");
192
+ if (!this.options.nsfw && !(textChannel === null || textChannel === void 0 ? void 0 : textChannel.nsfw))
193
+ playlist.songs = playlist.songs.filter(s => !s.age_restricted);
194
+ if (!playlist.songs.length) {
195
+ if (!this.options.nsfw && !(textChannel === null || textChannel === void 0 ? void 0 : textChannel.nsfw))
196
+ throw new __1.DisTubeError("EMPTY_FILTERED_PLAYLIST");
197
+ throw new __1.DisTubeError("EMPTY_PLAYLIST");
198
+ }
199
+ const songs = playlist.songs;
200
+ const queue = this.queues.get(message);
201
+ if (queue) {
202
+ queue.addToQueue(songs, skip || unshift ? 1 : -1);
203
+ if (skip)
204
+ queue.skip();
205
+ else
206
+ this.emit("addList", queue, playlist);
207
+ }
208
+ else {
209
+ const newQueue = await this.createQueue(message, songs, textChannel);
210
+ if (newQueue instanceof __1.Queue) {
211
+ if (this.options.emitAddListWhenCreatingQueue)
212
+ this.emit("addList", newQueue, playlist);
213
+ this.emit("playSong", newQueue, newQueue.songs[0]);
214
+ }
215
+ }
216
+ }
217
+ /**
218
+ * Search for a song, fire {@link DisTube#event:error} if not found.
219
+ * @param {Discord.Message} message The original message from an user
220
+ * @param {string} query The query string
221
+ * @returns {Promise<SearchResult?>} Song info
222
+ */
223
+ async searchSong(message, query) {
224
+ var _a;
225
+ if (!(0, __1.isMessageInstance)(message))
226
+ throw new __1.DisTubeError("INVALID_TYPE", "Discord.Message", message, "message");
227
+ if (typeof query !== "string")
228
+ throw new __1.DisTubeError("INVALID_TYPE", "string", query, "query");
229
+ if (query.length === 0)
230
+ throw new __1.DisTubeError("EMPTY_STRING", "query");
231
+ const limit = this.options.searchSongs > 1 ? this.options.searchSongs : 1;
232
+ const results = await this.distube
233
+ .search(query, {
234
+ limit,
235
+ safeSearch: this.options.nsfw ? false : !((_a = message.channel) === null || _a === void 0 ? void 0 : _a.nsfw),
236
+ })
237
+ .catch(() => {
238
+ if (!this.emit("searchNoResult", message, query)) {
239
+ // eslint-disable-next-line no-console
240
+ console.warn("searchNoResult event does not have any listeners! Emits `error` event instead.");
241
+ throw new __1.DisTubeError("NO_RESULT");
242
+ }
243
+ });
244
+ if (!results)
245
+ return null;
246
+ return this.createSearchMessageCollector(message, results, query);
247
+ }
248
+ /**
249
+ * Create a message collector for selecting search results.
250
+ *
251
+ * Needed events: {@link DisTube#event:searchResult}, {@link DisTube#event:searchCancel},
252
+ * {@link DisTube#event:searchInvalidAnswer}, {@link DisTube#event:searchDone}.
253
+ * @param {Discord.Message} message The original message from an user
254
+ * @param {Array<SearchResult|Song|Playlist>} results The search results
255
+ * @param {string?} [query] The query string
256
+ * @returns {Promise<SearchResult|Song|Playlist|null>} Selected result
257
+ */
258
+ async createSearchMessageCollector(message, results, query) {
259
+ if (!(0, __1.isMessageInstance)(message))
260
+ throw new __1.DisTubeError("INVALID_TYPE", "Discord.Message", message, "message");
261
+ if (!Array.isArray(results) || results.length == 0) {
262
+ throw new __1.DisTubeError("INVALID_TYPE", "Array<SearchResult|Song|Playlist>", results, "results");
263
+ }
264
+ if (this.options.searchSongs > 1) {
265
+ const searchEvents = [
266
+ "searchNoResult",
267
+ "searchResult",
268
+ "searchCancel",
269
+ "searchInvalidAnswer",
270
+ "searchDone",
271
+ ];
272
+ for (const evn of searchEvents) {
273
+ if (this.distube.listenerCount(evn) === 0) {
274
+ /* eslint-disable no-console */
275
+ console.warn(`"searchSongs" option is disabled due to missing "${evn}" listener.`);
276
+ console.warn(`If you don't want to use "${evn}" event, simply add an empty listener (not recommended):\n` +
277
+ `<DisTube>.on("${evn}", () => {})`);
278
+ /* eslint-enable no-console */
279
+ this.options.searchSongs = 0;
280
+ }
281
+ }
282
+ }
283
+ const limit = this.options.searchSongs > 1 ? this.options.searchSongs : 1;
284
+ let result = results[0];
285
+ if (limit > 1) {
286
+ results.splice(limit);
287
+ this.emit("searchResult", message, results, query);
288
+ const c = message.channel;
289
+ const answers = await (c.awaitMessages.length === 0
290
+ ? c.awaitMessages({
291
+ filter: (m) => m.author.id === message.author.id,
292
+ max: 1,
293
+ time: this.options.searchCooldown * 1e3,
294
+ errors: ["time"],
295
+ })
296
+ : c.awaitMessages((m) => m.author.id === message.author.id, {
297
+ max: 1,
298
+ time: this.options.searchCooldown * 1e3,
299
+ errors: ["time"],
300
+ })).catch(() => undefined);
301
+ const ans = answers === null || answers === void 0 ? void 0 : answers.first();
302
+ if (!ans) {
303
+ this.emit("searchCancel", message, query);
304
+ return null;
305
+ }
306
+ const index = parseInt(ans.content, 10);
307
+ if (isNaN(index) || index > results.length || index < 1) {
308
+ this.emit("searchInvalidAnswer", message, ans, query);
309
+ return null;
310
+ }
311
+ this.emit("searchDone", message, ans, query);
312
+ result = results[index - 1];
313
+ }
314
+ return result;
315
+ }
316
+ /**
317
+ * Create a ytdl stream
318
+ * @param {Queue} queue Queue
319
+ * @returns {DisTubeStream}
320
+ */
321
+ createStream(queue) {
322
+ var _a;
323
+ const { duration, formats, isLive, source, streamURL } = queue.songs[0];
324
+ const filterArgs = [];
325
+ queue.filters.forEach((filter) => filterArgs.push(this.distube.filters[filter]));
326
+ const ffmpegArgs = ((_a = queue.filters) === null || _a === void 0 ? void 0 : _a.length) ? ["-af", filterArgs.join(",")] : undefined;
327
+ const seek = duration ? queue.beginTime : undefined;
328
+ const streamOptions = { ffmpegArgs, seek, isLive };
329
+ Object.assign(streamOptions, this.ytdlOptions);
330
+ if (source === "youtube")
331
+ return _1.DisTubeStream.YouTube(formats, streamOptions);
332
+ return _1.DisTubeStream.DirectLink(streamURL, streamOptions);
333
+ }
334
+ }
335
+ exports.DisTubeHandler = DisTubeHandler;
336
+ exports.default = DisTubeHandler;
337
+ //# sourceMappingURL=DisTubeHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DisTubeHandler.js","sourceRoot":"","sources":["../../src/core/DisTubeHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import ytdl from \"@distube/ytdl-core\";\nimport ytpl from \"@distube/ytpl\";\nimport { DisTubeBase, DisTubeStream } from \".\";\nimport {\n DisTubeError,\n Playlist,\n Queue,\n SearchResult,\n Song,\n isMessageInstance,\n isSupportedVoiceChannel,\n isURL,\n isVoiceChannelEmpty,\n} from \"..\";\nimport type { DisTube, OtherSongInfo } from \"..\";\nimport type { GuildMember, Message, StageChannel, TextChannel, VoiceChannel } from \"discord.js\";\n\n/**\n * DisTube's Handler\n * @extends DisTubeBase\n * @private\n */\nexport class DisTubeHandler extends DisTubeBase {\n ytdlOptions: ytdl.downloadOptions;\n constructor(distube: DisTube) {\n super(distube);\n this.ytdlOptions = this.options.ytdlOptions;\n\n if (this.options.youtubeCookie) {\n const requestOptions: any = {\n headers: {\n cookie: this.options.youtubeCookie,\n },\n };\n if (this.options.youtubeIdentityToken) {\n requestOptions.headers[\"x-youtube-identity-token\"] = this.options.youtubeIdentityToken;\n }\n Object.assign(this.ytdlOptions, { requestOptions });\n }\n\n const client = this.client;\n if (this.options.leaveOnEmpty) {\n client.on(\"voiceStateUpdate\", oldState => {\n if (!oldState?.channel) return;\n const queue = this.queues.get(oldState);\n if (!queue) {\n if (isVoiceChannelEmpty(oldState)) {\n setTimeout(() => {\n if (!this.queues.get(oldState) && isVoiceChannelEmpty(oldState)) this.voices.leave(oldState);\n }, this.options.emptyCooldown * 1e3).unref();\n }\n return;\n }\n if (queue.emptyTimeout) {\n clearTimeout(queue.emptyTimeout);\n delete queue.emptyTimeout;\n }\n if (isVoiceChannelEmpty(oldState)) {\n queue.emptyTimeout = setTimeout(() => {\n delete queue.emptyTimeout;\n if (isVoiceChannelEmpty(oldState)) {\n queue.voice.leave();\n this.emit(\"empty\", queue);\n if (queue.stopped) queue.delete();\n }\n }, this.options.emptyCooldown * 1e3).unref();\n }\n });\n }\n }\n\n /**\n * Create a new guild queue\n * @param {Discord.Message|Discord.VoiceChannel|Discord.StageChannel} message A user message | a voice channel\n * @param {Song|Song[]} song Song to play\n * @param {Discord.TextChannel} textChannel A text channel of the queue\n * @throws {Error}\n * @returns {Promise<Queue|true>} `true` if queue is not generated\n */\n async createQueue(\n message: Message | VoiceChannel | StageChannel,\n song: Song | Song[],\n textChannel: TextChannel = (message as Message).channel as TextChannel,\n ): Promise<Queue | true> {\n const voice = (message as Message)?.member?.voice?.channel || message;\n if (!voice || isMessageInstance(voice)) throw new DisTubeError(\"NOT_IN_VOICE\");\n if (!isSupportedVoiceChannel(voice)) throw new DisTubeError(\"NOT_SUPPORTED_VOICE\");\n return this.queues.create(voice, song, textChannel);\n }\n\n /**\n * @param {string} url url\n * @param {boolean} [basic=false] getBasicInfo?\n * @returns {Promise<ytdl.videoInfo>}\n */\n getYouTubeInfo(url: string, basic = false): Promise<ytdl.videoInfo> {\n if (basic) return ytdl.getBasicInfo(url, this.ytdlOptions);\n return ytdl.getInfo(url, this.ytdlOptions);\n }\n\n /**\n * Resolve a Song\n * @param {Discord.GuildMember} member Requested user\n * @param {string|Song|SearchResult|Playlist} song URL | Search string | {@link Song}\n * @returns {Promise<Song|Playlist|null>} Resolved\n */\n async resolveSong(\n member: GuildMember,\n song: string | ytdl.videoInfo | Song | Playlist | SearchResult | OtherSongInfo | ytdl.relatedVideo | null,\n ): Promise<Song | Playlist | null> {\n if (!song) return null;\n if (song instanceof Song || song instanceof Playlist) return song._patchMember(member);\n if (song instanceof SearchResult) {\n if (song.type === \"video\") return new Song(song, member);\n return this.resolvePlaylist(member, song.url);\n }\n if (typeof song === \"object\") return new Song(song, member);\n if (ytdl.validateURL(song)) return new Song(await this.getYouTubeInfo(song), member);\n if (isURL(song)) {\n for (const plugin of this.distube.extractorPlugins) {\n if (await plugin.validate(song)) return plugin.resolve(song, member);\n }\n throw new DisTubeError(\"NOT_SUPPORTED_URL\");\n }\n throw new DisTubeError(\"CANNOT_RESOLVE_SONG\", typeof song);\n }\n\n /**\n * Resole Song[] or url to a Playlist\n * @param {Discord.GuildMember} member Requested user\n * @param {Song[]|string} playlist Resolvable playlist\n * @param {string} [source=\"youtube\"] Playlist source\n * @returns {Promise<Playlist>}\n */\n async resolvePlaylist(\n member: GuildMember,\n playlist: Playlist | Song[] | string,\n source = \"youtube\",\n ): Promise<Playlist> {\n if (playlist instanceof Playlist) return playlist;\n let solvablePlaylist: Song[] | ytpl.result;\n if (typeof playlist === \"string\") {\n solvablePlaylist = await ytpl(playlist, { limit: Infinity });\n (solvablePlaylist as any).items = solvablePlaylist.items\n .filter(v => !v.thumbnail.includes(\"no_thumbnail\"))\n .map(v => new Song(v as OtherSongInfo, member));\n } else {\n solvablePlaylist = playlist;\n }\n return new Playlist(solvablePlaylist, member, { source });\n }\n\n /**\n * Create a custom playlist\n * @returns {Promise<Playlist>}\n * @param {Discord.Message|Discord.GuildMember} message A message from guild channel | A guild member\n * @param {Array<string|Song|SearchResult>} songs Array of url, Song or SearchResult\n * @param {Object} [properties={}] Additional properties such as `name`\n * @param {boolean} [parallel=true] Whether or not fetch the songs in parallel\n * @example\n * const songs = [\"https://www.youtube.com/watch?v=xxx\", \"https://www.youtube.com/watch?v=yyy\"];\n * const playlist = await distube.handler.createCustomPlaylist(member, songs, { name: \"My playlist name\" }, true);\n * // Or fetching custom playlist sequentially (reduce lag for low specs)\n * const playlist = await distube.handler.createCustomPlaylist(member, songs, false);\n * distube.playVoiceChannel(voiceChannel, playlist, { ... });\n */\n async createCustomPlaylist(\n message: Message | GuildMember,\n songs: (string | Song | SearchResult)[],\n properties: any = {},\n parallel = true,\n ): Promise<Playlist> {\n const member = (message as Message)?.member || (message as GuildMember);\n if (!Array.isArray(songs)) throw new DisTubeError(\"INVALID_TYPE\", \"Array\", songs, \"songs\");\n if (!songs.length) throw new DisTubeError(\"EMPTY_ARRAY\", \"songs\");\n songs = songs.filter(\n song => song instanceof Song || (song instanceof SearchResult && song.type === \"video\") || isURL(song),\n );\n if (!songs.length) throw new DisTubeError(\"NO_VALID_SONG\");\n let resolvedSongs: Song[];\n if (parallel) {\n const promises = songs.map((song: string | Song | SearchResult) =>\n this.resolveSong(member, song).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 songs) {\n resolved.push(await this.resolveSong(member, song).catch(() => undefined));\n }\n resolvedSongs = resolved.filter((s: any): s is Song => !!s);\n }\n return new Playlist(resolvedSongs, member, properties);\n }\n\n /**\n * Play / add a playlist\n * @returns {Promise<void>}\n * @param {Discord.Message|Discord.VoiceChannel|Discord.StageChannel} message A message | a voice channel\n * @param {Playlist|string} playlist A YouTube playlist url | a Playlist\n * @param {Discord.TextChannel|boolean} [textChannel] The default text channel of the queue\n * @param {boolean} [skip=false] Skip the playing song (if exists) and play the added playlist instantly\n * @param {boolean} [unshift=false] Add the playlist to the beginning of the queue (after the playing song if exists)\n */\n async handlePlaylist(\n message: Message | VoiceChannel | StageChannel,\n playlist: Playlist,\n textChannel?: TextChannel,\n skip = false,\n unshift = false,\n ): Promise<void> {\n if (!(playlist instanceof Playlist)) throw new DisTubeError(\"INVALID_TYPE\", \"Playlist\", playlist, \"playlist\");\n if (!this.options.nsfw && !textChannel?.nsfw) playlist.songs = playlist.songs.filter(s => !s.age_restricted);\n if (!playlist.songs.length) {\n if (!this.options.nsfw && !textChannel?.nsfw) throw new DisTubeError(\"EMPTY_FILTERED_PLAYLIST\");\n throw new DisTubeError(\"EMPTY_PLAYLIST\");\n }\n const songs = playlist.songs;\n const queue = this.queues.get(message);\n if (queue) {\n queue.addToQueue(songs, skip || unshift ? 1 : -1);\n if (skip) queue.skip();\n else this.emit(\"addList\", queue, playlist);\n } else {\n const newQueue = await this.createQueue(message, songs, textChannel);\n if (newQueue instanceof Queue) {\n if (this.options.emitAddListWhenCreatingQueue) this.emit(\"addList\", newQueue, playlist);\n this.emit(\"playSong\", newQueue, newQueue.songs[0]);\n }\n }\n }\n\n /**\n * Search for a song, fire {@link DisTube#event:error} if not found.\n * @param {Discord.Message} message The original message from an user\n * @param {string} query The query string\n * @returns {Promise<SearchResult?>} Song info\n */\n async searchSong(message: Message, query: string): Promise<SearchResult | null> {\n if (!isMessageInstance(message)) throw new DisTubeError(\"INVALID_TYPE\", \"Discord.Message\", message, \"message\");\n if (typeof query !== \"string\") throw new DisTubeError(\"INVALID_TYPE\", \"string\", query, \"query\");\n if (query.length === 0) throw new DisTubeError(\"EMPTY_STRING\", \"query\");\n const limit = this.options.searchSongs > 1 ? this.options.searchSongs : 1;\n const results = await this.distube\n .search(query, {\n limit,\n safeSearch: this.options.nsfw ? false : !(message.channel as TextChannel)?.nsfw,\n })\n .catch(() => {\n if (!this.emit(\"searchNoResult\", message, query)) {\n // eslint-disable-next-line no-console\n console.warn(\"searchNoResult event does not have any listeners! Emits `error` event instead.\");\n throw new DisTubeError(\"NO_RESULT\");\n }\n });\n if (!results) return null;\n return this.createSearchMessageCollector(message, results, query);\n }\n\n /**\n * Create a message collector for selecting search results.\n *\n * Needed events: {@link DisTube#event:searchResult}, {@link DisTube#event:searchCancel},\n * {@link DisTube#event:searchInvalidAnswer}, {@link DisTube#event:searchDone}.\n * @param {Discord.Message} message The original message from an user\n * @param {Array<SearchResult|Song|Playlist>} results The search results\n * @param {string?} [query] The query string\n * @returns {Promise<SearchResult|Song|Playlist|null>} Selected result\n */\n async createSearchMessageCollector<R extends SearchResult | Song | Playlist>(\n message: Message,\n results: Array<R>,\n query?: string,\n ): Promise<R | null> {\n if (!isMessageInstance(message)) throw new DisTubeError(\"INVALID_TYPE\", \"Discord.Message\", message, \"message\");\n if (!Array.isArray(results) || results.length == 0) {\n throw new DisTubeError(\"INVALID_TYPE\", \"Array<SearchResult|Song|Playlist>\", results, \"results\");\n }\n if (this.options.searchSongs > 1) {\n const searchEvents = [\n \"searchNoResult\",\n \"searchResult\",\n \"searchCancel\",\n \"searchInvalidAnswer\",\n \"searchDone\",\n ] as const;\n for (const evn of searchEvents) {\n if (this.distube.listenerCount(evn) === 0) {\n /* eslint-disable no-console */\n console.warn(`\"searchSongs\" option is disabled due to missing \"${evn}\" listener.`);\n console.warn(\n `If you don't want to use \"${evn}\" event, simply add an empty listener (not recommended):\\n` +\n `<DisTube>.on(\"${evn}\", () => {})`,\n );\n /* eslint-enable no-console */\n this.options.searchSongs = 0;\n }\n }\n }\n const limit = this.options.searchSongs > 1 ? this.options.searchSongs : 1;\n let result = results[0];\n if (limit > 1) {\n results.splice(limit);\n this.emit(\"searchResult\", message, results, query);\n const c = message.channel;\n const answers = await (c.awaitMessages.length === 0\n ? c.awaitMessages({\n filter: (m: Message) => m.author.id === message.author.id,\n max: 1,\n time: this.options.searchCooldown * 1e3,\n errors: [\"time\"],\n })\n : (c.awaitMessages as any)((m: Message) => m.author.id === message.author.id, {\n max: 1,\n time: this.options.searchCooldown * 1e3,\n errors: [\"time\"],\n })\n ).catch(() => undefined);\n const ans = answers?.first();\n if (!ans) {\n this.emit(\"searchCancel\", message, query);\n return null;\n }\n const index = parseInt(ans.content, 10);\n if (isNaN(index) || index > results.length || index < 1) {\n this.emit(\"searchInvalidAnswer\", message, ans, query);\n return null;\n }\n this.emit(\"searchDone\", message, ans, query);\n result = results[index - 1];\n }\n return result;\n }\n\n /**\n * Create a ytdl stream\n * @param {Queue} queue Queue\n * @returns {DisTubeStream}\n */\n createStream(queue: Queue): DisTubeStream {\n const { duration, formats, isLive, source, streamURL } = queue.songs[0];\n const filterArgs: string[] = [];\n queue.filters.forEach((filter: string | number) => filterArgs.push(this.distube.filters[filter]));\n const ffmpegArgs = queue.filters?.length ? [\"-af\", filterArgs.join(\",\")] : undefined;\n const seek = duration ? queue.beginTime : undefined;\n const streamOptions = { ffmpegArgs, seek, isLive };\n Object.assign(streamOptions, this.ytdlOptions);\n if (source === \"youtube\") return DisTubeStream.YouTube(formats, streamOptions);\n return DisTubeStream.DirectLink(streamURL as string, streamOptions);\n }\n}\n\nexport default DisTubeHandler;\n"]}
@@ -0,0 +1,26 @@
1
+ import type ytdl from "@distube/ytdl-core";
2
+ import type { CustomPlugin, DisTubeOptions, ExtractorPlugin, Filters } from "..";
3
+ export declare class Options {
4
+ plugins: (CustomPlugin | ExtractorPlugin)[];
5
+ emitNewSongOnly: boolean;
6
+ leaveOnFinish: boolean;
7
+ leaveOnStop: boolean;
8
+ leaveOnEmpty: boolean;
9
+ emptyCooldown: number;
10
+ savePreviousSongs: boolean;
11
+ searchSongs: number;
12
+ searchCooldown: number;
13
+ youtubeCookie?: string;
14
+ youtubeIdentityToken?: string;
15
+ youtubeDL: boolean;
16
+ updateYouTubeDL: boolean;
17
+ customFilters: Filters;
18
+ ytdlOptions: ytdl.getInfoOptions;
19
+ nsfw: boolean;
20
+ emitAddSongWhenCreatingQueue: boolean;
21
+ emitAddListWhenCreatingQueue: boolean;
22
+ constructor(options: DisTubeOptions);
23
+ private _validateOptions;
24
+ }
25
+ export default Options;
26
+ //# sourceMappingURL=DisTubeOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DisTubeOptions.d.ts","sourceRoot":"","sources":["../../src/core/DisTubeOptions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAEjF,qBAAa,OAAO;IAClB,OAAO,EAAE,CAAC,YAAY,GAAG,eAAe,CAAC,EAAE,CAAC;IAC5C,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,4BAA4B,EAAE,OAAO,CAAC;IACtC,4BAA4B,EAAE,OAAO,CAAC;gBAC1B,OAAO,EAAE,cAAc;IA6BnC,OAAO,CAAC,gBAAgB;CAuEzB;AAED,eAAe,OAAO,CAAC"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Options = void 0;
4
+ const __1 = require("..");
5
+ class Options {
6
+ constructor(options) {
7
+ if (typeof options !== "object" || Array.isArray(options)) {
8
+ throw new __1.DisTubeError("INVALID_TYPE", "object", options, "DisTubeOptions");
9
+ }
10
+ const def = { ...__1.defaultOptions };
11
+ // Object.assign(this, defaultOptions, options);
12
+ const opts = Object.assign({}, def, options);
13
+ this.plugins = opts.plugins;
14
+ this.emitNewSongOnly = opts.emitNewSongOnly;
15
+ this.leaveOnEmpty = opts.leaveOnEmpty;
16
+ this.leaveOnFinish = opts.leaveOnFinish;
17
+ this.leaveOnStop = opts.leaveOnStop;
18
+ this.savePreviousSongs = opts.savePreviousSongs;
19
+ this.youtubeDL = opts.youtubeDL;
20
+ this.updateYouTubeDL = opts.updateYouTubeDL;
21
+ this.searchSongs = opts.searchSongs;
22
+ this.youtubeCookie = opts.youtubeCookie;
23
+ this.youtubeIdentityToken = opts.youtubeIdentityToken;
24
+ this.customFilters = opts.customFilters;
25
+ this.ytdlOptions = opts.ytdlOptions;
26
+ this.searchCooldown = opts.searchCooldown;
27
+ this.emptyCooldown = opts.emptyCooldown;
28
+ this.nsfw = opts.nsfw;
29
+ this.emitAddSongWhenCreatingQueue = opts.emitAddSongWhenCreatingQueue;
30
+ this.emitAddListWhenCreatingQueue = opts.emitAddListWhenCreatingQueue;
31
+ (0, __1.checkInvalidKey)(opts, this, "DisTubeOptions");
32
+ this._validateOptions();
33
+ }
34
+ _validateOptions(options = this) {
35
+ if (typeof options.emitNewSongOnly !== "boolean") {
36
+ throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.emitNewSongOnly, "DisTubeOptions.emitNewSongOnly");
37
+ }
38
+ if (typeof options.leaveOnEmpty !== "boolean") {
39
+ throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.leaveOnEmpty, "DisTubeOptions.leaveOnEmpty");
40
+ }
41
+ if (typeof options.leaveOnFinish !== "boolean") {
42
+ throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.leaveOnFinish, "DisTubeOptions.leaveOnFinish");
43
+ }
44
+ if (typeof options.leaveOnStop !== "boolean") {
45
+ throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.leaveOnStop, "DisTubeOptions.leaveOnStop");
46
+ }
47
+ if (typeof options.savePreviousSongs !== "boolean") {
48
+ throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.savePreviousSongs, "DisTubeOptions.savePreviousSongs");
49
+ }
50
+ if (typeof options.youtubeDL !== "boolean") {
51
+ throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.youtubeDL, "DisTubeOptions.youtubeDL");
52
+ }
53
+ if (typeof options.updateYouTubeDL !== "boolean") {
54
+ throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.updateYouTubeDL, "DisTubeOptions.updateYouTubeDL");
55
+ }
56
+ if (typeof options.youtubeCookie !== "undefined" && typeof options.youtubeCookie !== "string") {
57
+ throw new __1.DisTubeError("INVALID_TYPE", "string", options.youtubeCookie, "DisTubeOptions.youtubeCookie");
58
+ }
59
+ if (typeof options.youtubeIdentityToken !== "undefined" && typeof options.youtubeIdentityToken !== "string") {
60
+ throw new __1.DisTubeError("INVALID_TYPE", "string", options.youtubeIdentityToken, "DisTubeOptions.youtubeIdentityToken");
61
+ }
62
+ if (typeof options.customFilters !== "object" || Array.isArray(options.customFilters)) {
63
+ throw new __1.DisTubeError("INVALID_TYPE", "object", options.customFilters, "DisTubeOptions.customFilters");
64
+ }
65
+ if (typeof options.ytdlOptions !== "object" || Array.isArray(options.ytdlOptions)) {
66
+ throw new __1.DisTubeError("INVALID_TYPE", "object", options.ytdlOptions, "DisTubeOptions.ytdlOptions");
67
+ }
68
+ if (typeof options.searchCooldown !== "number" || isNaN(options.searchCooldown)) {
69
+ throw new __1.DisTubeError("INVALID_TYPE", "number", options.searchCooldown, "DisTubeOptions.searchCooldown");
70
+ }
71
+ if (typeof options.emptyCooldown !== "number" || isNaN(options.emptyCooldown)) {
72
+ throw new __1.DisTubeError("INVALID_TYPE", "number", options.emptyCooldown, "DisTubeOptions.emptyCooldown");
73
+ }
74
+ if (typeof options.searchSongs !== "number" || isNaN(options.searchSongs)) {
75
+ throw new __1.DisTubeError("INVALID_TYPE", "number", options.searchSongs, "DisTubeOptions.searchSongs");
76
+ }
77
+ if (!Array.isArray(options.plugins)) {
78
+ throw new __1.DisTubeError("INVALID_TYPE", "Array<Plugin>", options.plugins, "DisTubeOptions.plugins");
79
+ }
80
+ if (typeof options.nsfw !== "boolean") {
81
+ throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.nsfw, "DisTubeOptions.nsfw");
82
+ }
83
+ if (typeof options.emitAddSongWhenCreatingQueue !== "boolean") {
84
+ throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.emitAddSongWhenCreatingQueue, "DisTubeOptions.emitAddSongWhenCreatingQueue");
85
+ }
86
+ if (typeof options.emitAddListWhenCreatingQueue !== "boolean") {
87
+ throw new __1.DisTubeError("INVALID_TYPE", "boolean", options.emitAddListWhenCreatingQueue, "DisTubeOptions.emitAddListWhenCreatingQueue");
88
+ }
89
+ }
90
+ }
91
+ exports.Options = Options;
92
+ exports.default = Options;
93
+ //# sourceMappingURL=DisTubeOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DisTubeOptions.js","sourceRoot":"","sources":["../../src/core/DisTubeOptions.ts"],"names":[],"mappings":"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","sourcesContent":["import { DisTubeError, checkInvalidKey, defaultOptions } from \"..\";\nimport type ytdl from \"@distube/ytdl-core\";\nimport type { CustomPlugin, DisTubeOptions, ExtractorPlugin, Filters } from \"..\";\n\nexport class Options {\n plugins: (CustomPlugin | ExtractorPlugin)[];\n emitNewSongOnly: boolean;\n leaveOnFinish: boolean;\n leaveOnStop: boolean;\n leaveOnEmpty: boolean;\n emptyCooldown: number;\n savePreviousSongs: boolean;\n searchSongs: number;\n searchCooldown: number;\n youtubeCookie?: string;\n youtubeIdentityToken?: string;\n youtubeDL: boolean;\n updateYouTubeDL: boolean;\n customFilters: Filters;\n ytdlOptions: ytdl.getInfoOptions;\n nsfw: boolean;\n emitAddSongWhenCreatingQueue: boolean;\n emitAddListWhenCreatingQueue: boolean;\n constructor(options: DisTubeOptions) {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"object\", options, \"DisTubeOptions\");\n }\n const def = { ...defaultOptions };\n // Object.assign(this, defaultOptions, options);\n const opts = Object.assign({}, def, options);\n this.plugins = opts.plugins;\n this.emitNewSongOnly = opts.emitNewSongOnly;\n this.leaveOnEmpty = opts.leaveOnEmpty;\n this.leaveOnFinish = opts.leaveOnFinish;\n this.leaveOnStop = opts.leaveOnStop;\n this.savePreviousSongs = opts.savePreviousSongs;\n this.youtubeDL = opts.youtubeDL;\n this.updateYouTubeDL = opts.updateYouTubeDL;\n this.searchSongs = opts.searchSongs;\n this.youtubeCookie = opts.youtubeCookie;\n this.youtubeIdentityToken = opts.youtubeIdentityToken;\n this.customFilters = opts.customFilters;\n this.ytdlOptions = opts.ytdlOptions;\n this.searchCooldown = opts.searchCooldown;\n this.emptyCooldown = opts.emptyCooldown;\n this.nsfw = opts.nsfw;\n this.emitAddSongWhenCreatingQueue = opts.emitAddSongWhenCreatingQueue;\n this.emitAddListWhenCreatingQueue = opts.emitAddListWhenCreatingQueue;\n checkInvalidKey(opts, this, \"DisTubeOptions\");\n this._validateOptions();\n }\n\n private _validateOptions(options = this) {\n if (typeof options.emitNewSongOnly !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", options.emitNewSongOnly, \"DisTubeOptions.emitNewSongOnly\");\n }\n if (typeof options.leaveOnEmpty !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", options.leaveOnEmpty, \"DisTubeOptions.leaveOnEmpty\");\n }\n if (typeof options.leaveOnFinish !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", options.leaveOnFinish, \"DisTubeOptions.leaveOnFinish\");\n }\n if (typeof options.leaveOnStop !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", options.leaveOnStop, \"DisTubeOptions.leaveOnStop\");\n }\n if (typeof options.savePreviousSongs !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", options.savePreviousSongs, \"DisTubeOptions.savePreviousSongs\");\n }\n if (typeof options.youtubeDL !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", options.youtubeDL, \"DisTubeOptions.youtubeDL\");\n }\n if (typeof options.updateYouTubeDL !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", options.updateYouTubeDL, \"DisTubeOptions.updateYouTubeDL\");\n }\n if (typeof options.youtubeCookie !== \"undefined\" && typeof options.youtubeCookie !== \"string\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"string\", options.youtubeCookie, \"DisTubeOptions.youtubeCookie\");\n }\n if (typeof options.youtubeIdentityToken !== \"undefined\" && typeof options.youtubeIdentityToken !== \"string\") {\n throw new DisTubeError(\n \"INVALID_TYPE\",\n \"string\",\n options.youtubeIdentityToken,\n \"DisTubeOptions.youtubeIdentityToken\",\n );\n }\n if (typeof options.customFilters !== \"object\" || Array.isArray(options.customFilters)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"object\", options.customFilters, \"DisTubeOptions.customFilters\");\n }\n if (typeof options.ytdlOptions !== \"object\" || Array.isArray(options.ytdlOptions)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"object\", options.ytdlOptions, \"DisTubeOptions.ytdlOptions\");\n }\n if (typeof options.searchCooldown !== \"number\" || isNaN(options.searchCooldown)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"number\", options.searchCooldown, \"DisTubeOptions.searchCooldown\");\n }\n if (typeof options.emptyCooldown !== \"number\" || isNaN(options.emptyCooldown)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"number\", options.emptyCooldown, \"DisTubeOptions.emptyCooldown\");\n }\n if (typeof options.searchSongs !== \"number\" || isNaN(options.searchSongs)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"number\", options.searchSongs, \"DisTubeOptions.searchSongs\");\n }\n if (!Array.isArray(options.plugins)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"Array<Plugin>\", options.plugins, \"DisTubeOptions.plugins\");\n }\n if (typeof options.nsfw !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", options.nsfw, \"DisTubeOptions.nsfw\");\n }\n if (typeof options.emitAddSongWhenCreatingQueue !== \"boolean\") {\n throw new DisTubeError(\n \"INVALID_TYPE\",\n \"boolean\",\n options.emitAddSongWhenCreatingQueue,\n \"DisTubeOptions.emitAddSongWhenCreatingQueue\",\n );\n }\n if (typeof options.emitAddListWhenCreatingQueue !== \"boolean\") {\n throw new DisTubeError(\n \"INVALID_TYPE\",\n \"boolean\",\n options.emitAddListWhenCreatingQueue,\n \"DisTubeOptions.emitAddListWhenCreatingQueue\",\n );\n }\n }\n}\n\nexport default Options;\n"]}
@@ -0,0 +1,52 @@
1
+ import { FFmpeg } from "prism-media";
2
+ import { StreamType } from "@discordjs/voice";
3
+ import type ytdl from "@distube/ytdl-core";
4
+ interface StreamOptions extends ytdl.downloadOptions {
5
+ /**
6
+ * Time to seek in seconds
7
+ */
8
+ seek?: number;
9
+ /**
10
+ * Additional FFmpeg arguments
11
+ */
12
+ ffmpegArgs?: string[];
13
+ /**
14
+ * If the stream url is live
15
+ */
16
+ isLive?: boolean;
17
+ }
18
+ export declare const chooseBestVideoFormat: (formats: ytdl.videoFormat[], isLive?: boolean) => ytdl.videoFormat;
19
+ /**
20
+ * Create a stream to play with {@link DisTubeVoice}
21
+ * @private
22
+ */
23
+ export declare class DisTubeStream {
24
+ /**
25
+ * Create a stream from ytdl video formats
26
+ * @param {ytdl.videoFormat[]} formats ytdl video formats
27
+ * @param {StreamOptions} options options
28
+ * @returns {DisTubeStream}
29
+ * @private
30
+ */
31
+ static YouTube(formats: ytdl.videoFormat[] | undefined, options?: StreamOptions): DisTubeStream;
32
+ /**
33
+ * Create a stream from a stream url
34
+ * @param {string} url stream url
35
+ * @param {StreamOptions} options options
36
+ * @returns {DisTubeStream}
37
+ * @private
38
+ */
39
+ static DirectLink(url: string, options?: StreamOptions): DisTubeStream;
40
+ type: StreamType.Raw;
41
+ stream: FFmpeg;
42
+ url: string;
43
+ /**
44
+ * Create a DisTubeStream to play with {@link DisTubeVoice}
45
+ * @param {string} url Stream URL
46
+ * @param {StreamOptions} options Stream options
47
+ * @private
48
+ */
49
+ constructor(url: string, options: StreamOptions);
50
+ }
51
+ export default DisTubeStream;
52
+ //# sourceMappingURL=DisTubeStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DisTubeStream.d.ts","sourceRoot":"","sources":["../../src/core/DisTubeStream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAE3C,UAAU,aAAc,SAAQ,IAAI,CAAC,eAAe;IAClD;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,qBAAqB,YAAa,KAAK,WAAW,EAAE,uCAOhE,CAAC;AAEF;;;GAGG;AACH,qBAAa,aAAa;IACxB;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,SAAS,EAAE,OAAO,GAAE,aAAkB,GAAG,aAAa;IASnG;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,aAAa;IAS1E,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;OAKG;gBACS,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;CA6ChD;AAED,eAAe,aAAa,CAAC"}