yukimu 2.0.8 → 3.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 (97) hide show
  1. package/dist/BitrateOptimizer.d.ts +52 -0
  2. package/dist/BitrateOptimizer.d.ts.map +1 -0
  3. package/dist/BitrateOptimizer.js +115 -0
  4. package/dist/BitrateOptimizer.js.map +1 -0
  5. package/dist/ConnectionPool.d.ts +84 -0
  6. package/dist/ConnectionPool.d.ts.map +1 -0
  7. package/dist/ConnectionPool.js +203 -0
  8. package/dist/ConnectionPool.js.map +1 -0
  9. package/dist/Constants.d.ts +47 -0
  10. package/dist/Constants.d.ts.map +1 -0
  11. package/dist/Constants.js +170 -0
  12. package/dist/Constants.js.map +1 -0
  13. package/dist/Logger.d.ts +22 -0
  14. package/dist/Logger.d.ts.map +1 -0
  15. package/dist/Logger.js +74 -0
  16. package/dist/Logger.js.map +1 -0
  17. package/dist/Node.d.ts +61 -0
  18. package/dist/Node.d.ts.map +1 -0
  19. package/dist/Node.js +446 -0
  20. package/dist/Node.js.map +1 -0
  21. package/dist/Player.d.ts +143 -0
  22. package/dist/Player.d.ts.map +1 -0
  23. package/dist/Player.js +574 -0
  24. package/dist/Player.js.map +1 -0
  25. package/dist/Plugin.d.ts +25 -0
  26. package/dist/Plugin.d.ts.map +1 -0
  27. package/dist/Plugin.js +15 -0
  28. package/dist/Plugin.js.map +1 -0
  29. package/dist/Queue.d.ts +89 -0
  30. package/dist/Queue.d.ts.map +1 -0
  31. package/dist/Queue.js +188 -0
  32. package/dist/Queue.js.map +1 -0
  33. package/dist/Resolver.d.ts +68 -0
  34. package/dist/Resolver.d.ts.map +1 -0
  35. package/dist/Resolver.js +361 -0
  36. package/dist/Resolver.js.map +1 -0
  37. package/dist/Rest.d.ts +46 -0
  38. package/dist/Rest.d.ts.map +1 -0
  39. package/dist/Rest.js +247 -0
  40. package/dist/Rest.js.map +1 -0
  41. package/dist/TrackCache.d.ts +41 -0
  42. package/dist/TrackCache.d.ts.map +1 -0
  43. package/dist/TrackCache.js +144 -0
  44. package/dist/TrackCache.js.map +1 -0
  45. package/dist/WsQueue.d.ts +41 -0
  46. package/dist/WsQueue.d.ts.map +1 -0
  47. package/dist/WsQueue.js +116 -0
  48. package/dist/WsQueue.js.map +1 -0
  49. package/dist/Yukimu.d.ts +84 -0
  50. package/dist/Yukimu.d.ts.map +1 -0
  51. package/dist/Yukimu.js +290 -0
  52. package/dist/Yukimu.js.map +1 -0
  53. package/dist/connector/Connector.d.ts +34 -0
  54. package/dist/connector/Connector.d.ts.map +1 -0
  55. package/dist/connector/Connector.js +39 -0
  56. package/dist/connector/Connector.js.map +1 -0
  57. package/dist/connector/DiscordJS.d.ts +27 -0
  58. package/dist/connector/DiscordJS.d.ts.map +1 -0
  59. package/dist/connector/DiscordJS.js +69 -0
  60. package/dist/connector/DiscordJS.js.map +1 -0
  61. package/dist/connector/Eris.d.ts +19 -0
  62. package/dist/connector/Eris.d.ts.map +1 -0
  63. package/dist/connector/Eris.js +62 -0
  64. package/dist/connector/Eris.js.map +1 -0
  65. package/dist/connector/Oceanic.d.ts +19 -0
  66. package/dist/connector/Oceanic.d.ts.map +1 -0
  67. package/dist/connector/Oceanic.js +60 -0
  68. package/dist/connector/Oceanic.js.map +1 -0
  69. package/dist/errors/YukimuError.d.ts +51 -0
  70. package/dist/errors/YukimuError.d.ts.map +1 -0
  71. package/dist/errors/YukimuError.js +105 -0
  72. package/dist/errors/YukimuError.js.map +1 -0
  73. package/dist/index.d.ts +29 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +70 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/plugins/AutoResume.d.ts +25 -0
  78. package/dist/plugins/AutoResume.d.ts.map +1 -0
  79. package/dist/plugins/AutoResume.js +132 -0
  80. package/dist/plugins/AutoResume.js.map +1 -0
  81. package/dist/plugins/AutoplayPlugin.d.ts +35 -0
  82. package/dist/plugins/AutoplayPlugin.d.ts.map +1 -0
  83. package/dist/plugins/AutoplayPlugin.js +111 -0
  84. package/dist/plugins/AutoplayPlugin.js.map +1 -0
  85. package/dist/plugins/InactivityPlugin.d.ts +30 -0
  86. package/dist/plugins/InactivityPlugin.d.ts.map +1 -0
  87. package/dist/plugins/InactivityPlugin.js +86 -0
  88. package/dist/plugins/InactivityPlugin.js.map +1 -0
  89. package/dist/plugins/PlayerMoved.d.ts +29 -0
  90. package/dist/plugins/PlayerMoved.d.ts.map +1 -0
  91. package/dist/plugins/PlayerMoved.js +75 -0
  92. package/dist/plugins/PlayerMoved.js.map +1 -0
  93. package/dist/types.d.ts +309 -0
  94. package/dist/types.d.ts.map +1 -0
  95. package/dist/types.js +4 -0
  96. package/dist/types.js.map +1 -0
  97. package/package.json +4 -4
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /** Yukimu v2.0.0 — Eris Connector */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Eris = void 0;
5
+ const Connector_1 = require("./Connector");
6
+ /**
7
+ * Connector for Eris.
8
+ *
9
+ * Improvements from v1:
10
+ * - Safe shard access
11
+ * - Boost tier detection
12
+ */
13
+ class Eris extends Connector_1.Connector {
14
+ client; // Eris Client
15
+ constructor(client) {
16
+ super();
17
+ this.client = client;
18
+ }
19
+ listen() {
20
+ this.client.on("rawWS", (packet) => {
21
+ if (packet.t === "VOICE_STATE_UPDATE") {
22
+ this.manager.handleVoiceStateUpdate(packet.d);
23
+ }
24
+ if (packet.t === "VOICE_SERVER_UPDATE") {
25
+ this.manager.handleVoiceServerUpdate(packet.d);
26
+ }
27
+ });
28
+ }
29
+ sendPayload(guildId, payload) {
30
+ const guild = this.client.guilds?.get(guildId);
31
+ if (!guild) {
32
+ this.manager.logger.warn(`Cannot send payload — guild ${guildId} not found`);
33
+ return;
34
+ }
35
+ const shard = this.client.shards?.get(guild.shard?.id);
36
+ if (!shard) {
37
+ this.manager.logger.warn(`Cannot send payload — shard for guild ${guildId} not found`);
38
+ return;
39
+ }
40
+ try {
41
+ shard.sendWS(4, payload.d);
42
+ }
43
+ catch (err) {
44
+ this.manager.logger.error(`Failed to send payload to guild ${guildId}:`, err);
45
+ }
46
+ }
47
+ getGuildBoostTier(guildId) {
48
+ const guild = this.client.guilds?.get(guildId);
49
+ if (!guild)
50
+ return 0;
51
+ const tier = guild.premiumTier ?? 0;
52
+ return (Math.min(Math.max(tier, 0), 3));
53
+ }
54
+ getChannelBitrate(_guildId, channelId) {
55
+ const channel = this.client.getChannel?.(channelId);
56
+ if (!channel || !channel.bitrate)
57
+ return null;
58
+ return Math.floor(channel.bitrate / 1000);
59
+ }
60
+ }
61
+ exports.Eris = Eris;
62
+ //# sourceMappingURL=Eris.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Eris.js","sourceRoot":"","sources":["../../src/connector/Eris.ts"],"names":[],"mappings":";AAAA,qCAAqC;;;AAErC,2CAAwC;AAGxC;;;;;;GAMG;AACH,MAAa,IAAK,SAAQ,qBAAS;IAChB,MAAM,CAAM,CAAC,cAAc;IAE5C,YAAY,MAAW;QACrB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,MAAM;QACX,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,MAAW,EAAE,EAAE;YACtC,IAAI,MAAM,CAAC,CAAC,KAAK,oBAAoB,EAAE,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;YACD,IAAI,MAAM,CAAC,CAAC,KAAK,qBAAqB,EAAE,CAAC;gBACvC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACjD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,WAAW,CAAC,OAAe,EAAE,OAAgB;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,OAAO,YAAY,CAAC,CAAC;YAC7E,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,OAAO,YAAY,CAAC,CAAC;YACvF,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,KAAK,CAAC,MAAM,CAAC,CAAC,EAAG,OAAe,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAEe,iBAAiB,CAAC,OAAe;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC;QACrB,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAc,CAAC;IACvD,CAAC;IAEe,iBAAiB,CAAC,QAAgB,EAAE,SAAiB;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC;CACF;AAjDD,oBAiDC"}
@@ -0,0 +1,19 @@
1
+ /** Yukimu v2.0.0 — Oceanic.js Connector */
2
+ import { Connector } from "./Connector";
3
+ import type { BoostTier } from "../types";
4
+ /**
5
+ * Connector for Oceanic.js.
6
+ *
7
+ * Improvements from v1:
8
+ * - Safe guild/shard access
9
+ * - Boost tier detection
10
+ */
11
+ export declare class Oceanic extends Connector {
12
+ private readonly client;
13
+ constructor(client: any);
14
+ listen(): void;
15
+ sendPayload(guildId: string, payload: unknown): void;
16
+ getGuildBoostTier(guildId: string): BoostTier;
17
+ getChannelBitrate(guildId: string, channelId: string): number | null;
18
+ }
19
+ //# sourceMappingURL=Oceanic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Oceanic.d.ts","sourceRoot":"","sources":["../../src/connector/Oceanic.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C;;;;;;GAMG;AACH,qBAAa,OAAQ,SAAQ,SAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAM;gBAEjB,MAAM,EAAE,GAAG;IAKhB,MAAM,IAAI,IAAI;IAWd,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAa3C,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS;IAO7C,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAOrF"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ /** Yukimu v2.0.0 — Oceanic.js Connector */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Oceanic = void 0;
5
+ const Connector_1 = require("./Connector");
6
+ /**
7
+ * Connector for Oceanic.js.
8
+ *
9
+ * Improvements from v1:
10
+ * - Safe guild/shard access
11
+ * - Boost tier detection
12
+ */
13
+ class Oceanic extends Connector_1.Connector {
14
+ client; // Oceanic Client
15
+ constructor(client) {
16
+ super();
17
+ this.client = client;
18
+ }
19
+ listen() {
20
+ this.client.on("packet", (packet) => {
21
+ if (packet.t === "VOICE_STATE_UPDATE") {
22
+ this.manager.handleVoiceStateUpdate(packet.d);
23
+ }
24
+ if (packet.t === "VOICE_SERVER_UPDATE") {
25
+ this.manager.handleVoiceServerUpdate(packet.d);
26
+ }
27
+ });
28
+ }
29
+ sendPayload(guildId, payload) {
30
+ const guild = this.client.guilds?.get(guildId);
31
+ if (!guild?.shard) {
32
+ this.manager.logger.warn(`Cannot send payload — guild ${guildId} or shard not found`);
33
+ return;
34
+ }
35
+ try {
36
+ guild.shard.send(payload);
37
+ }
38
+ catch (err) {
39
+ this.manager.logger.error(`Failed to send payload to guild ${guildId}:`, err);
40
+ }
41
+ }
42
+ getGuildBoostTier(guildId) {
43
+ const guild = this.client.guilds?.get(guildId);
44
+ if (!guild)
45
+ return 0;
46
+ const tier = guild.premiumTier ?? 0;
47
+ return (Math.min(Math.max(tier, 0), 3));
48
+ }
49
+ getChannelBitrate(guildId, channelId) {
50
+ const guild = this.client.guilds?.get(guildId);
51
+ if (!guild)
52
+ return null;
53
+ const channel = guild.channels?.get(channelId);
54
+ if (!channel || !channel.bitrate)
55
+ return null;
56
+ return Math.floor(channel.bitrate / 1000);
57
+ }
58
+ }
59
+ exports.Oceanic = Oceanic;
60
+ //# sourceMappingURL=Oceanic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Oceanic.js","sourceRoot":"","sources":["../../src/connector/Oceanic.ts"],"names":[],"mappings":";AAAA,2CAA2C;;;AAE3C,2CAAwC;AAGxC;;;;;;GAMG;AACH,MAAa,OAAQ,SAAQ,qBAAS;IACnB,MAAM,CAAM,CAAC,iBAAiB;IAE/C,YAAY,MAAW;QACrB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,MAAM;QACX,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAW,EAAE,EAAE;YACvC,IAAI,MAAM,CAAC,CAAC,KAAK,oBAAoB,EAAE,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;YACD,IAAI,MAAM,CAAC,CAAC,KAAK,qBAAqB,EAAE,CAAC;gBACvC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACjD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,WAAW,CAAC,OAAe,EAAE,OAAgB;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,OAAO,qBAAqB,CAAC,CAAC;YACtF,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAEe,iBAAiB,CAAC,OAAe;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC;QACrB,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAc,CAAC;IACvD,CAAC;IAEe,iBAAiB,CAAC,OAAe,EAAE,SAAiB;QAClE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC;CACF;AA9CD,0BA8CC"}
@@ -0,0 +1,51 @@
1
+ /** Yukimu v2.0.0 — Error System with Error Codes */
2
+ export declare enum ErrorCode {
3
+ UNKNOWN = "UNKNOWN",
4
+ INVALID_ARGUMENT = "INVALID_ARGUMENT",
5
+ NODE_NOT_FOUND = "NODE_NOT_FOUND",
6
+ NODE_ALREADY_EXISTS = "NODE_ALREADY_EXISTS",
7
+ NODE_DISCONNECTED = "NODE_DISCONNECTED",
8
+ NODE_MAX_RETRIES = "NODE_MAX_RETRIES",
9
+ NODE_CONNECTION_TIMEOUT = "NODE_CONNECTION_TIMEOUT",
10
+ PLAYER_NOT_FOUND = "PLAYER_NOT_FOUND",
11
+ PLAYER_ALREADY_EXISTS = "PLAYER_ALREADY_EXISTS",
12
+ PLAYER_NO_TRACK = "PLAYER_NO_TRACK",
13
+ PLAYER_NOT_SEEKABLE = "PLAYER_NOT_SEEKABLE",
14
+ PLAYER_INVALID_VOLUME = "PLAYER_INVALID_VOLUME",
15
+ PLAYER_INVALID_FILTER = "PLAYER_INVALID_FILTER",
16
+ VOICE_CONNECTION_TIMEOUT = "VOICE_CONNECTION_TIMEOUT",
17
+ VOICE_CONNECTION_FAILED = "VOICE_CONNECTION_FAILED",
18
+ REST_ERROR = "REST_ERROR",
19
+ REST_TIMEOUT = "REST_TIMEOUT",
20
+ REST_RATE_LIMITED = "REST_RATE_LIMITED",
21
+ RESOLVER_NO_NODE = "RESOLVER_NO_NODE",
22
+ RESOLVER_LOAD_FAILED = "RESOLVER_LOAD_FAILED",
23
+ RESOLVER_SPOTIFY_ERROR = "RESOLVER_SPOTIFY_ERROR",
24
+ PLUGIN_ALREADY_LOADED = "PLUGIN_ALREADY_LOADED",
25
+ PLUGIN_NOT_FOUND = "PLUGIN_NOT_FOUND"
26
+ }
27
+ export declare class YukimuError extends Error {
28
+ readonly code: ErrorCode;
29
+ constructor(message: string, code?: ErrorCode);
30
+ }
31
+ export declare class NodeError extends YukimuError {
32
+ constructor(message: string, code?: ErrorCode);
33
+ }
34
+ export declare class PlayerError extends YukimuError {
35
+ constructor(message: string, code?: ErrorCode);
36
+ }
37
+ export declare class RestError extends YukimuError {
38
+ readonly status: number;
39
+ readonly path: string;
40
+ readonly retryAfter?: number;
41
+ constructor(message: string, status: number, path: string, retryAfter?: number);
42
+ }
43
+ export declare class VoiceConnectionError extends YukimuError {
44
+ readonly guildId: string;
45
+ constructor(message: string, guildId: string, code?: ErrorCode);
46
+ }
47
+ export declare class ResolverError extends YukimuError {
48
+ readonly query: string;
49
+ constructor(message: string, query: string, code?: ErrorCode);
50
+ }
51
+ //# sourceMappingURL=YukimuError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"YukimuError.d.ts","sourceRoot":"","sources":["../../src/errors/YukimuError.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAIpD,oBAAY,SAAS;IAEnB,OAAO,YAAY;IACnB,gBAAgB,qBAAqB;IAGrC,cAAc,mBAAmB;IACjC,mBAAmB,wBAAwB;IAC3C,iBAAiB,sBAAsB;IACvC,gBAAgB,qBAAqB;IACrC,uBAAuB,4BAA4B;IAGnD,gBAAgB,qBAAqB;IACrC,qBAAqB,0BAA0B;IAC/C,eAAe,oBAAoB;IACnC,mBAAmB,wBAAwB;IAC3C,qBAAqB,0BAA0B;IAC/C,qBAAqB,0BAA0B;IAG/C,wBAAwB,6BAA6B;IACrD,uBAAuB,4BAA4B;IAGnD,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,iBAAiB,sBAAsB;IAGvC,gBAAgB,qBAAqB;IACrC,oBAAoB,yBAAyB;IAC7C,sBAAsB,2BAA2B;IAGjD,qBAAqB,0BAA0B;IAC/C,gBAAgB,qBAAqB;CACtC;AAID,qBAAa,WAAY,SAAQ,KAAK;IACpC,SAAgB,IAAI,EAAE,SAAS,CAAC;gBAEpB,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,SAA6B;CASjE;AAID,qBAAa,SAAU,SAAQ,WAAW;gBAC5B,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,SAAuC;CAI3E;AAID,qBAAa,WAAY,SAAQ,WAAW;gBAC9B,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,SAAqC;CAIzE;AAID,qBAAa,SAAU,SAAQ,WAAW;IACxC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAC;gBAExB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;CAY/E;AAID,qBAAa,oBAAqB,SAAQ,WAAW;IACnD,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,SAA6C;CAKlG;AAID,qBAAa,aAAc,SAAQ,WAAW;IAC5C,SAAgB,KAAK,EAAE,MAAM,CAAC;gBAElB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,SAA0C;CAK7F"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ /** Yukimu v2.0.0 — Error System with Error Codes */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ResolverError = exports.VoiceConnectionError = exports.RestError = exports.PlayerError = exports.NodeError = exports.YukimuError = exports.ErrorCode = void 0;
5
+ // ─── Error Codes ────────────────────────────────────────────────────────────
6
+ var ErrorCode;
7
+ (function (ErrorCode) {
8
+ // General
9
+ ErrorCode["UNKNOWN"] = "UNKNOWN";
10
+ ErrorCode["INVALID_ARGUMENT"] = "INVALID_ARGUMENT";
11
+ // Node errors
12
+ ErrorCode["NODE_NOT_FOUND"] = "NODE_NOT_FOUND";
13
+ ErrorCode["NODE_ALREADY_EXISTS"] = "NODE_ALREADY_EXISTS";
14
+ ErrorCode["NODE_DISCONNECTED"] = "NODE_DISCONNECTED";
15
+ ErrorCode["NODE_MAX_RETRIES"] = "NODE_MAX_RETRIES";
16
+ ErrorCode["NODE_CONNECTION_TIMEOUT"] = "NODE_CONNECTION_TIMEOUT";
17
+ // Player errors
18
+ ErrorCode["PLAYER_NOT_FOUND"] = "PLAYER_NOT_FOUND";
19
+ ErrorCode["PLAYER_ALREADY_EXISTS"] = "PLAYER_ALREADY_EXISTS";
20
+ ErrorCode["PLAYER_NO_TRACK"] = "PLAYER_NO_TRACK";
21
+ ErrorCode["PLAYER_NOT_SEEKABLE"] = "PLAYER_NOT_SEEKABLE";
22
+ ErrorCode["PLAYER_INVALID_VOLUME"] = "PLAYER_INVALID_VOLUME";
23
+ ErrorCode["PLAYER_INVALID_FILTER"] = "PLAYER_INVALID_FILTER";
24
+ // Voice errors
25
+ ErrorCode["VOICE_CONNECTION_TIMEOUT"] = "VOICE_CONNECTION_TIMEOUT";
26
+ ErrorCode["VOICE_CONNECTION_FAILED"] = "VOICE_CONNECTION_FAILED";
27
+ // REST errors
28
+ ErrorCode["REST_ERROR"] = "REST_ERROR";
29
+ ErrorCode["REST_TIMEOUT"] = "REST_TIMEOUT";
30
+ ErrorCode["REST_RATE_LIMITED"] = "REST_RATE_LIMITED";
31
+ // Resolver errors
32
+ ErrorCode["RESOLVER_NO_NODE"] = "RESOLVER_NO_NODE";
33
+ ErrorCode["RESOLVER_LOAD_FAILED"] = "RESOLVER_LOAD_FAILED";
34
+ ErrorCode["RESOLVER_SPOTIFY_ERROR"] = "RESOLVER_SPOTIFY_ERROR";
35
+ // Plugin errors
36
+ ErrorCode["PLUGIN_ALREADY_LOADED"] = "PLUGIN_ALREADY_LOADED";
37
+ ErrorCode["PLUGIN_NOT_FOUND"] = "PLUGIN_NOT_FOUND";
38
+ })(ErrorCode || (exports.ErrorCode = ErrorCode = {}));
39
+ // ─── Base Error ─────────────────────────────────────────────────────────────
40
+ class YukimuError extends Error {
41
+ code;
42
+ constructor(message, code = ErrorCode.UNKNOWN) {
43
+ super(message);
44
+ this.name = "YukimuError";
45
+ this.code = code;
46
+ // Maintain proper stack trace in V8
47
+ if (Error.captureStackTrace) {
48
+ Error.captureStackTrace(this, this.constructor);
49
+ }
50
+ }
51
+ }
52
+ exports.YukimuError = YukimuError;
53
+ // ─── Node Error ─────────────────────────────────────────────────────────────
54
+ class NodeError extends YukimuError {
55
+ constructor(message, code = ErrorCode.NODE_DISCONNECTED) {
56
+ super(message, code);
57
+ this.name = "NodeError";
58
+ }
59
+ }
60
+ exports.NodeError = NodeError;
61
+ // ─── Player Error ───────────────────────────────────────────────────────────
62
+ class PlayerError extends YukimuError {
63
+ constructor(message, code = ErrorCode.PLAYER_NO_TRACK) {
64
+ super(message, code);
65
+ this.name = "PlayerError";
66
+ }
67
+ }
68
+ exports.PlayerError = PlayerError;
69
+ // ─── REST Error ─────────────────────────────────────────────────────────────
70
+ class RestError extends YukimuError {
71
+ status;
72
+ path;
73
+ retryAfter;
74
+ constructor(message, status, path, retryAfter) {
75
+ super(message, status === 408 ? ErrorCode.REST_TIMEOUT
76
+ : status === 429 ? ErrorCode.REST_RATE_LIMITED
77
+ : ErrorCode.REST_ERROR);
78
+ this.name = "RestError";
79
+ this.status = status;
80
+ this.path = path;
81
+ this.retryAfter = retryAfter;
82
+ }
83
+ }
84
+ exports.RestError = RestError;
85
+ // ─── Voice Connection Error ─────────────────────────────────────────────────
86
+ class VoiceConnectionError extends YukimuError {
87
+ guildId;
88
+ constructor(message, guildId, code = ErrorCode.VOICE_CONNECTION_FAILED) {
89
+ super(message, code);
90
+ this.name = "VoiceConnectionError";
91
+ this.guildId = guildId;
92
+ }
93
+ }
94
+ exports.VoiceConnectionError = VoiceConnectionError;
95
+ // ─── Resolver Error ─────────────────────────────────────────────────────────
96
+ class ResolverError extends YukimuError {
97
+ query;
98
+ constructor(message, query, code = ErrorCode.RESOLVER_LOAD_FAILED) {
99
+ super(message, code);
100
+ this.name = "ResolverError";
101
+ this.query = query;
102
+ }
103
+ }
104
+ exports.ResolverError = ResolverError;
105
+ //# sourceMappingURL=YukimuError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"YukimuError.js","sourceRoot":"","sources":["../../src/errors/YukimuError.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /** Yukimu v2.0.0 — Public API Exports */
2
+ export { Yukimu } from "./Yukimu";
3
+ export { Node } from "./Node";
4
+ export { Player } from "./Player";
5
+ export { Queue } from "./Queue";
6
+ export { Rest } from "./Rest";
7
+ export { Resolver } from "./Resolver";
8
+ export { ConnectionPool, VoiceConnectionState } from "./ConnectionPool";
9
+ export type { VoiceConnection } from "./ConnectionPool";
10
+ export { TrackCache } from "./TrackCache";
11
+ export { WsQueue } from "./WsQueue";
12
+ export { Plugin } from "./Plugin";
13
+ export { Logger } from "./Logger";
14
+ export { BitrateOptimizer } from "./BitrateOptimizer";
15
+ export { Connector } from "./connector/Connector";
16
+ export { DiscordJS } from "./connector/DiscordJS";
17
+ export { Eris } from "./connector/Eris";
18
+ export { Oceanic } from "./connector/Oceanic";
19
+ export { PlayerMoved } from "./plugins/PlayerMoved";
20
+ export type { PlayerMovedOptions } from "./plugins/PlayerMoved";
21
+ export { AutoResume } from "./plugins/AutoResume";
22
+ export { AutoplayPlugin } from "./plugins/AutoplayPlugin";
23
+ export type { AutoplayStrategy, AutoplayOptions } from "./plugins/AutoplayPlugin";
24
+ export { InactivityPlugin } from "./plugins/InactivityPlugin";
25
+ export type { InactivityOptions } from "./plugins/InactivityPlugin";
26
+ export { YukimuError, NodeError, PlayerError, RestError, VoiceConnectionError, ResolverError, ErrorCode, } from "./errors/YukimuError";
27
+ export { VERSION, CLIENT_NAME, State, PlayerState, SOURCE_PREFIXES, URL_PATTERNS, STOPPED_REASONS, WS_CLOSE_CODES, BITRATE_BY_BOOST_TIER, DEFAULTS, } from "./Constants";
28
+ export type { YukimuOptions, NodeOptions, NodeStats, NodeInfo, PlayerOptions, SpotifyOptions, SearchSource, Track, TrackInfo, SearchResult, LoadType, PlaylistInfo, LavalinkException, VoiceState, FilterOptions, EqualizerBand, KaraokeSettings, TimescaleSettings, TremoloSettings, VibratoSettings, RotationSettings, DistortionSettings, ChannelMixSettings, LowPassSettings, BoostTier, BitrateConfig, LogLevel, YukimuLogger, LoopMode, YukimuEvents, RetryOptions, } from "./types";
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAGzC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGpE,OAAO,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,oBAAoB,EACpB,aAAa,EACb,SAAS,GACV,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,OAAO,EACP,WAAW,EACX,KAAK,EACL,WAAW,EACX,eAAe,EACf,YAAY,EACZ,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,QAAQ,GACT,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,aAAa,EACb,WAAW,EACX,SAAS,EACT,QAAQ,EACR,aAAa,EACb,cAAc,EACd,YAAY,EACZ,KAAK,EACL,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,SAAS,EACT,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,YAAY,GACb,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /** Yukimu v2.0.0 — Public API Exports */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.DEFAULTS = exports.BITRATE_BY_BOOST_TIER = exports.WS_CLOSE_CODES = exports.STOPPED_REASONS = exports.URL_PATTERNS = exports.SOURCE_PREFIXES = exports.PlayerState = exports.State = exports.CLIENT_NAME = exports.VERSION = exports.ErrorCode = exports.ResolverError = exports.VoiceConnectionError = exports.RestError = exports.PlayerError = exports.NodeError = exports.YukimuError = exports.InactivityPlugin = exports.AutoplayPlugin = exports.AutoResume = exports.PlayerMoved = exports.Oceanic = exports.Eris = exports.DiscordJS = exports.Connector = exports.BitrateOptimizer = exports.Logger = exports.Plugin = exports.WsQueue = exports.TrackCache = exports.VoiceConnectionState = exports.ConnectionPool = exports.Resolver = exports.Rest = exports.Queue = exports.Player = exports.Node = exports.Yukimu = void 0;
5
+ // ─── Core Classes ────────────────────────────────────────────────────────────
6
+ var Yukimu_1 = require("./Yukimu");
7
+ Object.defineProperty(exports, "Yukimu", { enumerable: true, get: function () { return Yukimu_1.Yukimu; } });
8
+ var Node_1 = require("./Node");
9
+ Object.defineProperty(exports, "Node", { enumerable: true, get: function () { return Node_1.Node; } });
10
+ var Player_1 = require("./Player");
11
+ Object.defineProperty(exports, "Player", { enumerable: true, get: function () { return Player_1.Player; } });
12
+ var Queue_1 = require("./Queue");
13
+ Object.defineProperty(exports, "Queue", { enumerable: true, get: function () { return Queue_1.Queue; } });
14
+ var Rest_1 = require("./Rest");
15
+ Object.defineProperty(exports, "Rest", { enumerable: true, get: function () { return Rest_1.Rest; } });
16
+ var Resolver_1 = require("./Resolver");
17
+ Object.defineProperty(exports, "Resolver", { enumerable: true, get: function () { return Resolver_1.Resolver; } });
18
+ var ConnectionPool_1 = require("./ConnectionPool");
19
+ Object.defineProperty(exports, "ConnectionPool", { enumerable: true, get: function () { return ConnectionPool_1.ConnectionPool; } });
20
+ Object.defineProperty(exports, "VoiceConnectionState", { enumerable: true, get: function () { return ConnectionPool_1.VoiceConnectionState; } });
21
+ var TrackCache_1 = require("./TrackCache");
22
+ Object.defineProperty(exports, "TrackCache", { enumerable: true, get: function () { return TrackCache_1.TrackCache; } });
23
+ var WsQueue_1 = require("./WsQueue");
24
+ Object.defineProperty(exports, "WsQueue", { enumerable: true, get: function () { return WsQueue_1.WsQueue; } });
25
+ var Plugin_1 = require("./Plugin");
26
+ Object.defineProperty(exports, "Plugin", { enumerable: true, get: function () { return Plugin_1.Plugin; } });
27
+ var Logger_1 = require("./Logger");
28
+ Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return Logger_1.Logger; } });
29
+ var BitrateOptimizer_1 = require("./BitrateOptimizer");
30
+ Object.defineProperty(exports, "BitrateOptimizer", { enumerable: true, get: function () { return BitrateOptimizer_1.BitrateOptimizer; } });
31
+ // ─── Connectors ──────────────────────────────────────────────────────────────
32
+ var Connector_1 = require("./connector/Connector");
33
+ Object.defineProperty(exports, "Connector", { enumerable: true, get: function () { return Connector_1.Connector; } });
34
+ var DiscordJS_1 = require("./connector/DiscordJS");
35
+ Object.defineProperty(exports, "DiscordJS", { enumerable: true, get: function () { return DiscordJS_1.DiscordJS; } });
36
+ var Eris_1 = require("./connector/Eris");
37
+ Object.defineProperty(exports, "Eris", { enumerable: true, get: function () { return Eris_1.Eris; } });
38
+ var Oceanic_1 = require("./connector/Oceanic");
39
+ Object.defineProperty(exports, "Oceanic", { enumerable: true, get: function () { return Oceanic_1.Oceanic; } });
40
+ // ─── Plugins ─────────────────────────────────────────────────────────────────
41
+ var PlayerMoved_1 = require("./plugins/PlayerMoved");
42
+ Object.defineProperty(exports, "PlayerMoved", { enumerable: true, get: function () { return PlayerMoved_1.PlayerMoved; } });
43
+ var AutoResume_1 = require("./plugins/AutoResume");
44
+ Object.defineProperty(exports, "AutoResume", { enumerable: true, get: function () { return AutoResume_1.AutoResume; } });
45
+ var AutoplayPlugin_1 = require("./plugins/AutoplayPlugin");
46
+ Object.defineProperty(exports, "AutoplayPlugin", { enumerable: true, get: function () { return AutoplayPlugin_1.AutoplayPlugin; } });
47
+ var InactivityPlugin_1 = require("./plugins/InactivityPlugin");
48
+ Object.defineProperty(exports, "InactivityPlugin", { enumerable: true, get: function () { return InactivityPlugin_1.InactivityPlugin; } });
49
+ // ─── Errors ──────────────────────────────────────────────────────────────────
50
+ var YukimuError_1 = require("./errors/YukimuError");
51
+ Object.defineProperty(exports, "YukimuError", { enumerable: true, get: function () { return YukimuError_1.YukimuError; } });
52
+ Object.defineProperty(exports, "NodeError", { enumerable: true, get: function () { return YukimuError_1.NodeError; } });
53
+ Object.defineProperty(exports, "PlayerError", { enumerable: true, get: function () { return YukimuError_1.PlayerError; } });
54
+ Object.defineProperty(exports, "RestError", { enumerable: true, get: function () { return YukimuError_1.RestError; } });
55
+ Object.defineProperty(exports, "VoiceConnectionError", { enumerable: true, get: function () { return YukimuError_1.VoiceConnectionError; } });
56
+ Object.defineProperty(exports, "ResolverError", { enumerable: true, get: function () { return YukimuError_1.ResolverError; } });
57
+ Object.defineProperty(exports, "ErrorCode", { enumerable: true, get: function () { return YukimuError_1.ErrorCode; } });
58
+ // ─── Constants ───────────────────────────────────────────────────────────────
59
+ var Constants_1 = require("./Constants");
60
+ Object.defineProperty(exports, "VERSION", { enumerable: true, get: function () { return Constants_1.VERSION; } });
61
+ Object.defineProperty(exports, "CLIENT_NAME", { enumerable: true, get: function () { return Constants_1.CLIENT_NAME; } });
62
+ Object.defineProperty(exports, "State", { enumerable: true, get: function () { return Constants_1.State; } });
63
+ Object.defineProperty(exports, "PlayerState", { enumerable: true, get: function () { return Constants_1.PlayerState; } });
64
+ Object.defineProperty(exports, "SOURCE_PREFIXES", { enumerable: true, get: function () { return Constants_1.SOURCE_PREFIXES; } });
65
+ Object.defineProperty(exports, "URL_PATTERNS", { enumerable: true, get: function () { return Constants_1.URL_PATTERNS; } });
66
+ Object.defineProperty(exports, "STOPPED_REASONS", { enumerable: true, get: function () { return Constants_1.STOPPED_REASONS; } });
67
+ Object.defineProperty(exports, "WS_CLOSE_CODES", { enumerable: true, get: function () { return Constants_1.WS_CLOSE_CODES; } });
68
+ Object.defineProperty(exports, "BITRATE_BY_BOOST_TIER", { enumerable: true, get: function () { return Constants_1.BITRATE_BY_BOOST_TIER; } });
69
+ Object.defineProperty(exports, "DEFAULTS", { enumerable: true, get: function () { return Constants_1.DEFAULTS; } });
70
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,yCAAyC;;;AAEzC,gFAAgF;AAChF,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,mDAAwE;AAA/D,gHAAA,cAAc,OAAA;AAAE,sHAAA,oBAAoB,OAAA;AAE7C,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AACnB,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AAEzB,gFAAgF;AAChF,mDAAkD;AAAzC,sGAAA,SAAS,OAAA;AAClB,mDAAkD;AAAzC,sGAAA,SAAS,OAAA;AAClB,yCAAwC;AAA/B,4FAAA,IAAI,OAAA;AACb,+CAA8C;AAArC,kGAAA,OAAO,OAAA;AAEhB,gFAAgF;AAChF,qDAAoD;AAA3C,0GAAA,WAAW,OAAA;AAEpB,mDAAkD;AAAzC,wGAAA,UAAU,OAAA;AACnB,2DAA0D;AAAjD,gHAAA,cAAc,OAAA;AAEvB,+DAA8D;AAArD,oHAAA,gBAAgB,OAAA;AAGzB,gFAAgF;AAChF,oDAQ8B;AAP5B,0GAAA,WAAW,OAAA;AACX,wGAAA,SAAS,OAAA;AACT,0GAAA,WAAW,OAAA;AACX,wGAAA,SAAS,OAAA;AACT,mHAAA,oBAAoB,OAAA;AACpB,4GAAA,aAAa,OAAA;AACb,wGAAA,SAAS,OAAA;AAGX,gFAAgF;AAChF,yCAWqB;AAVnB,oGAAA,OAAO,OAAA;AACP,wGAAA,WAAW,OAAA;AACX,kGAAA,KAAK,OAAA;AACL,wGAAA,WAAW,OAAA;AACX,4GAAA,eAAe,OAAA;AACf,yGAAA,YAAY,OAAA;AACZ,4GAAA,eAAe,OAAA;AACf,2GAAA,cAAc,OAAA;AACd,kHAAA,qBAAqB,OAAA;AACrB,qGAAA,QAAQ,OAAA"}
@@ -0,0 +1,25 @@
1
+ /** Yukimu v2.0.0 — AutoResume Plugin */
2
+ import { Plugin } from "../Plugin";
3
+ import type { Yukimu } from "../Yukimu";
4
+ /**
5
+ * Automatically resumes playback after a Lavalink node reconnects.
6
+ *
7
+ * Improvements from v1:
8
+ * - Saves full queue state, not just current track
9
+ * - Saves filter state
10
+ * - Max snapshot limit to prevent memory growth
11
+ * - Periodic cleanup of stale snapshots
12
+ * - Proper unload() to clean up listeners
13
+ * - Error handling on resume
14
+ */
15
+ export declare class AutoResume extends Plugin {
16
+ readonly name = "AutoResume";
17
+ private states;
18
+ private cleanupInterval?;
19
+ private boundListeners;
20
+ load(manager: Yukimu): void;
21
+ unload(manager: Yukimu): void;
22
+ private saveSnapshot;
23
+ private updatePosition;
24
+ }
25
+ //# sourceMappingURL=AutoResume.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutoResume.d.ts","sourceRoot":"","sources":["../../src/plugins/AutoResume.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAqBxC;;;;;;;;;;GAUG;AACH,qBAAa,UAAW,SAAQ,MAAM;IACpC,SAAgB,IAAI,gBAAgB;IACpC,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,eAAe,CAAC,CAAiC;IACzD,OAAO,CAAC,cAAc,CAAoD;IAEnE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IA2E3B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAcpC,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,cAAc;CAOvB"}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ /** Yukimu v2.0.0 — AutoResume Plugin */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.AutoResume = void 0;
5
+ const Plugin_1 = require("../Plugin");
6
+ const MAX_SNAPSHOTS = 500;
7
+ const SNAPSHOT_STALE_MS = 3_600_000; // 1 hour
8
+ /**
9
+ * Automatically resumes playback after a Lavalink node reconnects.
10
+ *
11
+ * Improvements from v1:
12
+ * - Saves full queue state, not just current track
13
+ * - Saves filter state
14
+ * - Max snapshot limit to prevent memory growth
15
+ * - Periodic cleanup of stale snapshots
16
+ * - Proper unload() to clean up listeners
17
+ * - Error handling on resume
18
+ */
19
+ class AutoResume extends Plugin_1.Plugin {
20
+ name = "AutoResume";
21
+ states = new Map();
22
+ cleanupInterval;
23
+ boundListeners = new Map();
24
+ load(manager) {
25
+ const onTrackStart = (player, _track) => {
26
+ if (!player.queue.current)
27
+ return;
28
+ this.saveSnapshot(player);
29
+ };
30
+ const onNodeReady = async (node) => {
31
+ if (!node.resumed)
32
+ return;
33
+ manager.logger.info(`[AutoResume] Node "${node.options.name}" resumed, restoring players...`);
34
+ for (const [guildId, state] of this.states) {
35
+ const player = manager.players.get(guildId);
36
+ if (!player || player.node !== node || !state.trackEncoded)
37
+ continue;
38
+ try {
39
+ const result = await node.rest.decodeTrack(state.trackEncoded);
40
+ if (result) {
41
+ await player.play(result, { startTime: state.position });
42
+ // Restore queue
43
+ if (state.queueTracks.length > 0) {
44
+ const decoded = await node.rest.decodeTracks(state.queueTracks).catch(() => []);
45
+ if (decoded.length > 0)
46
+ player.queue.add(decoded);
47
+ }
48
+ // Restore volume and filters
49
+ if (state.volume !== 100)
50
+ await player.setVolume(state.volume).catch(() => { });
51
+ if (Object.keys(state.filters).length > 0) {
52
+ await player.setFilters(state.filters).catch(() => { });
53
+ }
54
+ manager.logger.info(`[AutoResume] Restored player for guild ${guildId}`);
55
+ }
56
+ }
57
+ catch (err) {
58
+ manager.logger.warn(`[AutoResume] Failed to restore player for guild ${guildId}: ${err}`);
59
+ }
60
+ }
61
+ };
62
+ const onPlayerDestroy = (player) => {
63
+ this.states.delete(player.guildId);
64
+ };
65
+ const onPlayerUpdate = (player) => {
66
+ if (player.playing && player.queue.current) {
67
+ this.updatePosition(player.guildId, player.position);
68
+ }
69
+ };
70
+ // Store references for cleanup
71
+ this.boundListeners.set("trackStart", onTrackStart);
72
+ this.boundListeners.set("nodeReady", onNodeReady);
73
+ this.boundListeners.set("playerDestroy", onPlayerDestroy);
74
+ this.boundListeners.set("playerUpdate", onPlayerUpdate);
75
+ manager.on("trackStart", onTrackStart);
76
+ manager.on("nodeReady", onNodeReady);
77
+ manager.on("playerDestroy", onPlayerDestroy);
78
+ manager.on("playerUpdate", onPlayerUpdate);
79
+ // Periodic cleanup of stale snapshots
80
+ this.cleanupInterval = setInterval(() => {
81
+ const now = Date.now();
82
+ for (const [guildId, state] of this.states) {
83
+ if (now - state.updatedAt > SNAPSHOT_STALE_MS) {
84
+ this.states.delete(guildId);
85
+ }
86
+ }
87
+ }, 300_000); // Every 5 minutes
88
+ if (this.cleanupInterval.unref) {
89
+ this.cleanupInterval.unref();
90
+ }
91
+ }
92
+ unload(manager) {
93
+ for (const [event, listener] of this.boundListeners) {
94
+ manager.off(event, listener);
95
+ }
96
+ this.boundListeners.clear();
97
+ if (this.cleanupInterval) {
98
+ clearInterval(this.cleanupInterval);
99
+ this.cleanupInterval = undefined;
100
+ }
101
+ this.states.clear();
102
+ }
103
+ saveSnapshot(player) {
104
+ // Enforce max snapshots
105
+ if (this.states.size >= MAX_SNAPSHOTS && !this.states.has(player.guildId)) {
106
+ const oldest = this.states.keys().next().value;
107
+ if (oldest)
108
+ this.states.delete(oldest);
109
+ }
110
+ this.states.set(player.guildId, {
111
+ guildId: player.guildId,
112
+ voiceChannelId: player.voiceChannelId,
113
+ textChannelId: player.textChannelId,
114
+ volume: player.volume,
115
+ loop: player.loop,
116
+ position: player.position,
117
+ trackEncoded: player.queue.current.encoded,
118
+ queueTracks: player.queue.list.map((t) => t.encoded),
119
+ filters: { ...player.filters },
120
+ updatedAt: Date.now(),
121
+ });
122
+ }
123
+ updatePosition(guildId, position) {
124
+ const state = this.states.get(guildId);
125
+ if (state) {
126
+ state.position = position;
127
+ state.updatedAt = Date.now();
128
+ }
129
+ }
130
+ }
131
+ exports.AutoResume = AutoResume;
132
+ //# sourceMappingURL=AutoResume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutoResume.js","sourceRoot":"","sources":["../../src/plugins/AutoResume.ts"],"names":[],"mappings":"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"}