distube 4.0.0-dev.1 → 4.0.0-dev.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.
- package/dist/DisTube.d.ts +13 -480
- package/dist/DisTube.d.ts.map +1 -1
- package/dist/DisTube.js +30 -544
- package/dist/DisTube.js.map +1 -1
- package/dist/constant.d.ts +0 -97
- package/dist/constant.d.ts.map +1 -1
- package/dist/constant.js +0 -97
- package/dist/constant.js.map +1 -1
- package/dist/core/DisTubeBase.d.ts +0 -40
- package/dist/core/DisTubeBase.d.ts.map +1 -1
- package/dist/core/DisTubeBase.js +0 -44
- package/dist/core/DisTubeBase.js.map +1 -1
- package/dist/core/DisTubeHandler.d.ts +2 -68
- package/dist/core/DisTubeHandler.d.ts.map +1 -1
- package/dist/core/DisTubeHandler.js +6 -68
- package/dist/core/DisTubeHandler.js.map +1 -1
- package/dist/core/DisTubeStream.d.ts +0 -33
- package/dist/core/DisTubeStream.d.ts.map +1 -1
- package/dist/core/DisTubeStream.js +0 -36
- package/dist/core/DisTubeStream.js.map +1 -1
- package/dist/core/manager/BaseManager.d.ts +1 -16
- package/dist/core/manager/BaseManager.d.ts.map +1 -1
- package/dist/core/manager/BaseManager.js +2 -28
- package/dist/core/manager/BaseManager.js.map +1 -1
- package/dist/core/manager/FilterManager.d.ts +16 -0
- package/dist/core/manager/FilterManager.d.ts.map +1 -0
- package/dist/core/manager/FilterManager.js +88 -0
- package/dist/core/manager/FilterManager.js.map +1 -0
- package/dist/core/manager/GuildIdManager.d.ts +9 -0
- package/dist/core/manager/GuildIdManager.d.ts.map +1 -0
- package/dist/core/manager/GuildIdManager.js +25 -0
- package/dist/core/manager/GuildIdManager.js.map +1 -0
- package/dist/core/manager/QueueManager.d.ts +4 -26
- package/dist/core/manager/QueueManager.d.ts.map +1 -1
- package/dist/core/manager/QueueManager.js +27 -48
- package/dist/core/manager/QueueManager.js.map +1 -1
- package/dist/core/manager/index.d.ts +2 -0
- package/dist/core/manager/index.d.ts.map +1 -1
- package/dist/core/manager/index.js +2 -0
- package/dist/core/manager/index.js.map +1 -1
- package/dist/core/voice/DisTubeVoice.d.ts +0 -50
- package/dist/core/voice/DisTubeVoice.d.ts.map +1 -1
- package/dist/core/voice/DisTubeVoice.js +8 -68
- package/dist/core/voice/DisTubeVoice.js.map +1 -1
- package/dist/core/voice/DisTubeVoiceManager.d.ts +2 -33
- package/dist/core/voice/DisTubeVoiceManager.d.ts.map +1 -1
- package/dist/core/voice/DisTubeVoiceManager.js +1 -32
- package/dist/core/voice/DisTubeVoiceManager.js.map +1 -1
- package/dist/struct/CustomPlugin.d.ts +0 -41
- package/dist/struct/CustomPlugin.d.ts.map +1 -1
- package/dist/struct/CustomPlugin.js +0 -34
- package/dist/struct/CustomPlugin.js.map +1 -1
- package/dist/struct/ExtractorPlugin.d.ts +0 -32
- package/dist/struct/ExtractorPlugin.d.ts.map +1 -1
- package/dist/struct/ExtractorPlugin.js +0 -23
- package/dist/struct/ExtractorPlugin.js.map +1 -1
- package/dist/struct/Playlist.d.ts +0 -29
- package/dist/struct/Playlist.d.ts.map +1 -1
- package/dist/struct/Playlist.js +0 -54
- package/dist/struct/Playlist.js.map +1 -1
- package/dist/struct/Plugin.d.ts +0 -58
- package/dist/struct/Plugin.d.ts.map +1 -1
- package/dist/struct/Plugin.js +0 -62
- package/dist/struct/Plugin.js.map +1 -1
- package/dist/struct/Queue.d.ts +10 -177
- package/dist/struct/Queue.d.ts.map +1 -1
- package/dist/struct/Queue.js +49 -256
- package/dist/struct/Queue.js.map +1 -1
- package/dist/struct/SearchResult.d.ts +0 -8
- package/dist/struct/SearchResult.d.ts.map +1 -1
- package/dist/struct/SearchResult.js +0 -47
- package/dist/struct/SearchResult.js.map +1 -1
- package/dist/struct/Song.d.ts +0 -35
- package/dist/struct/Song.d.ts.map +1 -1
- package/dist/struct/Song.js +0 -121
- package/dist/struct/Song.js.map +1 -1
- package/dist/struct/TaskQueue.d.ts +0 -20
- package/dist/struct/TaskQueue.d.ts.map +1 -1
- package/dist/struct/TaskQueue.js +0 -25
- package/dist/struct/TaskQueue.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/type.d.ts +6 -71
- package/dist/type.d.ts.map +1 -1
- package/dist/type.js.map +1 -1
- package/dist/util.d.ts +0 -29
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +2 -38
- package/dist/util.js.map +1 -1
- package/package.json +13 -4
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
+
};
|
|
7
|
+
var _FilterManager_instances, _FilterManager_validate, _FilterManager_resolveName, _FilterManager_resolveValue, _FilterManager_apply;
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.FilterManager = void 0;
|
|
10
|
+
const _1 = require(".");
|
|
11
|
+
const __1 = require("../..");
|
|
12
|
+
class FilterManager extends _1.BaseManager {
|
|
13
|
+
constructor(distube, queue) {
|
|
14
|
+
super(distube);
|
|
15
|
+
_FilterManager_instances.add(this);
|
|
16
|
+
this.queue = queue;
|
|
17
|
+
}
|
|
18
|
+
add(filterOrFilters, override = false) {
|
|
19
|
+
if (Array.isArray(filterOrFilters)) {
|
|
20
|
+
const resolvedFilters = filterOrFilters.map(f => __classPrivateFieldGet(this, _FilterManager_instances, "m", _FilterManager_validate).call(this, f));
|
|
21
|
+
const newFilters = resolvedFilters
|
|
22
|
+
.reduceRight((unique, o) => {
|
|
23
|
+
if (!unique.some((obj) => obj === o && obj.name === o) &&
|
|
24
|
+
!unique.some((obj) => obj !== o.name && obj.name !== o.name)) {
|
|
25
|
+
if (!this.has(o))
|
|
26
|
+
unique.push(o);
|
|
27
|
+
if (this.has(o) && override) {
|
|
28
|
+
this.remove(o);
|
|
29
|
+
unique.push(o);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return unique;
|
|
33
|
+
}, [])
|
|
34
|
+
.reverse();
|
|
35
|
+
return this.set([...this.collection.values(), ...newFilters]);
|
|
36
|
+
}
|
|
37
|
+
return this.set([...this.collection.values(), filterOrFilters]);
|
|
38
|
+
}
|
|
39
|
+
clear() {
|
|
40
|
+
return this.set([]);
|
|
41
|
+
}
|
|
42
|
+
set(filters) {
|
|
43
|
+
this.collection.clear();
|
|
44
|
+
for (const filter of filters) {
|
|
45
|
+
const resolved = __classPrivateFieldGet(this, _FilterManager_instances, "m", _FilterManager_validate).call(this, filter);
|
|
46
|
+
this.collection.set(__classPrivateFieldGet(this, _FilterManager_instances, "m", _FilterManager_resolveName).call(this, resolved), resolved);
|
|
47
|
+
}
|
|
48
|
+
__classPrivateFieldGet(this, _FilterManager_instances, "m", _FilterManager_apply).call(this);
|
|
49
|
+
return this;
|
|
50
|
+
}
|
|
51
|
+
remove(filterOrFilters) {
|
|
52
|
+
const remove = (f) => this.collection.delete(__classPrivateFieldGet(this, _FilterManager_instances, "m", _FilterManager_resolveName).call(this, __classPrivateFieldGet(this, _FilterManager_instances, "m", _FilterManager_validate).call(this, f)));
|
|
53
|
+
if (Array.isArray(filterOrFilters))
|
|
54
|
+
filterOrFilters.map(remove);
|
|
55
|
+
else
|
|
56
|
+
remove(filterOrFilters);
|
|
57
|
+
__classPrivateFieldGet(this, _FilterManager_instances, "m", _FilterManager_apply).call(this);
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
has(filter) {
|
|
61
|
+
return this.collection.has(__classPrivateFieldGet(this, _FilterManager_instances, "m", _FilterManager_resolveName).call(this, filter));
|
|
62
|
+
}
|
|
63
|
+
get names() {
|
|
64
|
+
return this.collection.map(f => __classPrivateFieldGet(this, _FilterManager_instances, "m", _FilterManager_resolveName).call(this, f));
|
|
65
|
+
}
|
|
66
|
+
get values() {
|
|
67
|
+
return this.collection.map(f => __classPrivateFieldGet(this, _FilterManager_instances, "m", _FilterManager_resolveValue).call(this, f));
|
|
68
|
+
}
|
|
69
|
+
toString() {
|
|
70
|
+
return this.names.toString();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.FilterManager = FilterManager;
|
|
74
|
+
_FilterManager_instances = new WeakSet(), _FilterManager_validate = function _FilterManager_validate(filter) {
|
|
75
|
+
if ((typeof filter === "string" && Object.prototype.hasOwnProperty.call(this.distube.filters, filter)) ||
|
|
76
|
+
(typeof filter === "object" && typeof filter.name === "string" && typeof filter.value === "string")) {
|
|
77
|
+
return filter;
|
|
78
|
+
}
|
|
79
|
+
throw new __1.DisTubeError("INVALID_TYPE", "FilterResolvable", filter, "filter");
|
|
80
|
+
}, _FilterManager_resolveName = function _FilterManager_resolveName(filter) {
|
|
81
|
+
return typeof filter === "string" ? filter : filter.name;
|
|
82
|
+
}, _FilterManager_resolveValue = function _FilterManager_resolveValue(filter) {
|
|
83
|
+
return typeof filter === "string" ? this.distube.filters[filter] : filter.value;
|
|
84
|
+
}, _FilterManager_apply = function _FilterManager_apply() {
|
|
85
|
+
this.queue.beginTime = this.queue.currentTime;
|
|
86
|
+
this.queues.playSong(this.queue);
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=FilterManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterManager.js","sourceRoot":"","sources":["../../../src/core/manager/FilterManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseManager } from \".\";\nimport { DisTubeError } from \"../..\";\nimport type { DisTube, FilterResolvable, Queue } from \"../..\";\n\n/**\n * Manage filters of a playing {@link Queue}\n * @extends {BaseManager}\n */\nexport class FilterManager extends BaseManager<FilterResolvable> {\n queue: Queue;\n constructor(distube: DisTube, queue: Queue) {\n super(distube);\n this.queue = queue;\n }\n\n #validate(filter: FilterResolvable): FilterResolvable {\n if (\n (typeof filter === \"string\" && Object.prototype.hasOwnProperty.call(this.distube.filters, filter)) ||\n (typeof filter === \"object\" && typeof filter.name === \"string\" && typeof filter.value === \"string\")\n ) {\n return filter;\n }\n\n throw new DisTubeError(\"INVALID_TYPE\", \"FilterResolvable\", filter, \"filter\");\n }\n\n #resolveName(filter: FilterResolvable): string {\n return typeof filter === \"string\" ? filter : filter.name;\n }\n\n #resolveValue(filter: FilterResolvable): string {\n return typeof filter === \"string\" ? this.distube.filters[filter] : filter.value;\n }\n\n #apply() {\n this.queue.beginTime = this.queue.currentTime;\n this.queues.playSong(this.queue);\n }\n\n /**\n * Enable a filter or multiple filters to the manager\n * @param {FilterResolvable|FilterResolvable[]} filterOrFilters The filter or filters to enable\n * @param {boolean} [override=false] Wether or not override the applied filter with new filter value\n * @returns {FilterManager}\n */\n add(filterOrFilters: FilterResolvable | FilterResolvable[], override = false) {\n if (Array.isArray(filterOrFilters)) {\n const resolvedFilters = filterOrFilters.map(f => this.#validate(f));\n const newFilters = resolvedFilters\n .reduceRight((unique, o: any) => {\n if (\n !unique.some((obj: any) => obj === o && obj.name === o) &&\n !unique.some((obj: any) => obj !== o.name && obj.name !== o.name)\n ) {\n if (!this.has(o)) unique.push(o);\n if (this.has(o) && override) {\n this.remove(o);\n unique.push(o);\n }\n }\n return unique;\n }, [] as FilterResolvable[])\n .reverse();\n return this.set([...this.collection.values(), ...newFilters]);\n }\n return this.set([...this.collection.values(), filterOrFilters]);\n }\n\n /**\n * Clear enabled filters of the manager\n * @returns {FilterManager}\n */\n clear() {\n return this.set([]);\n }\n\n /**\n * Set the filters applied to the manager\n * @param {FilterResolvable[]} filters The filters to apply\n * @returns {FilterManager}\n */\n set(filters: FilterResolvable[]) {\n this.collection.clear();\n for (const filter of filters) {\n const resolved = this.#validate(filter);\n this.collection.set(this.#resolveName(resolved), resolved);\n }\n this.#apply();\n return this;\n }\n\n /**\n * Disable a filter or multiple filters\n * @param {FilterResolvable|FilterResolvable[]} filterOrFilters The filter or filters to disable\n * @returns {FilterManager}\n */\n remove(filterOrFilters: FilterResolvable | FilterResolvable[]) {\n const remove = (f: FilterResolvable) => this.collection.delete(this.#resolveName(this.#validate(f)));\n if (Array.isArray(filterOrFilters)) filterOrFilters.map(remove);\n else remove(filterOrFilters);\n this.#apply();\n return this;\n }\n\n /**\n * Check whether a filter enabled or not\n * @param {FilterResolvable} filter The filter to check\n * @returns {boolean}\n */\n has(filter: FilterResolvable) {\n return this.collection.has(this.#resolveName(filter));\n }\n\n /**\n * Array of enabled filter name\n * @type {Array<string>}\n * @readonly\n */\n get names() {\n return this.collection.map(f => this.#resolveName(f));\n }\n\n get values() {\n return this.collection.map(f => this.#resolveValue(f));\n }\n\n toString() {\n return this.names.toString();\n }\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BaseManager } from ".";
|
|
2
|
+
import type { GuildIdResolvable } from "../..";
|
|
3
|
+
export declare abstract class GuildIdManager<V> extends BaseManager<V> {
|
|
4
|
+
add(idOrInstance: GuildIdResolvable, data: V): this | import("@discordjs/collection").Collection<string, V>;
|
|
5
|
+
get(idOrInstance: GuildIdResolvable): V | undefined;
|
|
6
|
+
remove(idOrInstance: GuildIdResolvable): boolean;
|
|
7
|
+
has(idOrInstance: GuildIdResolvable): boolean;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=GuildIdManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GuildIdManager.d.ts","sourceRoot":"","sources":["../../../src/core/manager/GuildIdManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC;AAEhC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAQ/C,8BAAsB,cAAc,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IAC5D,GAAG,CAAC,YAAY,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;IAM5C,GAAG,CAAC,YAAY,EAAE,iBAAiB,GAAG,CAAC,GAAG,SAAS;IAGnD,MAAM,CAAC,YAAY,EAAE,iBAAiB,GAAG,OAAO;IAGhD,GAAG,CAAC,YAAY,EAAE,iBAAiB,GAAG,OAAO;CAG9C"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GuildIdManager = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
const __1 = require("../..");
|
|
6
|
+
class GuildIdManager extends _1.BaseManager {
|
|
7
|
+
add(idOrInstance, data) {
|
|
8
|
+
const id = (0, __1.resolveGuildId)(idOrInstance);
|
|
9
|
+
const existing = this.get(id);
|
|
10
|
+
if (existing)
|
|
11
|
+
return this;
|
|
12
|
+
return this.collection.set(id, data);
|
|
13
|
+
}
|
|
14
|
+
get(idOrInstance) {
|
|
15
|
+
return this.collection.get((0, __1.resolveGuildId)(idOrInstance));
|
|
16
|
+
}
|
|
17
|
+
remove(idOrInstance) {
|
|
18
|
+
return this.collection.delete((0, __1.resolveGuildId)(idOrInstance));
|
|
19
|
+
}
|
|
20
|
+
has(idOrInstance) {
|
|
21
|
+
return this.collection.has((0, __1.resolveGuildId)(idOrInstance));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.GuildIdManager = GuildIdManager;
|
|
25
|
+
//# sourceMappingURL=GuildIdManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GuildIdManager.js","sourceRoot":"","sources":["../../../src/core/manager/GuildIdManager.ts"],"names":[],"mappings":";;;AAAA,wBAAgC;AAChC,6BAAuC;AASvC,MAAsB,cAAkB,SAAQ,cAAc;IAC5D,GAAG,CAAC,YAA+B,EAAE,IAAO;QAC1C,MAAM,EAAE,GAAG,IAAA,kBAAc,EAAC,YAAY,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IACD,GAAG,CAAC,YAA+B;QACjC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAA,kBAAc,EAAC,YAAY,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,CAAC,YAA+B;QACpC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAA,kBAAc,EAAC,YAAY,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,GAAG,CAAC,YAA+B;QACjC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAA,kBAAc,EAAC,YAAY,CAAC,CAAC,CAAC;IAC3D,CAAC;CACF;AAhBD,wCAgBC","sourcesContent":["import { BaseManager } from \".\";\nimport { resolveGuildId } from \"../..\";\nimport type { GuildIdResolvable } from \"../..\";\n\n/**\n * Manages the collection of a data model paired with a guild id.\n * @abstract\n * @private\n * @extends BaseManager\n */\nexport abstract class GuildIdManager<V> extends BaseManager<V> {\n add(idOrInstance: GuildIdResolvable, data: V) {\n const id = resolveGuildId(idOrInstance);\n const existing = this.get(id);\n if (existing) return this;\n return this.collection.set(id, data);\n }\n get(idOrInstance: GuildIdResolvable): V | undefined {\n return this.collection.get(resolveGuildId(idOrInstance));\n }\n remove(idOrInstance: GuildIdResolvable): boolean {\n return this.collection.delete(resolveGuildId(idOrInstance));\n }\n has(idOrInstance: GuildIdResolvable): boolean {\n return this.collection.has(resolveGuildId(idOrInstance));\n }\n}\n"]}
|
|
@@ -1,33 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Queue } from "../..";
|
|
1
|
+
import { GuildIdManager } from ".";
|
|
2
|
+
import { DisTubeStream, Queue } from "../..";
|
|
3
3
|
import type { Song } from "../..";
|
|
4
4
|
import type { GuildTextBasedChannel, VoiceBasedChannel } from "discord.js";
|
|
5
|
-
|
|
6
|
-
* Queue manager
|
|
7
|
-
* @extends BaseManager
|
|
8
|
-
*/
|
|
9
|
-
export declare class QueueManager extends BaseManager<Queue> {
|
|
5
|
+
export declare class QueueManager extends GuildIdManager<Queue> {
|
|
10
6
|
#private;
|
|
11
|
-
/**
|
|
12
|
-
* Collection of {@link Queue}.
|
|
13
|
-
* @name QueueManager#collection
|
|
14
|
-
* @type {Discord.Collection<string, Queue>}
|
|
15
|
-
*/
|
|
16
|
-
/**
|
|
17
|
-
* Create a {@link Queue}
|
|
18
|
-
* @private
|
|
19
|
-
* @param {Discord.BaseGuildVoiceChannel} channel A voice channel
|
|
20
|
-
* @param {Song|Song[]} song First song
|
|
21
|
-
* @param {Discord.BaseGuildTextChannel} textChannel Default text channel
|
|
22
|
-
* @returns {Promise<Queue|true>} Returns `true` if encounter an error
|
|
23
|
-
*/
|
|
24
7
|
create(channel: VoiceBasedChannel, song: Song[] | Song, textChannel?: GuildTextBasedChannel): Promise<Queue | true>;
|
|
25
|
-
|
|
26
|
-
* Play a song on voice connection
|
|
27
|
-
* @private
|
|
28
|
-
* @param {Queue} queue The guild queue
|
|
29
|
-
* @returns {Promise<boolean>} error?
|
|
30
|
-
*/
|
|
8
|
+
createStream(queue: Queue): DisTubeStream;
|
|
31
9
|
playSong(queue: Queue): Promise<boolean>;
|
|
32
10
|
}
|
|
33
11
|
//# sourceMappingURL=QueueManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueueManager.d.ts","sourceRoot":"","sources":["../../../src/core/manager/QueueManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"QueueManager.d.ts","sourceRoot":"","sources":["../../../src/core/manager/QueueManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,CAAC;AACnC,OAAO,EAAgB,aAAa,EAAE,KAAK,EAAc,MAAM,OAAO,CAAC;AACvE,OAAO,KAAK,EAAsB,IAAI,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAM3E,qBAAa,YAAa,SAAQ,cAAc,CAAC,KAAK,CAAC;;IAc/C,MAAM,CACV,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EACnB,WAAW,CAAC,EAAE,qBAAqB,GAClC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAoHxB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa;IAenC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;CA8C/C"}
|
|
@@ -9,34 +9,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.QueueManager = void 0;
|
|
10
10
|
const _1 = require(".");
|
|
11
11
|
const __1 = require("../..");
|
|
12
|
-
|
|
13
|
-
* Queue manager
|
|
14
|
-
* @extends BaseManager
|
|
15
|
-
*/
|
|
16
|
-
class QueueManager extends _1.BaseManager {
|
|
12
|
+
class QueueManager extends _1.GuildIdManager {
|
|
17
13
|
constructor() {
|
|
18
14
|
super(...arguments);
|
|
19
15
|
_QueueManager_instances.add(this);
|
|
20
16
|
}
|
|
21
|
-
/**
|
|
22
|
-
* Collection of {@link Queue}.
|
|
23
|
-
* @name QueueManager#collection
|
|
24
|
-
* @type {Discord.Collection<string, Queue>}
|
|
25
|
-
*/
|
|
26
|
-
/**
|
|
27
|
-
* Create a {@link Queue}
|
|
28
|
-
* @private
|
|
29
|
-
* @param {Discord.BaseGuildVoiceChannel} channel A voice channel
|
|
30
|
-
* @param {Song|Song[]} song First song
|
|
31
|
-
* @param {Discord.BaseGuildTextChannel} textChannel Default text channel
|
|
32
|
-
* @returns {Promise<Queue|true>} Returns `true` if encounter an error
|
|
33
|
-
*/
|
|
34
17
|
async create(channel, song, textChannel) {
|
|
35
18
|
if (this.has(channel.guild.id))
|
|
36
19
|
throw new __1.DisTubeError("QUEUE_EXIST");
|
|
37
20
|
const voice = this.voices.create(channel);
|
|
38
21
|
const queue = new __1.Queue(this.distube, voice, song, textChannel);
|
|
39
|
-
await queue.
|
|
22
|
+
await queue._taskQueue.queuing();
|
|
40
23
|
try {
|
|
41
24
|
await voice.join();
|
|
42
25
|
__classPrivateFieldGet(this, _QueueManager_instances, "m", _QueueManager_voiceEventHandler).call(this, queue);
|
|
@@ -46,15 +29,18 @@ class QueueManager extends _1.BaseManager {
|
|
|
46
29
|
return err || queue;
|
|
47
30
|
}
|
|
48
31
|
finally {
|
|
49
|
-
queue.
|
|
32
|
+
queue._taskQueue.resolve();
|
|
50
33
|
}
|
|
51
34
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
35
|
+
createStream(queue) {
|
|
36
|
+
const { duration, formats, isLive, source, streamURL } = queue.songs[0];
|
|
37
|
+
const ffmpegArgs = queue.filters.size ? ["-af", queue.filters.values.join(",")] : undefined;
|
|
38
|
+
const seek = duration ? queue.beginTime : undefined;
|
|
39
|
+
const streamOptions = { ffmpegArgs, seek, isLive };
|
|
40
|
+
if (source === "youtube")
|
|
41
|
+
return __1.DisTubeStream.YouTube(formats, streamOptions);
|
|
42
|
+
return __1.DisTubeStream.DirectLink(streamURL, streamOptions);
|
|
43
|
+
}
|
|
58
44
|
async playSong(queue) {
|
|
59
45
|
if (!queue)
|
|
60
46
|
return true;
|
|
@@ -80,7 +66,7 @@ class QueueManager extends _1.BaseManager {
|
|
|
80
66
|
}
|
|
81
67
|
}
|
|
82
68
|
}
|
|
83
|
-
const stream = this.
|
|
69
|
+
const stream = this.createStream(queue);
|
|
84
70
|
queue.voice.play(stream);
|
|
85
71
|
song.streamURL = stream.url;
|
|
86
72
|
if (queue.stopped)
|
|
@@ -97,9 +83,9 @@ class QueueManager extends _1.BaseManager {
|
|
|
97
83
|
}
|
|
98
84
|
exports.QueueManager = QueueManager;
|
|
99
85
|
_QueueManager_instances = new WeakSet(), _QueueManager_voiceEventHandler = function _QueueManager_voiceEventHandler(queue) {
|
|
100
|
-
queue.
|
|
86
|
+
queue._listeners = {
|
|
101
87
|
disconnect: error => {
|
|
102
|
-
queue.
|
|
88
|
+
queue.remove();
|
|
103
89
|
this.emit("disconnect", queue);
|
|
104
90
|
if (error)
|
|
105
91
|
this.emitError(error, queue.textChannel);
|
|
@@ -107,31 +93,24 @@ _QueueManager_instances = new WeakSet(), _QueueManager_voiceEventHandler = funct
|
|
|
107
93
|
error: error => __classPrivateFieldGet(this, _QueueManager_instances, "m", _QueueManager_handlePlayingError).call(this, queue, error),
|
|
108
94
|
finish: () => __classPrivateFieldGet(this, _QueueManager_instances, "m", _QueueManager_handleSongFinish).call(this, queue),
|
|
109
95
|
};
|
|
110
|
-
for (const event of Object.keys(queue.
|
|
111
|
-
queue.voice.on(event, queue.
|
|
96
|
+
for (const event of Object.keys(queue._listeners)) {
|
|
97
|
+
queue.voice.on(event, queue._listeners[event]);
|
|
112
98
|
}
|
|
113
|
-
}, _QueueManager_handleSongFinish =
|
|
114
|
-
/**
|
|
115
|
-
* Handle the queue when a Song finish
|
|
116
|
-
* @private
|
|
117
|
-
* @param {Queue} queue queue
|
|
118
|
-
* @returns {Promise<void>}
|
|
119
|
-
*/
|
|
120
|
-
async function _QueueManager_handleSongFinish(queue) {
|
|
99
|
+
}, _QueueManager_handleSongFinish = async function _QueueManager_handleSongFinish(queue) {
|
|
121
100
|
this.emit("finishSong", queue, queue.songs[0]);
|
|
122
|
-
await queue.
|
|
101
|
+
await queue._taskQueue.queuing();
|
|
123
102
|
try {
|
|
124
103
|
if (queue.stopped)
|
|
125
104
|
return;
|
|
126
|
-
if (queue.repeatMode === __1.RepeatMode.QUEUE && !queue.
|
|
105
|
+
if (queue.repeatMode === __1.RepeatMode.QUEUE && !queue._prev)
|
|
127
106
|
queue.songs.push(queue.songs[0]);
|
|
128
|
-
if (queue.
|
|
107
|
+
if (queue._prev) {
|
|
129
108
|
if (queue.repeatMode === __1.RepeatMode.QUEUE)
|
|
130
109
|
queue.songs.unshift(queue.songs.pop());
|
|
131
110
|
else
|
|
132
111
|
queue.songs.unshift(queue.previousSongs.pop());
|
|
133
112
|
}
|
|
134
|
-
if (queue.songs.length <= 1 && (queue.
|
|
113
|
+
if (queue.songs.length <= 1 && (queue._next || queue.repeatMode === __1.RepeatMode.DISABLED)) {
|
|
135
114
|
if (queue.autoplay) {
|
|
136
115
|
try {
|
|
137
116
|
await queue.addRelatedSong();
|
|
@@ -145,12 +124,12 @@ async function _QueueManager_handleSongFinish(queue) {
|
|
|
145
124
|
queue.voice.leave();
|
|
146
125
|
if (!queue.autoplay)
|
|
147
126
|
this.emit("finish", queue);
|
|
148
|
-
queue.
|
|
127
|
+
queue.remove();
|
|
149
128
|
return;
|
|
150
129
|
}
|
|
151
130
|
}
|
|
152
131
|
const emitPlaySong = __classPrivateFieldGet(this, _QueueManager_instances, "m", _QueueManager_emitPlaySong).call(this, queue);
|
|
153
|
-
if (!queue.
|
|
132
|
+
if (!queue._prev && (queue.repeatMode !== __1.RepeatMode.SONG || queue._next)) {
|
|
154
133
|
const prev = queue.songs.shift();
|
|
155
134
|
delete prev.formats;
|
|
156
135
|
delete prev.streamURL;
|
|
@@ -159,14 +138,14 @@ async function _QueueManager_handleSongFinish(queue) {
|
|
|
159
138
|
else
|
|
160
139
|
queue.previousSongs.push({ id: prev.id });
|
|
161
140
|
}
|
|
162
|
-
queue.
|
|
141
|
+
queue._next = queue._prev = false;
|
|
163
142
|
queue.beginTime = 0;
|
|
164
143
|
const err = await this.playSong(queue);
|
|
165
144
|
if (!err && emitPlaySong)
|
|
166
145
|
this.emit("playSong", queue, queue.songs[0]);
|
|
167
146
|
}
|
|
168
147
|
finally {
|
|
169
|
-
queue.
|
|
148
|
+
queue._taskQueue.resolve();
|
|
170
149
|
}
|
|
171
150
|
}, _QueueManager_handlePlayingError = function _QueueManager_handlePlayingError(queue, error) {
|
|
172
151
|
const song = queue.songs.shift();
|
|
@@ -187,7 +166,7 @@ async function _QueueManager_handleSongFinish(queue) {
|
|
|
187
166
|
}
|
|
188
167
|
}, _QueueManager_emitPlaySong = function _QueueManager_emitPlaySong(queue) {
|
|
189
168
|
return (!this.options.emitNewSongOnly ||
|
|
190
|
-
(queue.repeatMode === __1.RepeatMode.SONG && queue.
|
|
169
|
+
(queue.repeatMode === __1.RepeatMode.SONG && queue._next) ||
|
|
191
170
|
(queue.repeatMode !== __1.RepeatMode.SONG && queue.songs[0]?.id !== queue.songs[1]?.id));
|
|
192
171
|
};
|
|
193
172
|
//# sourceMappingURL=QueueManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueueManager.js","sourceRoot":"","sources":["../../../src/core/manager/QueueManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseManager } from \".\";\nimport { DisTubeError, Queue, RepeatMode } from \"../..\";\nimport type { DisTubeVoiceEvents, Song } from \"../..\";\nimport type { GuildTextBasedChannel, VoiceBasedChannel } from \"discord.js\";\n\n/**\n * Queue manager\n * @extends BaseManager\n */\nexport class QueueManager extends BaseManager<Queue> {\n /**\n * Collection of {@link Queue}.\n * @name QueueManager#collection\n * @type {Discord.Collection<string, Queue>}\n */\n /**\n * Create a {@link Queue}\n * @private\n * @param {Discord.BaseGuildVoiceChannel} channel A voice channel\n * @param {Song|Song[]} song First song\n * @param {Discord.BaseGuildTextChannel} textChannel Default text channel\n * @returns {Promise<Queue|true>} Returns `true` if encounter an error\n */\n async create(\n channel: VoiceBasedChannel,\n song: Song[] | Song,\n textChannel?: GuildTextBasedChannel,\n ): Promise<Queue | true> {\n if (this.has(channel.guild.id)) throw new DisTubeError(\"QUEUE_EXIST\");\n const voice = this.voices.create(channel);\n const queue = new Queue(this.distube, voice, song, textChannel);\n await queue.taskQueue.queuing();\n try {\n await voice.join();\n this.#voiceEventHandler(queue);\n this.add(queue.id, queue);\n this.emit(\"initQueue\", queue);\n const err = await this.playSong(queue);\n return err || queue;\n } finally {\n queue.taskQueue.resolve();\n }\n }\n /**\n * Get a Queue from this QueueManager.\n * @method get\n * @memberof QueueManager#\n * @param {GuildIdResolvable} queue Resolvable thing from a guild\n * @returns {Queue?}\n */\n /**\n * Listen to DisTubeVoice events and handle the Queue\n * @private\n * @param {Queue} queue Queue\n */\n #voiceEventHandler(queue: Queue) {\n queue.listeners = {\n disconnect: error => {\n queue.delete();\n this.emit(\"disconnect\", queue);\n if (error) this.emitError(error, queue.textChannel);\n },\n error: error => this.#handlePlayingError(queue, error),\n finish: () => this.#handleSongFinish(queue),\n };\n for (const event of Object.keys(queue.listeners) as (keyof DisTubeVoiceEvents)[]) {\n queue.voice.on(event, queue.listeners[event]);\n }\n }\n /**\n * Handle the queue when a Song finish\n * @private\n * @param {Queue} queue queue\n * @returns {Promise<void>}\n */\n async #handleSongFinish(queue: Queue): Promise<void> {\n this.emit(\"finishSong\", queue, queue.songs[0]);\n await queue.taskQueue.queuing();\n try {\n if (queue.stopped) return;\n if (queue.repeatMode === RepeatMode.QUEUE && !queue.prev) queue.songs.push(queue.songs[0]);\n if (queue.prev) {\n if (queue.repeatMode === RepeatMode.QUEUE) queue.songs.unshift(queue.songs.pop() as Song);\n else queue.songs.unshift(queue.previousSongs.pop() as Song);\n }\n if (queue.songs.length <= 1 && (queue.next || queue.repeatMode === RepeatMode.DISABLED)) {\n if (queue.autoplay) {\n try {\n await queue.addRelatedSong();\n } catch {\n this.emit(\"noRelated\", queue);\n }\n }\n if (queue.songs.length <= 1) {\n if (this.options.leaveOnFinish) queue.voice.leave();\n if (!queue.autoplay) this.emit(\"finish\", queue);\n queue.delete();\n return;\n }\n }\n const emitPlaySong = this.#emitPlaySong(queue);\n if (!queue.prev && (queue.repeatMode !== RepeatMode.SONG || queue.next)) {\n const prev = queue.songs.shift() as Song;\n delete prev.formats;\n delete prev.streamURL;\n if (this.options.savePreviousSongs) queue.previousSongs.push(prev);\n else queue.previousSongs.push({ id: prev.id } as Song);\n }\n queue.next = queue.prev = false;\n queue.beginTime = 0;\n const err = await this.playSong(queue);\n if (!err && emitPlaySong) this.emit(\"playSong\", queue, queue.songs[0]);\n } finally {\n queue.taskQueue.resolve();\n }\n }\n /**\n * Handle error while playing\n * @private\n * @param {Queue} queue queue\n * @param {Error} error error\n */\n #handlePlayingError(queue: Queue, error: Error) {\n const song = queue.songs.shift() as Song;\n try {\n error.name = \"PlayingError\";\n error.message = `${error.message}\\nId: ${song.id}\\nName: ${song.name}`;\n } catch {}\n this.emitError(error, queue.textChannel);\n if (queue.songs.length > 0) {\n this.playSong(queue).then(e => {\n if (!e) this.emit(\"playSong\", queue, queue.songs[0]);\n });\n } else {\n queue.stop();\n }\n }\n\n /**\n * Play a song on voice connection\n * @private\n * @param {Queue} queue The guild queue\n * @returns {Promise<boolean>} error?\n */\n async playSong(queue: Queue): Promise<boolean> {\n if (!queue) return true;\n if (!queue.songs.length) {\n queue.stop();\n return true;\n }\n if (queue.stopped) return false;\n const song = queue.songs[0];\n try {\n const { url, source, formats, streamURL } = song;\n if (source === \"youtube\" && !formats) song._patchYouTube(await this.handler.getYouTubeInfo(url));\n if (source !== \"youtube\" && !streamURL) {\n for (const plugin of [...this.distube.extractorPlugins, ...this.distube.customPlugins]) {\n if (await plugin.validate(url)) {\n const info = [plugin.getStreamURL(url), plugin.getRelatedSongs(url)] as const;\n const result = await Promise.all(info);\n song.streamURL = result[0];\n song.related = result[1];\n break;\n }\n }\n }\n const stream = this.handler.createStream(queue);\n queue.voice.play(stream);\n song.streamURL = stream.url;\n if (queue.stopped) queue.stop();\n else if (queue.paused) queue.voice.pause();\n return false;\n } catch (e: any) {\n this.#handlePlayingError(queue, e);\n return true;\n }\n }\n /**\n * Whether or not emit playSong event\n * @param {Queue} queue Queue\n * @private\n * @returns {boolean}\n */\n #emitPlaySong(queue: Queue): boolean {\n return (\n !this.options.emitNewSongOnly ||\n (queue.repeatMode === RepeatMode.SONG && queue.next) ||\n (queue.repeatMode !== RepeatMode.SONG && queue.songs[0]?.id !== queue.songs[1]?.id)\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"QueueManager.js","sourceRoot":"","sources":["../../../src/core/manager/QueueManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { GuildIdManager } from \".\";\nimport { DisTubeError, DisTubeStream, Queue, RepeatMode } from \"../..\";\nimport type { DisTubeVoiceEvents, Song } from \"../..\";\nimport type { GuildTextBasedChannel, VoiceBasedChannel } from \"discord.js\";\n\n/**\n * Queue manager\n * @extends GuildIdManager\n */\nexport class QueueManager extends GuildIdManager<Queue> {\n /**\n * Collection of {@link Queue}.\n * @name QueueManager#collection\n * @type {Discord.Collection<string, Queue>}\n */\n /**\n * Create a {@link Queue}\n * @private\n * @param {Discord.BaseGuildVoiceChannel} channel A voice channel\n * @param {Song|Song[]} song First song\n * @param {Discord.BaseGuildTextChannel} textChannel Default text channel\n * @returns {Promise<Queue|true>} Returns `true` if encounter an error\n */\n async create(\n channel: VoiceBasedChannel,\n song: Song[] | Song,\n textChannel?: GuildTextBasedChannel,\n ): Promise<Queue | true> {\n if (this.has(channel.guild.id)) throw new DisTubeError(\"QUEUE_EXIST\");\n const voice = this.voices.create(channel);\n const queue = new Queue(this.distube, voice, song, textChannel);\n await queue._taskQueue.queuing();\n try {\n await voice.join();\n this.#voiceEventHandler(queue);\n this.add(queue.id, queue);\n this.emit(\"initQueue\", queue);\n const err = await this.playSong(queue);\n return err || queue;\n } finally {\n queue._taskQueue.resolve();\n }\n }\n /**\n * Get a Queue from this QueueManager.\n * @method get\n * @memberof QueueManager#\n * @param {GuildIdResolvable} guild Resolvable thing from a guild\n * @returns {Queue?}\n */\n /**\n * Listen to DisTubeVoice events and handle the Queue\n * @private\n * @param {Queue} queue Queue\n */\n #voiceEventHandler(queue: Queue) {\n queue._listeners = {\n disconnect: error => {\n queue.remove();\n this.emit(\"disconnect\", queue);\n if (error) this.emitError(error, queue.textChannel);\n },\n error: error => this.#handlePlayingError(queue, error),\n finish: () => this.#handleSongFinish(queue),\n };\n for (const event of Object.keys(queue._listeners) as (keyof DisTubeVoiceEvents)[]) {\n queue.voice.on(event, queue._listeners[event]);\n }\n }\n /**\n * Handle the queue when a Song finish\n * @private\n * @param {Queue} queue queue\n * @returns {Promise<void>}\n */\n async #handleSongFinish(queue: Queue): Promise<void> {\n this.emit(\"finishSong\", queue, queue.songs[0]);\n await queue._taskQueue.queuing();\n try {\n if (queue.stopped) return;\n if (queue.repeatMode === RepeatMode.QUEUE && !queue._prev) queue.songs.push(queue.songs[0]);\n if (queue._prev) {\n if (queue.repeatMode === RepeatMode.QUEUE) queue.songs.unshift(queue.songs.pop() as Song);\n else queue.songs.unshift(queue.previousSongs.pop() as Song);\n }\n if (queue.songs.length <= 1 && (queue._next || queue.repeatMode === RepeatMode.DISABLED)) {\n if (queue.autoplay) {\n try {\n await queue.addRelatedSong();\n } catch {\n this.emit(\"noRelated\", queue);\n }\n }\n if (queue.songs.length <= 1) {\n if (this.options.leaveOnFinish) queue.voice.leave();\n if (!queue.autoplay) this.emit(\"finish\", queue);\n queue.remove();\n return;\n }\n }\n const emitPlaySong = this.#emitPlaySong(queue);\n if (!queue._prev && (queue.repeatMode !== RepeatMode.SONG || queue._next)) {\n const prev = queue.songs.shift() as Song;\n delete prev.formats;\n delete prev.streamURL;\n if (this.options.savePreviousSongs) queue.previousSongs.push(prev);\n else queue.previousSongs.push({ id: prev.id } as Song);\n }\n queue._next = queue._prev = false;\n queue.beginTime = 0;\n const err = await this.playSong(queue);\n if (!err && emitPlaySong) this.emit(\"playSong\", queue, queue.songs[0]);\n } finally {\n queue._taskQueue.resolve();\n }\n }\n /**\n * Handle error while playing\n * @private\n * @param {Queue} queue queue\n * @param {Error} error error\n */\n #handlePlayingError(queue: Queue, error: Error) {\n const song = queue.songs.shift() as Song;\n try {\n error.name = \"PlayingError\";\n error.message = `${error.message}\\nId: ${song.id}\\nName: ${song.name}`;\n } catch {}\n this.emitError(error, queue.textChannel);\n if (queue.songs.length > 0) {\n this.playSong(queue).then(e => {\n if (!e) this.emit(\"playSong\", queue, queue.songs[0]);\n });\n } else {\n queue.stop();\n }\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 ffmpegArgs = queue.filters.size ? [\"-af\", queue.filters.values.join(\",\")] : undefined;\n const seek = duration ? queue.beginTime : undefined;\n const streamOptions = { ffmpegArgs, seek, isLive };\n if (source === \"youtube\") return DisTubeStream.YouTube(formats, streamOptions);\n return DisTubeStream.DirectLink(streamURL as string, streamOptions);\n }\n\n /**\n * Play a song on voice connection\n * @private\n * @param {Queue} queue The guild queue\n * @returns {Promise<boolean>} error?\n */\n async playSong(queue: Queue): Promise<boolean> {\n if (!queue) return true;\n if (!queue.songs.length) {\n queue.stop();\n return true;\n }\n if (queue.stopped) return false;\n const song = queue.songs[0];\n try {\n const { url, source, formats, streamURL } = song;\n if (source === \"youtube\" && !formats) song._patchYouTube(await this.handler.getYouTubeInfo(url));\n if (source !== \"youtube\" && !streamURL) {\n for (const plugin of [...this.distube.extractorPlugins, ...this.distube.customPlugins]) {\n if (await plugin.validate(url)) {\n const info = [plugin.getStreamURL(url), plugin.getRelatedSongs(url)] as const;\n const result = await Promise.all(info);\n song.streamURL = result[0];\n song.related = result[1];\n break;\n }\n }\n }\n const stream = this.createStream(queue);\n queue.voice.play(stream);\n song.streamURL = stream.url;\n if (queue.stopped) queue.stop();\n else if (queue.paused) queue.voice.pause();\n return false;\n } catch (e: any) {\n this.#handlePlayingError(queue, e);\n return true;\n }\n }\n /**\n * Whether or not emit playSong event\n * @param {Queue} queue Queue\n * @private\n * @returns {boolean}\n */\n #emitPlaySong(queue: Queue): boolean {\n return (\n !this.options.emitNewSongOnly ||\n (queue.repeatMode === RepeatMode.SONG && queue._next) ||\n (queue.repeatMode !== RepeatMode.SONG && queue.songs[0]?.id !== queue.songs[1]?.id)\n );\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/manager/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/manager/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC"}
|
|
@@ -11,5 +11,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
__exportStar(require("./BaseManager"), exports);
|
|
14
|
+
__exportStar(require("./GuildIdManager"), exports);
|
|
14
15
|
__exportStar(require("./QueueManager"), exports);
|
|
16
|
+
__exportStar(require("./FilterManager"), exports);
|
|
15
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/manager/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gDAA8B;AAC9B,iDAA+B","sourcesContent":["export * from \"./BaseManager\";\nexport * from \"./QueueManager\";\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/manager/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gDAA8B;AAC9B,mDAAiC;AACjC,iDAA+B;AAC/B,kDAAgC","sourcesContent":["export * from \"./BaseManager\";\nexport * from \"./GuildIdManager\";\nexport * from \"./QueueManager\";\nexport * from \"./FilterManager\";\n"]}
|
|
@@ -2,9 +2,6 @@ import { TypedEmitter } from "tiny-typed-emitter";
|
|
|
2
2
|
import type { DisTubeStream, DisTubeVoiceEvents, DisTubeVoiceManager } from "../..";
|
|
3
3
|
import type { AudioPlayer, AudioResource, VoiceConnection } from "@discordjs/voice";
|
|
4
4
|
import type { Snowflake, VoiceBasedChannel, VoiceState } from "discord.js";
|
|
5
|
-
/**
|
|
6
|
-
* Create a voice connection to the voice channel
|
|
7
|
-
*/
|
|
8
5
|
export declare class DisTubeVoice extends TypedEmitter<DisTubeVoiceEvents> {
|
|
9
6
|
#private;
|
|
10
7
|
readonly id: Snowflake;
|
|
@@ -17,66 +14,19 @@ export declare class DisTubeVoice extends TypedEmitter<DisTubeVoiceEvents> {
|
|
|
17
14
|
constructor(voiceManager: DisTubeVoiceManager, channel: VoiceBasedChannel);
|
|
18
15
|
get channel(): VoiceBasedChannel;
|
|
19
16
|
set channel(channel: VoiceBasedChannel);
|
|
20
|
-
/**
|
|
21
|
-
* Join a voice channel with this connection
|
|
22
|
-
* @param {Discord.BaseGuildVoiceChannel} [channel] A voice channel
|
|
23
|
-
* @private
|
|
24
|
-
* @returns {Promise<DisTubeVoice>}
|
|
25
|
-
*/
|
|
26
17
|
join(channel?: VoiceBasedChannel): Promise<DisTubeVoice>;
|
|
27
|
-
/**
|
|
28
|
-
* Leave the voice channel of this connection
|
|
29
|
-
* @param {Error} [error] Optional, an error to emit with 'error' event.
|
|
30
|
-
*/
|
|
31
18
|
leave(error?: Error): void;
|
|
32
|
-
/**
|
|
33
|
-
* Stop the playing stream
|
|
34
|
-
* @param {boolean} [force=false] If true, will force the {@link DisTubeVoice#audioPlayer} to enter the Idle state
|
|
35
|
-
* even if the {@link DisTubeVoice#audioResource} has silence padding frames.
|
|
36
|
-
* @private
|
|
37
|
-
*/
|
|
38
19
|
stop(force?: boolean): void;
|
|
39
|
-
/**
|
|
40
|
-
* Play a readable stream
|
|
41
|
-
* @private
|
|
42
|
-
* @param {DisTubeStream} stream Readable stream
|
|
43
|
-
*/
|
|
44
20
|
play(stream: DisTubeStream): void;
|
|
45
21
|
set volume(volume: number);
|
|
46
22
|
get volume(): number;
|
|
47
|
-
/**
|
|
48
|
-
* Playback duration of the audio resource in seconds
|
|
49
|
-
* @type {number}
|
|
50
|
-
*/
|
|
51
23
|
get playbackDuration(): number;
|
|
52
24
|
pause(): void;
|
|
53
25
|
unpause(): void;
|
|
54
|
-
/**
|
|
55
|
-
* Whether the bot is self-deafened
|
|
56
|
-
* @type {boolean}
|
|
57
|
-
*/
|
|
58
26
|
get selfDeaf(): boolean;
|
|
59
|
-
/**
|
|
60
|
-
* Whether the bot is self-muted
|
|
61
|
-
* @type {boolean}
|
|
62
|
-
*/
|
|
63
27
|
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
28
|
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
29
|
setSelfMute(selfMute: boolean): boolean;
|
|
76
|
-
/**
|
|
77
|
-
* The voice state of this connection
|
|
78
|
-
* @type {Discord.VoiceState?}
|
|
79
|
-
*/
|
|
80
30
|
get voiceState(): VoiceState | undefined;
|
|
81
31
|
}
|
|
82
32
|
//# sourceMappingURL=DisTubeVoice.d.ts.map
|
|
@@ -1 +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;AAUlD,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,iBAAiB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"DisTubeVoice.d.ts","sourceRoot":"","sources":["../../../src/core/voice/DisTubeVoice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUlD,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,iBAAiB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK3E,qBAAa,YAAa,SAAQ,YAAY,CAAC,kBAAkB,CAAC;;IAChE,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,UAAU,EAAG,eAAe,CAAC;IAC7B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,EAAG,OAAO,CAAC;IACvB,cAAc,UAAS;gBAGX,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAE,iBAAiB;IAqDzE,IAAI,OAAO,IAGU,iBAAiB,CADrC;IACD,IAAI,OAAO,CAAC,OAAO,EAAE,iBAAiB,EAQrC;IAaK,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IAoB9D,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK;IAenB,IAAI,CAAC,KAAK,UAAQ;IAQlB,IAAI,CAAC,MAAM,EAAE,aAAa;IAe1B,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EASxB;IACD,IAAI,MAAM,IAVS,MAAM,CAYxB;IAKD,IAAI,gBAAgB,WAEnB;IACD,KAAK;IAGL,OAAO;IAOP,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAKD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAMD,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO;IAcvC,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO;IAavC,IAAI,UAAU,IAAI,UAAU,GAAG,SAAS,CAEvC;CACF"}
|