discord-player 5.2.3-dev → 6.0.0-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +2 -0
- package/dist/Player.js +327 -323
- package/dist/Structures/ExtractorModel.js +19 -24
- package/dist/Structures/Playlist.js +1 -2
- package/dist/Structures/Queue.js +222 -236
- package/dist/Structures/Track.js +11 -14
- package/dist/VoiceInterface/StreamDispatcher.js +32 -38
- package/dist/VoiceInterface/VoiceUtils.js +21 -29
- package/dist/index.d.ts +9 -7
- package/dist/smoothVolume.js +1 -1
- package/dist/utils/Util.js +34 -1
- package/package.json +23 -28
package/dist/Structures/Track.js
CHANGED
|
@@ -10,7 +10,7 @@ class Track {
|
|
|
10
10
|
*/
|
|
11
11
|
constructor(player, data) {
|
|
12
12
|
this.raw = {};
|
|
13
|
-
this.id = discord_js_1.SnowflakeUtil.generate();
|
|
13
|
+
this.id = discord_js_1.SnowflakeUtil.generate().toString();
|
|
14
14
|
/**
|
|
15
15
|
* The player that instantiated this Track
|
|
16
16
|
* @name Track#player
|
|
@@ -82,17 +82,16 @@ class Track {
|
|
|
82
82
|
void this._patch(data);
|
|
83
83
|
}
|
|
84
84
|
_patch(data) {
|
|
85
|
-
|
|
86
|
-
this.
|
|
87
|
-
this.
|
|
88
|
-
this.
|
|
89
|
-
this.
|
|
90
|
-
this.
|
|
91
|
-
this.views = (_f = data.views) !== null && _f !== void 0 ? _f : 0;
|
|
85
|
+
this.title = (0, discord_js_1.escapeMarkdown)(data.title ?? "");
|
|
86
|
+
this.author = data.author ?? "";
|
|
87
|
+
this.url = data.url ?? "";
|
|
88
|
+
this.thumbnail = data.thumbnail ?? "";
|
|
89
|
+
this.duration = data.duration ?? "";
|
|
90
|
+
this.views = data.views ?? 0;
|
|
92
91
|
this.requestedBy = data.requestedBy;
|
|
93
92
|
this.playlist = data.playlist;
|
|
94
93
|
// raw
|
|
95
|
-
Object.defineProperty(this, "raw", { value: Object.assign({}, { source:
|
|
94
|
+
Object.defineProperty(this, "raw", { value: Object.assign({}, { source: data.raw?.source ?? data.source }, data.raw ?? data), enumerable: false });
|
|
96
95
|
}
|
|
97
96
|
/**
|
|
98
97
|
* The queue in which this track is located
|
|
@@ -123,8 +122,7 @@ class Track {
|
|
|
123
122
|
* @type {TrackSource}
|
|
124
123
|
*/
|
|
125
124
|
get source() {
|
|
126
|
-
|
|
127
|
-
return (_a = this.raw.source) !== null && _a !== void 0 ? _a : "arbitrary";
|
|
125
|
+
return this.raw.source ?? "arbitrary";
|
|
128
126
|
}
|
|
129
127
|
/**
|
|
130
128
|
* String representation of this track
|
|
@@ -138,7 +136,6 @@ class Track {
|
|
|
138
136
|
* @returns {TrackJSON}
|
|
139
137
|
*/
|
|
140
138
|
toJSON(hidePlaylist) {
|
|
141
|
-
var _a, _b, _c;
|
|
142
139
|
return {
|
|
143
140
|
id: this.id,
|
|
144
141
|
title: this.title,
|
|
@@ -149,8 +146,8 @@ class Track {
|
|
|
149
146
|
duration: this.duration,
|
|
150
147
|
durationMS: this.durationMS,
|
|
151
148
|
views: this.views,
|
|
152
|
-
requestedBy:
|
|
153
|
-
playlist: hidePlaylist ? null :
|
|
149
|
+
requestedBy: this.requestedBy?.id,
|
|
150
|
+
playlist: hidePlaylist ? null : this.playlist?.toJSON() ?? null
|
|
154
151
|
};
|
|
155
152
|
}
|
|
156
153
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.StreamDispatcher = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
4
|
const voice_1 = require("@discordjs/voice");
|
|
6
5
|
const tiny_typed_emitter_1 = require("tiny-typed-emitter");
|
|
7
6
|
const Util_1 = require("../utils/Util");
|
|
@@ -38,13 +37,13 @@ class StreamDispatcher extends tiny_typed_emitter_1.TypedEmitter {
|
|
|
38
37
|
*/
|
|
39
38
|
this.paused = false;
|
|
40
39
|
// @ts-expect-error ???
|
|
41
|
-
this.voiceConnection.on("stateChange", (_, newState) =>
|
|
40
|
+
this.voiceConnection.on("stateChange", async (_, newState) => {
|
|
42
41
|
if (newState.status === voice_1.VoiceConnectionStatus.Disconnected) {
|
|
43
42
|
if (newState.reason === voice_1.VoiceConnectionDisconnectReason.WebSocketClose && newState.closeCode === 4014) {
|
|
44
43
|
try {
|
|
45
|
-
|
|
44
|
+
await (0, voice_1.entersState)(this.voiceConnection, voice_1.VoiceConnectionStatus.Connecting, this.connectionTimeout);
|
|
46
45
|
}
|
|
47
|
-
catch
|
|
46
|
+
catch {
|
|
48
47
|
try {
|
|
49
48
|
this.voiceConnection.destroy();
|
|
50
49
|
}
|
|
@@ -54,7 +53,7 @@ class StreamDispatcher extends tiny_typed_emitter_1.TypedEmitter {
|
|
|
54
53
|
}
|
|
55
54
|
}
|
|
56
55
|
else if (this.voiceConnection.rejoinAttempts < 5) {
|
|
57
|
-
|
|
56
|
+
await Util_1.Util.wait((this.voiceConnection.rejoinAttempts + 1) * 5000);
|
|
58
57
|
this.voiceConnection.rejoin();
|
|
59
58
|
}
|
|
60
59
|
else {
|
|
@@ -72,9 +71,9 @@ class StreamDispatcher extends tiny_typed_emitter_1.TypedEmitter {
|
|
|
72
71
|
else if (!this.readyLock && (newState.status === voice_1.VoiceConnectionStatus.Connecting || newState.status === voice_1.VoiceConnectionStatus.Signalling)) {
|
|
73
72
|
this.readyLock = true;
|
|
74
73
|
try {
|
|
75
|
-
|
|
74
|
+
await (0, voice_1.entersState)(this.voiceConnection, voice_1.VoiceConnectionStatus.Ready, this.connectionTimeout);
|
|
76
75
|
}
|
|
77
|
-
catch
|
|
76
|
+
catch {
|
|
78
77
|
if (this.voiceConnection.state.status !== voice_1.VoiceConnectionStatus.Destroyed) {
|
|
79
78
|
try {
|
|
80
79
|
this.voiceConnection.destroy();
|
|
@@ -88,7 +87,7 @@ class StreamDispatcher extends tiny_typed_emitter_1.TypedEmitter {
|
|
|
88
87
|
this.readyLock = false;
|
|
89
88
|
}
|
|
90
89
|
}
|
|
91
|
-
})
|
|
90
|
+
});
|
|
92
91
|
// @ts-expect-error ???
|
|
93
92
|
this.audioPlayer.on("stateChange", (oldState, newState) => {
|
|
94
93
|
if (newState.status === voice_1.AudioPlayerStatus.Playing) {
|
|
@@ -114,12 +113,11 @@ class StreamDispatcher extends tiny_typed_emitter_1.TypedEmitter {
|
|
|
114
113
|
*/
|
|
115
114
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
116
115
|
createStream(src, ops) {
|
|
117
|
-
var _a;
|
|
118
116
|
this.audioResource = (0, voice_1.createAudioResource)(src, {
|
|
119
|
-
inputType:
|
|
120
|
-
metadata: ops
|
|
117
|
+
inputType: ops?.type ?? voice_1.StreamType.Arbitrary,
|
|
118
|
+
metadata: ops?.data,
|
|
121
119
|
// eslint-disable-next-line no-extra-boolean-cast
|
|
122
|
-
inlineVolume: !Boolean(ops
|
|
120
|
+
inlineVolume: !Boolean(ops?.disableVolume)
|
|
123
121
|
});
|
|
124
122
|
return this.audioResource;
|
|
125
123
|
}
|
|
@@ -139,7 +137,7 @@ class StreamDispatcher extends tiny_typed_emitter_1.TypedEmitter {
|
|
|
139
137
|
this.audioPlayer.stop(true);
|
|
140
138
|
this.voiceConnection.destroy();
|
|
141
139
|
}
|
|
142
|
-
catch
|
|
140
|
+
catch { } // eslint-disable-line no-empty
|
|
143
141
|
}
|
|
144
142
|
/**
|
|
145
143
|
* Stops the player
|
|
@@ -172,30 +170,28 @@ class StreamDispatcher extends tiny_typed_emitter_1.TypedEmitter {
|
|
|
172
170
|
* @param {AudioResource<Track>} [resource=this.audioResource] The audio resource to play
|
|
173
171
|
* @returns {Promise<StreamDispatcher>}
|
|
174
172
|
*/
|
|
175
|
-
playStream(resource = this.audioResource) {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
if (this.voiceConnection.state.status !== voice_1.VoiceConnectionStatus.Ready) {
|
|
184
|
-
try {
|
|
185
|
-
yield (0, voice_1.entersState)(this.voiceConnection, voice_1.VoiceConnectionStatus.Ready, this.connectionTimeout);
|
|
186
|
-
}
|
|
187
|
-
catch (err) {
|
|
188
|
-
return void this.emit("error", err);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
173
|
+
async playStream(resource = this.audioResource) {
|
|
174
|
+
if (!resource)
|
|
175
|
+
throw new PlayerError_1.PlayerError("Audio resource is not available!", PlayerError_1.ErrorStatusCode.NO_AUDIO_RESOURCE);
|
|
176
|
+
if (resource.ended)
|
|
177
|
+
return void this.emit("error", new PlayerError_1.PlayerError("Cannot play a resource that has already ended."));
|
|
178
|
+
if (!this.audioResource)
|
|
179
|
+
this.audioResource = resource;
|
|
180
|
+
if (this.voiceConnection.state.status !== voice_1.VoiceConnectionStatus.Ready) {
|
|
191
181
|
try {
|
|
192
|
-
this.
|
|
182
|
+
await (0, voice_1.entersState)(this.voiceConnection, voice_1.VoiceConnectionStatus.Ready, this.connectionTimeout);
|
|
193
183
|
}
|
|
194
|
-
catch (
|
|
195
|
-
this.emit("error",
|
|
184
|
+
catch (err) {
|
|
185
|
+
return void this.emit("error", err);
|
|
196
186
|
}
|
|
197
|
-
|
|
198
|
-
|
|
187
|
+
}
|
|
188
|
+
try {
|
|
189
|
+
this.audioPlayer.play(resource);
|
|
190
|
+
}
|
|
191
|
+
catch (e) {
|
|
192
|
+
this.emit("error", e);
|
|
193
|
+
}
|
|
194
|
+
return this;
|
|
199
195
|
}
|
|
200
196
|
/**
|
|
201
197
|
* Sets playback volume
|
|
@@ -203,8 +199,7 @@ class StreamDispatcher extends tiny_typed_emitter_1.TypedEmitter {
|
|
|
203
199
|
* @returns {boolean}
|
|
204
200
|
*/
|
|
205
201
|
setVolume(value) {
|
|
206
|
-
|
|
207
|
-
if (!((_a = this.audioResource) === null || _a === void 0 ? void 0 : _a.volume) || isNaN(value) || value < 0 || value > Infinity)
|
|
202
|
+
if (!this.audioResource?.volume || isNaN(value) || value < 0 || value > Infinity)
|
|
208
203
|
return false;
|
|
209
204
|
this.audioResource.volume.setVolumeLogarithmic(value / 100);
|
|
210
205
|
return true;
|
|
@@ -214,8 +209,7 @@ class StreamDispatcher extends tiny_typed_emitter_1.TypedEmitter {
|
|
|
214
209
|
* @type {number}
|
|
215
210
|
*/
|
|
216
211
|
get volume() {
|
|
217
|
-
|
|
218
|
-
if (!((_a = this.audioResource) === null || _a === void 0 ? void 0 : _a.volume))
|
|
212
|
+
if (!this.audioResource?.volume)
|
|
219
213
|
return 100;
|
|
220
214
|
const currentVol = this.audioResource.volume.volume;
|
|
221
215
|
return Math.round(Math.pow(currentVol, 1 / 1.660964) * 100);
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.VoiceUtils = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
4
|
const discord_js_1 = require("discord.js");
|
|
6
5
|
const voice_1 = require("@discordjs/voice");
|
|
7
6
|
const StreamDispatcher_1 = require("./StreamDispatcher");
|
|
@@ -23,13 +22,11 @@ class VoiceUtils {
|
|
|
23
22
|
* @param {object} [options={}] Join options
|
|
24
23
|
* @returns {Promise<StreamDispatcher>}
|
|
25
24
|
*/
|
|
26
|
-
connect(channel, options) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return sub;
|
|
32
|
-
});
|
|
25
|
+
async connect(channel, options) {
|
|
26
|
+
const conn = await this.join(channel, options);
|
|
27
|
+
const sub = new StreamDispatcher_1.StreamDispatcher(conn, channel, options.maxTime);
|
|
28
|
+
this.cache.set(channel.guild.id, sub);
|
|
29
|
+
return sub;
|
|
33
30
|
}
|
|
34
31
|
/**
|
|
35
32
|
* Joins a voice channel
|
|
@@ -37,29 +34,24 @@ class VoiceUtils {
|
|
|
37
34
|
* @param {object} [options={}] Join options
|
|
38
35
|
* @returns {VoiceConnection}
|
|
39
36
|
*/
|
|
40
|
-
join(channel, options) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
selfDeaf: Boolean(options.deaf)
|
|
47
|
-
});
|
|
48
|
-
return conn;
|
|
37
|
+
async join(channel, options) {
|
|
38
|
+
const conn = (0, voice_1.joinVoiceChannel)({
|
|
39
|
+
guildId: channel.guild.id,
|
|
40
|
+
channelId: channel.id,
|
|
41
|
+
adapterCreator: channel.guild.voiceAdapterCreator,
|
|
42
|
+
selfDeaf: Boolean(options.deaf)
|
|
49
43
|
});
|
|
44
|
+
return conn;
|
|
50
45
|
}
|
|
51
|
-
enterReady(conn, options = {}) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
throw err;
|
|
61
|
-
}
|
|
62
|
-
});
|
|
46
|
+
async enterReady(conn, options = {}) {
|
|
47
|
+
try {
|
|
48
|
+
conn = await (0, voice_1.entersState)(conn, voice_1.VoiceConnectionStatus.Ready, options?.maxTime ?? 20000);
|
|
49
|
+
return conn;
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
conn.destroy();
|
|
53
|
+
throw err;
|
|
54
|
+
}
|
|
63
55
|
}
|
|
64
56
|
/**
|
|
65
57
|
* Disconnects voice connection
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { User,
|
|
2
|
+
import { User, VoiceChannel, StageChannel, Collection, Snowflake, Client, GuildResolvable, Guild, GuildChannelResolvable, UserResolvable } from 'discord.js';
|
|
3
3
|
import { Readable, Duplex } from 'stream';
|
|
4
4
|
import { TypedEmitter } from 'tiny-typed-emitter';
|
|
5
5
|
import { AudioPlayerError, AudioResource, VoiceConnection, AudioPlayer, StreamType, AudioPlayerStatus } from '@discordjs/voice';
|
|
6
6
|
import { downloadOptions } from 'ytdl-core';
|
|
7
|
+
import * as undici from 'undici';
|
|
7
8
|
|
|
8
9
|
declare class Playlist {
|
|
9
10
|
readonly player: Player;
|
|
@@ -47,7 +48,7 @@ declare class Track {
|
|
|
47
48
|
requestedBy: User;
|
|
48
49
|
playlist?: Playlist;
|
|
49
50
|
readonly raw: RawTrackData;
|
|
50
|
-
readonly id:
|
|
51
|
+
readonly id: string;
|
|
51
52
|
/**
|
|
52
53
|
* Track constructor
|
|
53
54
|
* @param {Player} player The player that instantiated this Track
|
|
@@ -330,7 +331,7 @@ declare class Queue<T = unknown> {
|
|
|
330
331
|
playing: boolean;
|
|
331
332
|
metadata?: T;
|
|
332
333
|
repeatMode: QueueRepeatMode;
|
|
333
|
-
readonly id:
|
|
334
|
+
readonly id: string;
|
|
334
335
|
private _streamTime;
|
|
335
336
|
_cooldownsTimeout: Collection<string, NodeJS.Timeout>;
|
|
336
337
|
private _activeFilters;
|
|
@@ -465,16 +466,16 @@ declare class Queue<T = unknown> {
|
|
|
465
466
|
shuffle(): boolean;
|
|
466
467
|
/**
|
|
467
468
|
* Removes a track from the queue
|
|
468
|
-
* @param {Track|
|
|
469
|
+
* @param {Track|string|number} track The track to remove
|
|
469
470
|
* @returns {Track}
|
|
470
471
|
*/
|
|
471
|
-
remove(track: Track |
|
|
472
|
+
remove(track: Track | string | number): Track;
|
|
472
473
|
/**
|
|
473
474
|
* Returns the index of the specified track. If found, returns the track index else returns -1.
|
|
474
|
-
* @param {number|Track|
|
|
475
|
+
* @param {number|Track|string} track The track
|
|
475
476
|
* @returns {number}
|
|
476
477
|
*/
|
|
477
|
-
getTrackPosition(track: number | Track |
|
|
478
|
+
getTrackPosition(track: number | Track | string): number;
|
|
478
479
|
/**
|
|
479
480
|
* Jumps to particular track
|
|
480
481
|
* @param {Track|number} track The track
|
|
@@ -1184,6 +1185,7 @@ declare class Util {
|
|
|
1184
1185
|
*/
|
|
1185
1186
|
static wait(time: number): Promise<unknown>;
|
|
1186
1187
|
static noop(): void;
|
|
1188
|
+
static getFetch(): Promise<typeof fetch | typeof undici.default>;
|
|
1187
1189
|
}
|
|
1188
1190
|
|
|
1189
1191
|
declare const version: string;
|
package/dist/smoothVolume.js
CHANGED
package/dist/utils/Util.js
CHANGED
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
26
|
exports.Util = void 0;
|
|
4
27
|
class Util {
|
|
@@ -73,7 +96,7 @@ class Util {
|
|
|
73
96
|
try {
|
|
74
97
|
return require(id);
|
|
75
98
|
}
|
|
76
|
-
catch
|
|
99
|
+
catch {
|
|
77
100
|
return null;
|
|
78
101
|
}
|
|
79
102
|
}
|
|
@@ -86,5 +109,15 @@ class Util {
|
|
|
86
109
|
return new Promise((r) => setTimeout(r, time).unref());
|
|
87
110
|
}
|
|
88
111
|
static noop() { } // eslint-disable-line @typescript-eslint/no-empty-function
|
|
112
|
+
static async getFetch() {
|
|
113
|
+
if ("fetch" in globalThis)
|
|
114
|
+
return globalThis.fetch;
|
|
115
|
+
try {
|
|
116
|
+
return await Promise.resolve().then(() => __importStar(require("undici"))).then((res) => res.default);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// uh?
|
|
120
|
+
}
|
|
121
|
+
}
|
|
89
122
|
}
|
|
90
123
|
exports.Util = Util;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "discord-player",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0-dev.0",
|
|
4
4
|
"description": "Complete framework to facilitate music commands using discord.js",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
"build:check": "tsc --noEmit --incremental false",
|
|
24
24
|
"prepublishOnly": "rollup-type-bundler -e stream",
|
|
25
25
|
"build:esm": "gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
|
|
26
|
-
"format": "prettier --write \"src/**/*.ts\"
|
|
27
|
-
"docs": "
|
|
28
|
-
"
|
|
26
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
27
|
+
"docs": "typedoc --json docs/typedoc.json src/index.ts",
|
|
28
|
+
"postdocs": "node scripts/docgen.js",
|
|
29
29
|
"lint": "eslint src --ext .ts",
|
|
30
30
|
"prepare": "husky install",
|
|
31
31
|
"lint:fix": "eslint src --ext .ts --fix"
|
|
@@ -65,37 +65,32 @@
|
|
|
65
65
|
},
|
|
66
66
|
"homepage": "https://discord-player.js.org",
|
|
67
67
|
"dependencies": {
|
|
68
|
-
"@discordjs/voice": "^0.
|
|
68
|
+
"@discordjs/voice": "^0.10.0",
|
|
69
69
|
"discord-ytdl-core": "^5.0.4",
|
|
70
70
|
"libsodium-wrappers": "^0.7.10",
|
|
71
71
|
"soundcloud-scraper": "^5.0.2",
|
|
72
|
-
"spotify-url-info": "^3.
|
|
73
|
-
"
|
|
74
|
-
"youtube-sr": "^4.1.
|
|
72
|
+
"spotify-url-info": "^3.1.2",
|
|
73
|
+
"tslib": "^2.4.0",
|
|
74
|
+
"youtube-sr": "^4.1.17",
|
|
75
75
|
"ytdl-core": "^4.11.0"
|
|
76
76
|
},
|
|
77
77
|
"devDependencies": {
|
|
78
|
-
"@
|
|
79
|
-
"@
|
|
80
|
-
"@
|
|
81
|
-
"@
|
|
82
|
-
"@
|
|
83
|
-
"@
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"@types/ws": "^8.2.0",
|
|
88
|
-
"@typescript-eslint/eslint-plugin": "^5.4.0",
|
|
89
|
-
"@typescript-eslint/parser": "^5.4.0",
|
|
90
|
-
"discord-api-types": "^0.24.0",
|
|
91
|
-
"discord.js": "^13.6.0",
|
|
92
|
-
"eslint": "^8.3.0",
|
|
78
|
+
"@discordjs/ts-docgen": "^0.4.1",
|
|
79
|
+
"@favware/rollup-type-bundler": "^1.0.7",
|
|
80
|
+
"@types/node": "^17.0.43",
|
|
81
|
+
"@types/ws": "^8.5.3",
|
|
82
|
+
"@typescript-eslint/eslint-plugin": "^5.28.0",
|
|
83
|
+
"@typescript-eslint/parser": "^5.28.0",
|
|
84
|
+
"discord-api-types": "^0.34.0",
|
|
85
|
+
"discord.js": "^14.0.0-dev.1655165434-b4e28a8",
|
|
86
|
+
"eslint": "^8.17.0",
|
|
93
87
|
"gen-esm-wrapper": "^1.1.3",
|
|
94
|
-
"husky": "^
|
|
95
|
-
"
|
|
96
|
-
"prettier": "^2.
|
|
88
|
+
"husky": "^8.0.1",
|
|
89
|
+
"opusscript": "^0.0.8",
|
|
90
|
+
"prettier": "^2.7.0",
|
|
97
91
|
"rimraf": "^3.0.2",
|
|
98
|
-
"ts-node": "^10.
|
|
99
|
-
"
|
|
92
|
+
"ts-node": "^10.8.1",
|
|
93
|
+
"typedoc": "^0.22.17",
|
|
94
|
+
"typescript": "^4.7.3"
|
|
100
95
|
}
|
|
101
96
|
}
|