distube 2.8.18 → 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.
Files changed (139) hide show
  1. package/README.md +32 -98
  2. package/dist/DisTube.d.ts +522 -0
  3. package/dist/DisTube.d.ts.map +1 -0
  4. package/dist/DisTube.js +794 -0
  5. package/dist/DisTube.js.map +1 -0
  6. package/dist/constant.d.ts +130 -0
  7. package/dist/constant.d.ts.map +1 -0
  8. package/dist/constant.js +150 -0
  9. package/dist/constant.js.map +1 -0
  10. package/dist/core/DisTubeBase.d.ts +55 -0
  11. package/dist/core/DisTubeBase.d.ts.map +1 -0
  12. package/dist/core/DisTubeBase.js +76 -0
  13. package/dist/core/DisTubeBase.js.map +1 -0
  14. package/dist/core/DisTubeHandler.d.ts +84 -0
  15. package/dist/core/DisTubeHandler.d.ts.map +1 -0
  16. package/dist/core/DisTubeHandler.js +311 -0
  17. package/dist/core/DisTubeHandler.js.map +1 -0
  18. package/dist/core/DisTubeOptions.d.ts +26 -0
  19. package/dist/core/DisTubeOptions.d.ts.map +1 -0
  20. package/dist/core/DisTubeOptions.js +93 -0
  21. package/dist/core/DisTubeOptions.js.map +1 -0
  22. package/dist/core/DisTubeStream.d.ts +52 -0
  23. package/dist/core/DisTubeStream.d.ts.map +1 -0
  24. package/dist/core/DisTubeStream.js +109 -0
  25. package/dist/core/DisTubeStream.js.map +1 -0
  26. package/dist/core/index.d.ts +7 -0
  27. package/dist/core/index.d.ts.map +1 -0
  28. package/dist/core/index.js +19 -0
  29. package/dist/core/index.js.map +1 -0
  30. package/dist/core/manager/BaseManager.d.ts +18 -0
  31. package/dist/core/manager/BaseManager.d.ts.map +1 -0
  32. package/dist/core/manager/BaseManager.js +44 -0
  33. package/dist/core/manager/BaseManager.js.map +1 -0
  34. package/dist/core/manager/QueueManager.d.ts +60 -0
  35. package/dist/core/manager/QueueManager.d.ts.map +1 -0
  36. package/dist/core/manager/QueueManager.js +202 -0
  37. package/dist/core/manager/QueueManager.js.map +1 -0
  38. package/dist/core/manager/index.d.ts +3 -0
  39. package/dist/core/manager/index.d.ts.map +1 -0
  40. package/dist/core/manager/index.js +15 -0
  41. package/dist/core/manager/index.js.map +1 -0
  42. package/dist/core/voice/DJSAdapter.d.ts +4 -0
  43. package/dist/core/voice/DJSAdapter.d.ts.map +1 -0
  44. package/dist/core/voice/DJSAdapter.js +61 -0
  45. package/dist/core/voice/DJSAdapter.js.map +1 -0
  46. package/dist/core/voice/DisTubeVoice.d.ts +83 -0
  47. package/dist/core/voice/DisTubeVoice.d.ts.map +1 -0
  48. package/dist/core/voice/DisTubeVoice.js +236 -0
  49. package/dist/core/voice/DisTubeVoice.js.map +1 -0
  50. package/dist/core/voice/DisTubeVoiceManager.d.ts +41 -0
  51. package/dist/core/voice/DisTubeVoiceManager.d.ts.map +1 -0
  52. package/dist/core/voice/DisTubeVoiceManager.js +67 -0
  53. package/dist/core/voice/DisTubeVoiceManager.js.map +1 -0
  54. package/dist/core/voice/index.d.ts +4 -0
  55. package/dist/core/voice/index.d.ts.map +1 -0
  56. package/dist/core/voice/index.js +16 -0
  57. package/dist/core/voice/index.js.map +1 -0
  58. package/dist/index.d.ts +8 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +23 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/plugin/http.d.ts +8 -0
  63. package/dist/plugin/http.d.ts.map +1 -0
  64. package/dist/plugin/http.js +20 -0
  65. package/dist/plugin/http.js.map +1 -0
  66. package/dist/plugin/https.d.ts +14 -0
  67. package/dist/plugin/https.d.ts.map +1 -0
  68. package/dist/plugin/https.js +50 -0
  69. package/dist/plugin/https.js.map +1 -0
  70. package/dist/plugin/index.d.ts +4 -0
  71. package/dist/plugin/index.d.ts.map +1 -0
  72. package/dist/plugin/index.js +16 -0
  73. package/dist/plugin/index.js.map +1 -0
  74. package/dist/plugin/youtube-dl.d.ts +11 -0
  75. package/dist/plugin/youtube-dl.d.ts.map +1 -0
  76. package/dist/plugin/youtube-dl.js +75 -0
  77. package/dist/plugin/youtube-dl.js.map +1 -0
  78. package/dist/struct/CustomPlugin.d.ts +27 -0
  79. package/dist/struct/CustomPlugin.d.ts.map +1 -0
  80. package/dist/struct/CustomPlugin.js +35 -0
  81. package/dist/struct/CustomPlugin.js.map +1 -0
  82. package/dist/struct/DisTubeError.d.ts +54 -0
  83. package/dist/struct/DisTubeError.d.ts.map +1 -0
  84. package/dist/struct/DisTubeError.js +72 -0
  85. package/dist/struct/DisTubeError.js.map +1 -0
  86. package/dist/struct/ExtractorPlugin.d.ts +29 -0
  87. package/dist/struct/ExtractorPlugin.d.ts.map +1 -0
  88. package/dist/struct/ExtractorPlugin.js +32 -0
  89. package/dist/struct/ExtractorPlugin.js.map +1 -0
  90. package/dist/struct/Playlist.d.ts +42 -0
  91. package/dist/struct/Playlist.d.ts.map +1 -0
  92. package/dist/struct/Playlist.js +104 -0
  93. package/dist/struct/Playlist.js.map +1 -0
  94. package/dist/struct/Plugin.d.ts +82 -0
  95. package/dist/struct/Plugin.d.ts.map +1 -0
  96. package/dist/struct/Plugin.js +108 -0
  97. package/dist/struct/Plugin.js.map +1 -0
  98. package/dist/struct/Queue.d.ts +217 -0
  99. package/dist/struct/Queue.d.ts.map +1 -0
  100. package/dist/struct/Queue.js +480 -0
  101. package/dist/struct/Queue.js.map +1 -0
  102. package/dist/struct/SearchResult.d.ts +28 -0
  103. package/dist/struct/SearchResult.d.ts.map +1 -0
  104. package/dist/struct/SearchResult.js +79 -0
  105. package/dist/struct/SearchResult.js.map +1 -0
  106. package/dist/struct/Song.d.ts +68 -0
  107. package/dist/struct/Song.d.ts.map +1 -0
  108. package/dist/struct/Song.js +229 -0
  109. package/dist/struct/Song.js.map +1 -0
  110. package/dist/struct/TaskQueue.d.ts +33 -0
  111. package/dist/struct/TaskQueue.d.ts.map +1 -0
  112. package/dist/struct/TaskQueue.js +58 -0
  113. package/dist/struct/TaskQueue.js.map +1 -0
  114. package/dist/struct/index.d.ts +10 -0
  115. package/dist/struct/index.d.ts.map +1 -0
  116. package/dist/struct/index.js +22 -0
  117. package/dist/struct/index.js.map +1 -0
  118. package/dist/tsconfig.tsbuildinfo +1 -0
  119. package/dist/type.d.ts +159 -0
  120. package/dist/type.d.ts.map +1 -0
  121. package/dist/type.js +3 -0
  122. package/dist/type.js.map +1 -0
  123. package/dist/util.d.ts +47 -0
  124. package/dist/util.d.ts.map +1 -0
  125. package/dist/util.js +205 -0
  126. package/dist/util.js.map +1 -0
  127. package/package.json +50 -24
  128. package/src/DisTube.js +0 -1121
  129. package/src/Playlist.js +0 -107
  130. package/src/Queue.js +0 -120
  131. package/src/SearchResult.js +0 -81
  132. package/src/Song.js +0 -135
  133. package/src/duration.js +0 -39
  134. package/typings/DisTube.d.ts +0 -635
  135. package/typings/Playlist.d.ts +0 -73
  136. package/typings/Queue.d.ts +0 -106
  137. package/typings/SearchResult.d.ts +0 -59
  138. package/typings/Song.d.ts +0 -104
  139. package/typings/duration.d.ts +0 -2
@@ -0,0 +1,83 @@
1
+ import { TypedEmitter } from "tiny-typed-emitter";
2
+ import type { DisTubeStream, DisTubeVoiceEvents, DisTubeVoiceManager } from "../..";
3
+ import type { AudioPlayer, AudioResource, VoiceConnection } from "@discordjs/voice";
4
+ import type { Snowflake, StageChannel, VoiceChannel, VoiceState } from "discord.js";
5
+ /**
6
+ * Create a voice connection to the voice channel
7
+ */
8
+ export declare class DisTubeVoice extends TypedEmitter<DisTubeVoiceEvents> {
9
+ id: Snowflake;
10
+ voices: DisTubeVoiceManager;
11
+ audioPlayer: AudioPlayer;
12
+ connection: VoiceConnection;
13
+ audioResource?: AudioResource;
14
+ emittedError: boolean;
15
+ isDisconnected: boolean;
16
+ private _channel;
17
+ private _volume;
18
+ constructor(voiceManager: DisTubeVoiceManager, channel: VoiceChannel | StageChannel);
19
+ get channel(): VoiceChannel | StageChannel;
20
+ set channel(channel: VoiceChannel | StageChannel);
21
+ private _join;
22
+ /**
23
+ * Join a voice channel with this connection
24
+ * @param {Discord.VoiceChannel|Discord.StageChannel} [channel] A voice channel
25
+ * @private
26
+ * @returns {Promise<DisTubeVoice>}
27
+ */
28
+ join(channel?: VoiceChannel | StageChannel): Promise<DisTubeVoice>;
29
+ /**
30
+ * Leave the voice channel of this connection
31
+ * @param {Error} [error] Optional, an error to emit with 'error' event.
32
+ */
33
+ leave(error?: Error): void;
34
+ /**
35
+ * Stop the playing stream
36
+ * @private
37
+ */
38
+ stop(): void;
39
+ /**
40
+ * Play a readable stream
41
+ * @private
42
+ * @param {DisTubeStream} stream Readable stream
43
+ */
44
+ play(stream: DisTubeStream): void;
45
+ set volume(volume: number);
46
+ get volume(): number;
47
+ /**
48
+ * Playback duration of the audio resource in seconds
49
+ * @type {number}
50
+ */
51
+ get playbackDuration(): number;
52
+ pause(): void;
53
+ unpause(): void;
54
+ /**
55
+ * Whether the bot is self-deafened
56
+ * @type {boolean}
57
+ */
58
+ get selfDeaf(): boolean;
59
+ /**
60
+ * Whether the bot is self-muted
61
+ * @type {boolean}
62
+ */
63
+ get selfMute(): boolean;
64
+ /**
65
+ * Self-deafens/undeafens the bot.
66
+ * @param {boolean} selfDeaf Whether or not the bot should be self-deafened
67
+ * @returns {boolean} true if the voice state was successfully updated, otherwise false
68
+ */
69
+ setSelfDeaf(selfDeaf: boolean): boolean;
70
+ /**
71
+ * Self-mutes/unmutes the bot.
72
+ * @param {boolean} selfMute Whether or not the bot should be self-muted
73
+ * @returns {boolean} true if the voice state was successfully updated, otherwise false
74
+ */
75
+ setSelfMute(selfMute: boolean): boolean;
76
+ /**
77
+ * The voice state of this connection
78
+ * @type {Discord.VoiceState?}
79
+ */
80
+ get voiceState(): VoiceState | undefined;
81
+ }
82
+ export default DisTubeVoice;
83
+ //# sourceMappingURL=DisTubeVoice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DisTubeVoice.d.ts","sourceRoot":"","sources":["../../../src/core/voice/DisTubeVoice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAWlD,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AACpF,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpF;;GAEG;AACH,qBAAa,YAAa,SAAQ,YAAY,CAAC,kBAAkB,CAAC;IAChE,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,EAAE,mBAAmB,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAG,eAAe,CAAC;IAC7B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,EAAG,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,OAAO,CAAS;gBACZ,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY;IAuDnF,IAAI,OAAO,IAGU,YAAY,GAAG,YAAY,CAD/C;IACD,IAAI,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,EAK/C;IACD,OAAO,CAAC,KAAK;IAOb;;;;;OAKG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAgBxE;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK;IASnB;;;OAGG;IACH,IAAI;IAGJ;;;;OAIG;IACH,IAAI,CAAC,MAAM,EAAE,aAAa;IAe1B,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EASxB;IACD,IAAI,MAAM,IAVS,MAAM,CAYxB;IACD;;;OAGG;IACH,IAAI,gBAAgB,WAEnB;IACD,KAAK;IAGL,OAAO;IAGP;;;OAGG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD;;;OAGG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO;IASvC;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO;IASvC;;;OAGG;IACH,IAAI,UAAU,IAAI,UAAU,GAAG,SAAS,CAEvC;CACF;AAED,eAAe,YAAY,CAAC"}
@@ -0,0 +1,236 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DisTubeVoice = void 0;
4
+ const tiny_typed_emitter_1 = require("tiny-typed-emitter");
5
+ const __1 = require("../..");
6
+ const voice_1 = require("@discordjs/voice");
7
+ /**
8
+ * Create a voice connection to the voice channel
9
+ */
10
+ class DisTubeVoice extends tiny_typed_emitter_1.TypedEmitter {
11
+ constructor(voiceManager, channel) {
12
+ super();
13
+ if (!(0, __1.isSupportedVoiceChannel)(channel))
14
+ throw new __1.DisTubeError("NOT_SUPPORTED_VOICE");
15
+ if (!channel.joinable) {
16
+ if (channel.full)
17
+ throw new __1.DisTubeError("VOICE_FULL");
18
+ else
19
+ throw new __1.DisTubeError("VOICE_MISSING_PERMS");
20
+ }
21
+ this.isDisconnected = false;
22
+ this.id = channel.guild.id;
23
+ this.channel = channel;
24
+ /**
25
+ * The voice manager that instantiated this connection
26
+ * @type {DisTubeVoiceManager}
27
+ */
28
+ this.voices = voiceManager;
29
+ this.voices.add(this.id, this);
30
+ this._volume = 0.5;
31
+ this.audioPlayer = (0, voice_1.createAudioPlayer)()
32
+ .on(voice_1.AudioPlayerStatus.Idle, oldState => {
33
+ if (oldState.status !== voice_1.AudioPlayerStatus.Idle) {
34
+ delete this.audioResource;
35
+ this.emit("finish");
36
+ }
37
+ })
38
+ .on("error", error => {
39
+ if (this.emittedError)
40
+ return;
41
+ this.emittedError = true;
42
+ this.emit("error", error);
43
+ });
44
+ this.connection
45
+ .on(voice_1.VoiceConnectionStatus.Disconnected, (_, newState) => {
46
+ if (newState.reason === voice_1.VoiceConnectionDisconnectReason.WebSocketClose && newState.closeCode === 4014) {
47
+ (0, voice_1.entersState)(this.connection, voice_1.VoiceConnectionStatus.Connecting, 5e3).catch(() => {
48
+ this.leave();
49
+ });
50
+ }
51
+ else if (this.connection.rejoinAttempts < 5) {
52
+ setTimeout(() => {
53
+ this.connection.rejoin();
54
+ }, (this.connection.rejoinAttempts + 1) * 5e3).unref();
55
+ }
56
+ else if (this.connection.state.status !== voice_1.VoiceConnectionStatus.Destroyed) {
57
+ this.leave(new __1.DisTubeError("VOICE_RECONNECT_FAILED"));
58
+ }
59
+ })
60
+ .on(voice_1.VoiceConnectionStatus.Destroyed, () => {
61
+ this.leave();
62
+ })
63
+ // eslint-disable-next-line no-console
64
+ .on("error", console.warn);
65
+ this.connection.subscribe(this.audioPlayer);
66
+ /**
67
+ * Get or set the volume percentage
68
+ * @name DisTubeVoice#volume
69
+ * @type {number}
70
+ */
71
+ }
72
+ get channel() {
73
+ return this._channel;
74
+ }
75
+ set channel(channel) {
76
+ if (!(0, __1.isSupportedVoiceChannel)(channel))
77
+ throw new __1.DisTubeError("NOT_SUPPORTED_VOICE");
78
+ if (channel.guild.id !== this.id)
79
+ throw new __1.DisTubeError("VOICE_CHANGE_GUILD");
80
+ this.connection = this._join(channel);
81
+ this._channel = channel;
82
+ }
83
+ _join(channel) {
84
+ return (0, voice_1.joinVoiceChannel)({
85
+ channelId: channel.id,
86
+ guildId: this.id,
87
+ adapterCreator: channel.guild.voiceAdapterCreator || (0, __1.createDiscordJSAdapter)(channel),
88
+ });
89
+ }
90
+ /**
91
+ * Join a voice channel with this connection
92
+ * @param {Discord.VoiceChannel|Discord.StageChannel} [channel] A voice channel
93
+ * @private
94
+ * @returns {Promise<DisTubeVoice>}
95
+ */
96
+ async join(channel) {
97
+ const TIMEOUT = 30e3;
98
+ if (channel) {
99
+ this.channel = channel;
100
+ }
101
+ try {
102
+ await (0, voice_1.entersState)(this.connection, voice_1.VoiceConnectionStatus.Ready, TIMEOUT);
103
+ }
104
+ catch {
105
+ if (this.connection.state.status !== voice_1.VoiceConnectionStatus.Destroyed) {
106
+ this.connection.destroy();
107
+ }
108
+ this.voices.delete(this.id);
109
+ throw new __1.DisTubeError("VOICE_CONNECT_FAILED", TIMEOUT / 1e3);
110
+ }
111
+ return this;
112
+ }
113
+ /**
114
+ * Leave the voice channel of this connection
115
+ * @param {Error} [error] Optional, an error to emit with 'error' event.
116
+ */
117
+ leave(error) {
118
+ this.stop();
119
+ if (!this.isDisconnected) {
120
+ this.emit("disconnect", error);
121
+ this.isDisconnected = true;
122
+ }
123
+ if (this.connection.state.status !== voice_1.VoiceConnectionStatus.Destroyed)
124
+ this.connection.destroy();
125
+ this.voices.delete(this.id);
126
+ }
127
+ /**
128
+ * Stop the playing stream
129
+ * @private
130
+ */
131
+ stop() {
132
+ this.audioPlayer.stop();
133
+ }
134
+ /**
135
+ * Play a readable stream
136
+ * @private
137
+ * @param {DisTubeStream} stream Readable stream
138
+ */
139
+ play(stream) {
140
+ this.emittedError = false;
141
+ stream.stream.on("error", (error) => {
142
+ if (this.emittedError || error.code === "ERR_STREAM_PREMATURE_CLOSE")
143
+ return;
144
+ this.emittedError = true;
145
+ this.emit("error", error);
146
+ });
147
+ this.audioResource = (0, voice_1.createAudioResource)(stream.stream, {
148
+ inputType: stream.type,
149
+ inlineVolume: true,
150
+ });
151
+ // eslint-disable-next-line no-self-assign
152
+ this.volume = this.volume;
153
+ this.audioPlayer.play(this.audioResource);
154
+ }
155
+ set volume(volume) {
156
+ var _a, _b;
157
+ if (typeof volume !== "number" || isNaN(volume)) {
158
+ throw new __1.DisTubeError("INVALID_TYPE", "number", volume, "volume");
159
+ }
160
+ if (volume < 0) {
161
+ throw new __1.DisTubeError("NUMBER_COMPARE", "Volume", "bigger or equal to", 0);
162
+ }
163
+ this._volume = volume / 100;
164
+ (_b = (_a = this.audioResource) === null || _a === void 0 ? void 0 : _a.volume) === null || _b === void 0 ? void 0 : _b.setVolume(Math.pow(this._volume, 0.5 / Math.log10(2)));
165
+ }
166
+ get volume() {
167
+ return this._volume * 100;
168
+ }
169
+ /**
170
+ * Playback duration of the audio resource in seconds
171
+ * @type {number}
172
+ */
173
+ get playbackDuration() {
174
+ var _a;
175
+ return (((_a = this.audioResource) === null || _a === void 0 ? void 0 : _a.playbackDuration) || 0) / 1000;
176
+ }
177
+ pause() {
178
+ this.audioPlayer.pause();
179
+ }
180
+ unpause() {
181
+ this.audioPlayer.unpause();
182
+ }
183
+ /**
184
+ * Whether the bot is self-deafened
185
+ * @type {boolean}
186
+ */
187
+ get selfDeaf() {
188
+ return this.connection.joinConfig.selfDeaf;
189
+ }
190
+ /**
191
+ * Whether the bot is self-muted
192
+ * @type {boolean}
193
+ */
194
+ get selfMute() {
195
+ return this.connection.joinConfig.selfMute;
196
+ }
197
+ /**
198
+ * Self-deafens/undeafens the bot.
199
+ * @param {boolean} selfDeaf Whether or not the bot should be self-deafened
200
+ * @returns {boolean} true if the voice state was successfully updated, otherwise false
201
+ */
202
+ setSelfDeaf(selfDeaf) {
203
+ if (typeof selfDeaf !== "boolean") {
204
+ throw new __1.DisTubeError("INVALID_TYPE", "boolean", selfDeaf, "selfDeaf");
205
+ }
206
+ return this.connection.rejoin({
207
+ ...this.connection.joinConfig,
208
+ selfDeaf,
209
+ });
210
+ }
211
+ /**
212
+ * Self-mutes/unmutes the bot.
213
+ * @param {boolean} selfMute Whether or not the bot should be self-muted
214
+ * @returns {boolean} true if the voice state was successfully updated, otherwise false
215
+ */
216
+ setSelfMute(selfMute) {
217
+ if (typeof selfMute !== "boolean") {
218
+ throw new __1.DisTubeError("INVALID_TYPE", "boolean", selfMute, "selfMute");
219
+ }
220
+ return this.connection.rejoin({
221
+ ...this.connection.joinConfig,
222
+ selfMute,
223
+ });
224
+ }
225
+ /**
226
+ * The voice state of this connection
227
+ * @type {Discord.VoiceState?}
228
+ */
229
+ get voiceState() {
230
+ var _a, _b, _c;
231
+ return (_c = (_b = (_a = this.channel) === null || _a === void 0 ? void 0 : _a.guild) === null || _b === void 0 ? void 0 : _b.me) === null || _c === void 0 ? void 0 : _c.voice;
232
+ }
233
+ }
234
+ exports.DisTubeVoice = DisTubeVoice;
235
+ exports.default = DisTubeVoice;
236
+ //# sourceMappingURL=DisTubeVoice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DisTubeVoice.js","sourceRoot":"","sources":["../../../src/core/voice/DisTubeVoice.ts"],"names":[],"mappings":"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","sourcesContent":["import { TypedEmitter } from \"tiny-typed-emitter\";\nimport { DisTubeError, createDiscordJSAdapter, isSupportedVoiceChannel } from \"../..\";\nimport {\n AudioPlayerStatus,\n VoiceConnectionDisconnectReason,\n VoiceConnectionStatus,\n createAudioPlayer,\n createAudioResource,\n entersState,\n joinVoiceChannel,\n} from \"@discordjs/voice\";\nimport type { DisTubeStream, DisTubeVoiceEvents, DisTubeVoiceManager } from \"../..\";\nimport type { AudioPlayer, AudioResource, VoiceConnection } from \"@discordjs/voice\";\nimport type { Snowflake, StageChannel, VoiceChannel, VoiceState } from \"discord.js\";\n\n/**\n * Create a voice connection to the voice channel\n */\nexport class DisTubeVoice extends TypedEmitter<DisTubeVoiceEvents> {\n id: Snowflake;\n voices: DisTubeVoiceManager;\n audioPlayer: AudioPlayer;\n connection!: VoiceConnection;\n audioResource?: AudioResource;\n emittedError!: boolean;\n isDisconnected: boolean;\n private _channel!: VoiceChannel | StageChannel;\n private _volume: number;\n constructor(voiceManager: DisTubeVoiceManager, channel: VoiceChannel | StageChannel) {\n super();\n if (!isSupportedVoiceChannel(channel)) throw new DisTubeError(\"NOT_SUPPORTED_VOICE\");\n if (!channel.joinable) {\n if (channel.full) throw new DisTubeError(\"VOICE_FULL\");\n else throw new DisTubeError(\"VOICE_MISSING_PERMS\");\n }\n this.isDisconnected = false;\n this.id = channel.guild.id;\n this.channel = channel;\n /**\n * The voice manager that instantiated this connection\n * @type {DisTubeVoiceManager}\n */\n this.voices = voiceManager;\n this.voices.add(this.id, this);\n this._volume = 0.5;\n this.audioPlayer = createAudioPlayer()\n .on(AudioPlayerStatus.Idle, oldState => {\n if (oldState.status !== AudioPlayerStatus.Idle) {\n delete this.audioResource;\n this.emit(\"finish\");\n }\n })\n .on(\"error\", error => {\n if (this.emittedError) return;\n this.emittedError = true;\n this.emit(\"error\", error);\n });\n this.connection\n .on(VoiceConnectionStatus.Disconnected, (_, newState) => {\n if (newState.reason === VoiceConnectionDisconnectReason.WebSocketClose && newState.closeCode === 4014) {\n entersState(this.connection, VoiceConnectionStatus.Connecting, 5e3).catch(() => {\n this.leave();\n });\n } else if (this.connection.rejoinAttempts < 5) {\n setTimeout(() => {\n this.connection.rejoin();\n }, (this.connection.rejoinAttempts + 1) * 5e3).unref();\n } else if (this.connection.state.status !== VoiceConnectionStatus.Destroyed) {\n this.leave(new DisTubeError(\"VOICE_RECONNECT_FAILED\"));\n }\n })\n .on(VoiceConnectionStatus.Destroyed, () => {\n this.leave();\n })\n // eslint-disable-next-line no-console\n .on(\"error\", console.warn);\n this.connection.subscribe(this.audioPlayer);\n /**\n * Get or set the volume percentage\n * @name DisTubeVoice#volume\n * @type {number}\n */\n }\n get channel() {\n return this._channel;\n }\n set channel(channel: VoiceChannel | StageChannel) {\n if (!isSupportedVoiceChannel(channel)) throw new DisTubeError(\"NOT_SUPPORTED_VOICE\");\n if (channel.guild.id !== this.id) throw new DisTubeError(\"VOICE_CHANGE_GUILD\");\n this.connection = this._join(channel);\n this._channel = channel;\n }\n private _join(channel: VoiceChannel | StageChannel) {\n return joinVoiceChannel({\n channelId: channel.id,\n guildId: this.id,\n adapterCreator: (channel.guild.voiceAdapterCreator as any) || createDiscordJSAdapter(channel as any),\n });\n }\n /**\n * Join a voice channel with this connection\n * @param {Discord.VoiceChannel|Discord.StageChannel} [channel] A voice channel\n * @private\n * @returns {Promise<DisTubeVoice>}\n */\n async join(channel?: VoiceChannel | StageChannel): Promise<DisTubeVoice> {\n const TIMEOUT = 30e3;\n if (channel) {\n this.channel = channel;\n }\n try {\n await entersState(this.connection, VoiceConnectionStatus.Ready, TIMEOUT);\n } catch {\n if (this.connection.state.status !== VoiceConnectionStatus.Destroyed) {\n this.connection.destroy();\n }\n this.voices.delete(this.id);\n throw new DisTubeError(\"VOICE_CONNECT_FAILED\", TIMEOUT / 1e3);\n }\n return this;\n }\n /**\n * Leave the voice channel of this connection\n * @param {Error} [error] Optional, an error to emit with 'error' event.\n */\n leave(error?: Error) {\n this.stop();\n if (!this.isDisconnected) {\n this.emit(\"disconnect\", error);\n this.isDisconnected = true;\n }\n if (this.connection.state.status !== VoiceConnectionStatus.Destroyed) this.connection.destroy();\n this.voices.delete(this.id);\n }\n /**\n * Stop the playing stream\n * @private\n */\n stop() {\n this.audioPlayer.stop();\n }\n /**\n * Play a readable stream\n * @private\n * @param {DisTubeStream} stream Readable stream\n */\n play(stream: DisTubeStream) {\n this.emittedError = false;\n stream.stream.on(\"error\", (error: NodeJS.ErrnoException) => {\n if (this.emittedError || error.code === \"ERR_STREAM_PREMATURE_CLOSE\") return;\n this.emittedError = true;\n this.emit(\"error\", error);\n });\n this.audioResource = createAudioResource(stream.stream, {\n inputType: stream.type,\n inlineVolume: true,\n });\n // eslint-disable-next-line no-self-assign\n this.volume = this.volume;\n this.audioPlayer.play(this.audioResource);\n }\n set volume(volume: number) {\n if (typeof volume !== \"number\" || isNaN(volume)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"number\", volume, \"volume\");\n }\n if (volume < 0) {\n throw new DisTubeError(\"NUMBER_COMPARE\", \"Volume\", \"bigger or equal to\", 0);\n }\n this._volume = volume / 100;\n this.audioResource?.volume?.setVolume(Math.pow(this._volume, 0.5 / Math.log10(2)));\n }\n get volume() {\n return this._volume * 100;\n }\n /**\n * Playback duration of the audio resource in seconds\n * @type {number}\n */\n get playbackDuration() {\n return (this.audioResource?.playbackDuration || 0) / 1000;\n }\n pause() {\n this.audioPlayer.pause();\n }\n unpause() {\n this.audioPlayer.unpause();\n }\n /**\n * Whether the bot is self-deafened\n * @type {boolean}\n */\n get selfDeaf(): boolean {\n return this.connection.joinConfig.selfDeaf;\n }\n /**\n * Whether the bot is self-muted\n * @type {boolean}\n */\n get selfMute(): boolean {\n return this.connection.joinConfig.selfMute;\n }\n /**\n * Self-deafens/undeafens the bot.\n * @param {boolean} selfDeaf Whether or not the bot should be self-deafened\n * @returns {boolean} true if the voice state was successfully updated, otherwise false\n */\n setSelfDeaf(selfDeaf: boolean): boolean {\n if (typeof selfDeaf !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", selfDeaf, \"selfDeaf\");\n }\n return this.connection.rejoin({\n ...this.connection.joinConfig,\n selfDeaf,\n });\n }\n /**\n * Self-mutes/unmutes the bot.\n * @param {boolean} selfMute Whether or not the bot should be self-muted\n * @returns {boolean} true if the voice state was successfully updated, otherwise false\n */\n setSelfMute(selfMute: boolean): boolean {\n if (typeof selfMute !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", selfMute, \"selfMute\");\n }\n return this.connection.rejoin({\n ...this.connection.joinConfig,\n selfMute,\n });\n }\n /**\n * The voice state of this connection\n * @type {Discord.VoiceState?}\n */\n get voiceState(): VoiceState | undefined {\n return this.channel?.guild?.me?.voice;\n }\n}\n\nexport default DisTubeVoice;\n"]}
@@ -0,0 +1,41 @@
1
+ import { DisTubeVoice } from ".";
2
+ import { BaseManager } from "../manager";
3
+ import type { GuildIDResolvable } from "../..";
4
+ import type { StageChannel, VoiceChannel } from "discord.js";
5
+ /**
6
+ * Manages voice connections for {@link DisTube}
7
+ */
8
+ export declare class DisTubeVoiceManager extends BaseManager<DisTubeVoice> {
9
+ /**
10
+ * Get a {@link DisTubeVoice}.
11
+ * @method get
12
+ * @memberof DisTubeVoiceManager#
13
+ * @param {GuildIDResolvable} queue The queue resolvable to resolve
14
+ * @returns {DisTubeVoice?}
15
+ */
16
+ /**
17
+ * Collection of {@link DisTubeVoice}.
18
+ * @name DisTubeVoiceManager#collection
19
+ * @type {Discord.Collection<string, DisTubeVoice>}
20
+ */
21
+ /**
22
+ * Create a {@link DisTubeVoice}
23
+ * @param {Discord.VoiceChannel|Discord.StageChannel} channel A voice channel to join
24
+ * @returns {DisTubeVoice}
25
+ * @private
26
+ */
27
+ create(channel: VoiceChannel | StageChannel): DisTubeVoice;
28
+ /**
29
+ * Join a voice channel
30
+ * @param {Discord.VoiceChannel|Discord.StageChannel} channel A voice channel to join
31
+ * @returns {Promise<DisTubeVoice>}
32
+ */
33
+ join(channel: VoiceChannel | StageChannel): Promise<DisTubeVoice>;
34
+ /**
35
+ * Leave the connected voice channel in a guild
36
+ * @param {GuildIDResolvable} guild Queue Resolvable
37
+ */
38
+ leave(guild: GuildIDResolvable): void;
39
+ }
40
+ export default DisTubeVoiceManager;
41
+ //# sourceMappingURL=DisTubeVoiceManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DisTubeVoiceManager.d.ts","sourceRoot":"","sources":["../../../src/core/voice/DisTubeVoiceManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE7D;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,WAAW,CAAC,YAAY,CAAC;IAChE;;;;;;OAMG;IACH;;;;OAIG;IACH;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,GAAG,YAAY;IAO1D;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAKjE;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,iBAAiB;CAW/B;AAED,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DisTubeVoiceManager = void 0;
4
+ const _1 = require(".");
5
+ const __1 = require("../..");
6
+ const manager_1 = require("../manager");
7
+ const voice_1 = require("@discordjs/voice");
8
+ /**
9
+ * Manages voice connections for {@link DisTube}
10
+ */
11
+ class DisTubeVoiceManager extends manager_1.BaseManager {
12
+ /**
13
+ * Get a {@link DisTubeVoice}.
14
+ * @method get
15
+ * @memberof DisTubeVoiceManager#
16
+ * @param {GuildIDResolvable} queue The queue resolvable to resolve
17
+ * @returns {DisTubeVoice?}
18
+ */
19
+ /**
20
+ * Collection of {@link DisTubeVoice}.
21
+ * @name DisTubeVoiceManager#collection
22
+ * @type {Discord.Collection<string, DisTubeVoice>}
23
+ */
24
+ /**
25
+ * Create a {@link DisTubeVoice}
26
+ * @param {Discord.VoiceChannel|Discord.StageChannel} channel A voice channel to join
27
+ * @returns {DisTubeVoice}
28
+ * @private
29
+ */
30
+ create(channel) {
31
+ const existing = this.get(channel.guild.id);
32
+ if (existing) {
33
+ return existing;
34
+ }
35
+ return new _1.DisTubeVoice(this, channel);
36
+ }
37
+ /**
38
+ * Join a voice channel
39
+ * @param {Discord.VoiceChannel|Discord.StageChannel} channel A voice channel to join
40
+ * @returns {Promise<DisTubeVoice>}
41
+ */
42
+ join(channel) {
43
+ const existing = this.get(channel.guild.id);
44
+ if (existing)
45
+ return existing.join(channel);
46
+ return this.create(channel).join();
47
+ }
48
+ /**
49
+ * Leave the connected voice channel in a guild
50
+ * @param {GuildIDResolvable} guild Queue Resolvable
51
+ */
52
+ leave(guild) {
53
+ const voice = this.get(guild);
54
+ if (voice) {
55
+ voice.leave();
56
+ }
57
+ else {
58
+ const connection = (0, voice_1.getVoiceConnection)((0, __1.resolveGuildID)(guild));
59
+ if (connection && connection.state.status !== voice_1.VoiceConnectionStatus.Destroyed) {
60
+ connection.destroy();
61
+ }
62
+ }
63
+ }
64
+ }
65
+ exports.DisTubeVoiceManager = DisTubeVoiceManager;
66
+ exports.default = DisTubeVoiceManager;
67
+ //# sourceMappingURL=DisTubeVoiceManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DisTubeVoiceManager.js","sourceRoot":"","sources":["../../../src/core/voice/DisTubeVoiceManager.ts"],"names":[],"mappings":";;;AAAA,wBAAiC;AACjC,6BAAuC;AACvC,wCAAyC;AACzC,4CAA6E;AAI7E;;GAEG;AACH,MAAa,mBAAoB,SAAQ,qBAAyB;IAChE;;;;;;OAMG;IACH;;;;OAIG;IACH;;;;;OAKG;IACH,MAAM,CAAC,OAAoC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,QAAQ,EAAE;YACZ,OAAO,QAAQ,CAAC;SACjB;QACD,OAAO,IAAI,eAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IACD;;;;OAIG;IACH,IAAI,CAAC,OAAoC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;IACD;;;OAGG;IACH,KAAK,CAAC,KAAwB;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;SACf;aAAM;YACL,MAAM,UAAU,GAAG,IAAA,0BAAkB,EAAC,IAAA,kBAAc,EAAC,KAAK,CAAC,CAAC,CAAC;YAC7D,IAAI,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,6BAAqB,CAAC,SAAS,EAAE;gBAC7E,UAAU,CAAC,OAAO,EAAE,CAAC;aACtB;SACF;IACH,CAAC;CACF;AAnDD,kDAmDC;AAED,kBAAe,mBAAmB,CAAC","sourcesContent":["import { DisTubeVoice } from \".\";\nimport { resolveGuildID } from \"../..\";\nimport { BaseManager } from \"../manager\";\nimport { VoiceConnectionStatus, getVoiceConnection } from \"@discordjs/voice\";\nimport type { GuildIDResolvable } from \"../..\";\nimport type { StageChannel, VoiceChannel } from \"discord.js\";\n\n/**\n * Manages voice connections for {@link DisTube}\n */\nexport class DisTubeVoiceManager extends BaseManager<DisTubeVoice> {\n /**\n * Get a {@link DisTubeVoice}.\n * @method get\n * @memberof DisTubeVoiceManager#\n * @param {GuildIDResolvable} queue The queue resolvable to resolve\n * @returns {DisTubeVoice?}\n */\n /**\n * Collection of {@link DisTubeVoice}.\n * @name DisTubeVoiceManager#collection\n * @type {Discord.Collection<string, DisTubeVoice>}\n */\n /**\n * Create a {@link DisTubeVoice}\n * @param {Discord.VoiceChannel|Discord.StageChannel} channel A voice channel to join\n * @returns {DisTubeVoice}\n * @private\n */\n create(channel: VoiceChannel | StageChannel): DisTubeVoice {\n const existing = this.get(channel.guild.id);\n if (existing) {\n return existing;\n }\n return new DisTubeVoice(this, channel);\n }\n /**\n * Join a voice channel\n * @param {Discord.VoiceChannel|Discord.StageChannel} channel A voice channel to join\n * @returns {Promise<DisTubeVoice>}\n */\n join(channel: VoiceChannel | StageChannel): Promise<DisTubeVoice> {\n const existing = this.get(channel.guild.id);\n if (existing) return existing.join(channel);\n return this.create(channel).join();\n }\n /**\n * Leave the connected voice channel in a guild\n * @param {GuildIDResolvable} guild Queue Resolvable\n */\n leave(guild: GuildIDResolvable) {\n const voice = this.get(guild);\n if (voice) {\n voice.leave();\n } else {\n const connection = getVoiceConnection(resolveGuildID(guild));\n if (connection && connection.state.status !== VoiceConnectionStatus.Destroyed) {\n connection.destroy();\n }\n }\n }\n}\n\nexport default DisTubeVoiceManager;\n"]}
@@ -0,0 +1,4 @@
1
+ export * from "./DJSAdapter";
2
+ export * from "./DisTubeVoice";
3
+ export * from "./DisTubeVoiceManager";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/voice/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./DJSAdapter"), exports);
14
+ __exportStar(require("./DisTubeVoice"), exports);
15
+ __exportStar(require("./DisTubeVoiceManager"), exports);
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/voice/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAA6B;AAC7B,iDAA+B;AAC/B,wDAAsC","sourcesContent":["export * from \"./DJSAdapter\";\nexport * from \"./DisTubeVoice\";\nexport * from \"./DisTubeVoiceManager\";\n"]}
@@ -0,0 +1,8 @@
1
+ export * from "./type";
2
+ export * from "./constant";
3
+ export * from "./struct";
4
+ export * from "./util";
5
+ export * from "./core";
6
+ export * from "./plugin";
7
+ export { DisTube, DisTube as default } from "./DisTube";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.default = exports.DisTube = void 0;
14
+ __exportStar(require("./type"), exports);
15
+ __exportStar(require("./constant"), exports);
16
+ __exportStar(require("./struct"), exports);
17
+ __exportStar(require("./util"), exports);
18
+ __exportStar(require("./core"), exports);
19
+ __exportStar(require("./plugin"), exports);
20
+ var DisTube_1 = require("./DisTube");
21
+ Object.defineProperty(exports, "DisTube", { enumerable: true, get: function () { return DisTube_1.DisTube; } });
22
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return DisTube_1.DisTube; } });
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,yCAAuB;AACvB,6CAA2B;AAC3B,2CAAyB;AACzB,yCAAuB;AACvB,yCAAuB;AACvB,2CAAyB;AACzB,qCAAwD;AAA/C,kGAAA,OAAO,OAAA;AAAE,kGAAA,OAAO,OAAW","sourcesContent":["export * from \"./type\";\nexport * from \"./constant\";\nexport * from \"./struct\";\nexport * from \"./util\";\nexport * from \"./core\";\nexport * from \"./plugin\";\nexport { DisTube, DisTube as default } from \"./DisTube\";\n"]}
@@ -0,0 +1,8 @@
1
+ import ExtractorPlugin from "../struct/ExtractorPlugin";
2
+ import type { GuildMember } from "discord.js";
3
+ export declare class HTTPPlugin extends ExtractorPlugin {
4
+ validate(url: string): Promise<boolean>;
5
+ resolve(url: string, member: GuildMember): Promise<import("..").Song>;
6
+ }
7
+ export default HTTPPlugin;
8
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/plugin/http.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,MAAM,2BAA2B,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,qBAAa,UAAW,SAAQ,eAAe;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAIpB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;CAG/C;AAED,eAAe,UAAU,CAAC"}
@@ -0,0 +1,20 @@
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.HTTPPlugin = void 0;
7
+ const http_1 = __importDefault(require("http"));
8
+ const ExtractorPlugin_1 = __importDefault(require("../struct/ExtractorPlugin"));
9
+ const __1 = require("..");
10
+ class HTTPPlugin extends ExtractorPlugin_1.default {
11
+ async validate(url) {
12
+ return (0, __1.validateAudioURL)(http_1.default, "http:", url);
13
+ }
14
+ async resolve(url, member) {
15
+ return (0, __1.resolveHttpSong)("http", url, member);
16
+ }
17
+ }
18
+ exports.HTTPPlugin = HTTPPlugin;
19
+ exports.default = HTTPPlugin;
20
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/plugin/http.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,gFAAwD;AACxD,0BAAuD;AAGvD,MAAa,UAAW,SAAQ,yBAAe;IAC7C,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,OAAO,IAAA,oBAAgB,EAAC,cAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,MAAmB;QAC5C,OAAO,IAAA,mBAAe,EAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;CACF;AARD,gCAQC;AAED,kBAAe,UAAU,CAAC","sourcesContent":["import http from \"http\";\nimport ExtractorPlugin from \"../struct/ExtractorPlugin\";\nimport { resolveHttpSong, validateAudioURL } from \"..\";\nimport type { GuildMember } from \"discord.js\";\n\nexport class HTTPPlugin extends ExtractorPlugin {\n async validate(url: string) {\n return validateAudioURL(http, \"http:\", url);\n }\n\n async resolve(url: string, member: GuildMember) {\n return resolveHttpSong(\"http\", url, member);\n }\n}\n\nexport default HTTPPlugin;\n"]}
@@ -0,0 +1,14 @@
1
+ import https from "https";
2
+ import ExtractorPlugin from "../struct/ExtractorPlugin";
3
+ import { Song } from "..";
4
+ import type http from "http";
5
+ import type { GuildMember } from "discord.js";
6
+ export declare const getResponseHeaders: (httpModule: typeof http | typeof https, url: string) => Promise<http.IncomingHttpHeaders>;
7
+ export declare const validateAudioURL: (httpModule: typeof http | typeof https, protocol: string, url: string) => Promise<boolean>;
8
+ export declare const resolveHttpSong: (source: string, url: string, member: GuildMember) => Promise<Song>;
9
+ export declare class HTTPSPlugin extends ExtractorPlugin {
10
+ validate(url: string): Promise<boolean>;
11
+ resolve(url: string, member: GuildMember): Promise<Song>;
12
+ }
13
+ export default HTTPSPlugin;
14
+ //# sourceMappingURL=https.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"https.d.ts","sourceRoot":"","sources":["../../src/plugin/https.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,eAAe,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,kBAAkB,eACjB,WAAW,GAAG,YAAY,OACjC,MAAM,KACV,QAAQ,KAAK,mBAAmB,CAQ/B,CAAC;AAEL,eAAO,MAAM,gBAAgB,eAAsB,WAAW,GAAG,YAAY,YAAY,MAAM,OAAO,MAAM,qBAU3G,CAAC;AAGF,eAAO,MAAM,eAAe,WAAkB,MAAM,OAAO,MAAM,UAAU,WAAW,kBAUrF,CAAC;AAEF,qBAAa,WAAY,SAAQ,eAAe;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAIpB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;CAG/C;AAED,eAAe,WAAW,CAAC"}