distube 3.0.7 → 3.2.1

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 (107) hide show
  1. package/dist/DisTube.d.ts +133 -65
  2. package/dist/DisTube.d.ts.map +1 -1
  3. package/dist/DisTube.js +161 -103
  4. package/dist/DisTube.js.map +1 -1
  5. package/dist/constant.d.ts +14 -15
  6. package/dist/constant.d.ts.map +1 -1
  7. package/dist/constant.js +14 -15
  8. package/dist/constant.js.map +1 -1
  9. package/dist/core/DisTubeBase.d.ts +3 -4
  10. package/dist/core/DisTubeBase.d.ts.map +1 -1
  11. package/dist/core/DisTubeBase.js +1 -2
  12. package/dist/core/DisTubeBase.js.map +1 -1
  13. package/dist/core/DisTubeHandler.d.ts +37 -25
  14. package/dist/core/DisTubeHandler.d.ts.map +1 -1
  15. package/dist/core/DisTubeHandler.js +72 -68
  16. package/dist/core/DisTubeHandler.js.map +1 -1
  17. package/dist/core/DisTubeOptions.d.ts +1 -2
  18. package/dist/core/DisTubeOptions.d.ts.map +1 -1
  19. package/dist/core/DisTubeOptions.js +64 -58
  20. package/dist/core/DisTubeOptions.js.map +1 -1
  21. package/dist/core/DisTubeStream.d.ts +1 -1
  22. package/dist/core/DisTubeStream.d.ts.map +1 -1
  23. package/dist/core/DisTubeStream.js +0 -1
  24. package/dist/core/DisTubeStream.js.map +1 -1
  25. package/dist/core/index.d.ts +2 -2
  26. package/dist/core/index.d.ts.map +1 -1
  27. package/dist/core/index.js +2 -2
  28. package/dist/core/index.js.map +1 -1
  29. package/dist/core/manager/BaseManager.d.ts +11 -7
  30. package/dist/core/manager/BaseManager.d.ts.map +1 -1
  31. package/dist/core/manager/BaseManager.js +11 -13
  32. package/dist/core/manager/BaseManager.js.map +1 -1
  33. package/dist/core/manager/QueueManager.d.ts +11 -38
  34. package/dist/core/manager/QueueManager.d.ts.map +1 -1
  35. package/dist/core/manager/QueueManager.js +115 -129
  36. package/dist/core/manager/QueueManager.js.map +1 -1
  37. package/dist/core/voice/DJSAdapter.js +4 -7
  38. package/dist/core/voice/DJSAdapter.js.map +1 -1
  39. package/dist/core/voice/DisTubeVoice.d.ts +10 -13
  40. package/dist/core/voice/DisTubeVoice.d.ts.map +1 -1
  41. package/dist/core/voice/DisTubeVoice.js +39 -28
  42. package/dist/core/voice/DisTubeVoice.js.map +1 -1
  43. package/dist/core/voice/DisTubeVoiceManager.d.ts +10 -10
  44. package/dist/core/voice/DisTubeVoiceManager.d.ts.map +1 -1
  45. package/dist/core/voice/DisTubeVoiceManager.js +6 -6
  46. package/dist/core/voice/DisTubeVoiceManager.js.map +1 -1
  47. package/dist/index.d.ts +1 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +2 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/plugin/http.d.ts +5 -3
  52. package/dist/plugin/http.d.ts.map +1 -1
  53. package/dist/plugin/http.js +3 -5
  54. package/dist/plugin/http.js.map +1 -1
  55. package/dist/plugin/https.d.ts +10 -5
  56. package/dist/plugin/https.d.ts.map +1 -1
  57. package/dist/plugin/https.js +6 -9
  58. package/dist/plugin/https.js.map +1 -1
  59. package/dist/plugin/youtube-dl.d.ts +5 -4
  60. package/dist/plugin/youtube-dl.d.ts.map +1 -1
  61. package/dist/plugin/youtube-dl.js +6 -11
  62. package/dist/plugin/youtube-dl.js.map +1 -1
  63. package/dist/struct/CustomPlugin.d.ts +37 -17
  64. package/dist/struct/CustomPlugin.d.ts.map +1 -1
  65. package/dist/struct/CustomPlugin.js +18 -19
  66. package/dist/struct/CustomPlugin.js.map +1 -1
  67. package/dist/struct/DisTubeError.d.ts +4 -3
  68. package/dist/struct/DisTubeError.d.ts.map +1 -1
  69. package/dist/struct/DisTubeError.js +5 -7
  70. package/dist/struct/DisTubeError.js.map +1 -1
  71. package/dist/struct/ExtractorPlugin.d.ts +25 -15
  72. package/dist/struct/ExtractorPlugin.d.ts.map +1 -1
  73. package/dist/struct/ExtractorPlugin.js +14 -16
  74. package/dist/struct/ExtractorPlugin.js.map +1 -1
  75. package/dist/struct/Playlist.d.ts +24 -8
  76. package/dist/struct/Playlist.d.ts.map +1 -1
  77. package/dist/struct/Playlist.js +27 -14
  78. package/dist/struct/Playlist.js.map +1 -1
  79. package/dist/struct/Plugin.d.ts +4 -12
  80. package/dist/struct/Plugin.d.ts.map +1 -1
  81. package/dist/struct/Plugin.js +1 -11
  82. package/dist/struct/Plugin.js.map +1 -1
  83. package/dist/struct/Queue.d.ts +5 -6
  84. package/dist/struct/Queue.d.ts.map +1 -1
  85. package/dist/struct/Queue.js +5 -9
  86. package/dist/struct/Queue.js.map +1 -1
  87. package/dist/struct/SearchResult.d.ts +0 -1
  88. package/dist/struct/SearchResult.d.ts.map +1 -1
  89. package/dist/struct/SearchResult.js +2 -4
  90. package/dist/struct/SearchResult.js.map +1 -1
  91. package/dist/struct/Song.d.ts +26 -10
  92. package/dist/struct/Song.d.ts.map +1 -1
  93. package/dist/struct/Song.js +37 -25
  94. package/dist/struct/Song.js.map +1 -1
  95. package/dist/struct/TaskQueue.d.ts +1 -6
  96. package/dist/struct/TaskQueue.d.ts.map +1 -1
  97. package/dist/struct/TaskQueue.js +13 -7
  98. package/dist/struct/TaskQueue.js.map +1 -1
  99. package/dist/tsconfig.tsbuildinfo +1 -1
  100. package/dist/type.d.ts +12 -12
  101. package/dist/type.d.ts.map +1 -1
  102. package/dist/type.js.map +1 -1
  103. package/dist/util.d.ts +7 -6
  104. package/dist/util.d.ts.map +1 -1
  105. package/dist/util.js +23 -24
  106. package/dist/util.js.map +1 -1
  107. package/package.json +7 -8
@@ -1 +1 @@
1
- {"version":3,"file":"DJSAdapter.js","sourceRoot":"","sources":["../../../src/core/voice/DJSAdapter.ts"],"names":[],"mappings":";;;AAAA,2CAAuC;AAKvC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkD,CAAC;AAC3E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;AAEzC,SAAS,WAAW,CAAC,MAAc;IACjC,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO;IACvC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,sBAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,OAA6C,EAAE,EAAE;;QACrG,MAAA,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,0CAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,sBAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,OAA4C,EAAE,EAAE;;QACnG,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,MAAK,MAAA,MAAM,CAAC,IAAI,0CAAE,EAAE,CAAA,EAAE;YACjF,MAAA,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,0CAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;SAC7D;IACH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,sBAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;;QAC1D,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE;YACV,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE;gBACrC,MAAA,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,0CAAE,OAAO,EAAE,CAAC;aAClC;SACF;QACD,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,aAAa,GAAG,IAAI,GAAG,EAA0B,CAAC;AAExD,SAAS,UAAU,CAAC,KAAU;IAC5B,IAAI,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACnB,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;KAC1C;IACD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACvB,CAAC;AAED,SAAgB,sBAAsB,CAAC,OAAqB;IAC1D,OAAO,OAAO,CAAC,EAAE;QACf,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACxC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5B,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO;YACL,WAAW,CAAC,IAAI;gBACd,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,sBAAS,CAAC,MAAM,CAAC,KAAK,EAAE;oBACzD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC/B,OAAO,IAAI,CAAC;iBACb;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO;gBACL,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3C,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAlBD,wDAkBC","sourcesContent":["import { Constants } from \"discord.js\";\nimport type { Client, Snowflake, VoiceChannel } from \"discord.js\";\nimport type { DiscordGatewayAdapterCreator, DiscordGatewayAdapterLibraryMethods } from \"@discordjs/voice\";\nimport type { GatewayVoiceServerUpdateDispatchData, GatewayVoiceStateUpdateDispatchData } from \"discord-api-types/v9\";\n\nconst adapters = new Map<Snowflake, DiscordGatewayAdapterLibraryMethods>();\nconst trackedClients = new Set<Client>();\n\nfunction trackClient(client: Client) {\n if (trackedClients.has(client)) return;\n trackedClients.add(client);\n client.ws.on(Constants.WSEvents.VOICE_SERVER_UPDATE, (payload: GatewayVoiceServerUpdateDispatchData) => {\n adapters.get(payload.guild_id)?.onVoiceServerUpdate(payload);\n });\n client.ws.on(Constants.WSEvents.VOICE_STATE_UPDATE, (payload: GatewayVoiceStateUpdateDispatchData) => {\n if (payload.guild_id && payload.session_id && payload.user_id === client.user?.id) {\n adapters.get(payload.guild_id)?.onVoiceStateUpdate(payload);\n }\n });\n client.on(Constants.Events.SHARD_DISCONNECT, (_, shardID) => {\n const guilds = trackedShards.get(shardID);\n if (guilds) {\n for (const guildID of guilds.values()) {\n adapters.get(guildID)?.destroy();\n }\n }\n trackedShards.delete(shardID);\n });\n}\n\nconst trackedShards = new Map<number, Set<Snowflake>>();\n\nfunction trackGuild(guild: any) {\n let guilds = trackedShards.get(guild.shardID);\n if (!guilds) {\n guilds = new Set();\n trackedShards.set(guild.shardID, guilds);\n }\n guilds.add(guild.id);\n}\n\nexport function createDiscordJSAdapter(channel: VoiceChannel): DiscordGatewayAdapterCreator {\n return methods => {\n adapters.set(channel.guild.id, methods);\n trackClient(channel.client);\n trackGuild(channel.guild);\n return {\n sendPayload(data) {\n if (channel.guild.shard.status === Constants.Status.READY) {\n channel.guild.shard.send(data);\n return true;\n }\n return false;\n },\n destroy() {\n return adapters.delete(channel.guild.id);\n },\n };\n };\n}\n"]}
1
+ {"version":3,"file":"DJSAdapter.js","sourceRoot":"","sources":["../../../src/core/voice/DJSAdapter.ts"],"names":[],"mappings":";;;AAAA,2CAAuC;AAKvC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkD,CAAC;AAC3E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;AAEzC,SAAS,WAAW,CAAC,MAAc;IACjC,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO;IACvC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,sBAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,OAA6C,EAAE,EAAE;QACrG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,sBAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,OAA4C,EAAE,EAAE;QACnG,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE;YACjF,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;SAC7D;IACH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,sBAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;QAC1D,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE;YACV,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE;gBACrC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;aAClC;SACF;QACD,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,aAAa,GAAG,IAAI,GAAG,EAA0B,CAAC;AAExD,SAAS,UAAU,CAAC,KAAU;IAC5B,IAAI,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACnB,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;KAC1C;IACD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACvB,CAAC;AAED,SAAgB,sBAAsB,CAAC,OAAqB;IAC1D,OAAO,OAAO,CAAC,EAAE;QACf,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACxC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5B,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO;YACL,WAAW,CAAC,IAAI;gBACd,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,sBAAS,CAAC,MAAM,CAAC,KAAK,EAAE;oBACzD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC/B,OAAO,IAAI,CAAC;iBACb;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO;gBACL,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3C,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAlBD,wDAkBC","sourcesContent":["import { Constants } from \"discord.js\";\nimport type { Client, Snowflake, VoiceChannel } from \"discord.js\";\nimport type { DiscordGatewayAdapterCreator, DiscordGatewayAdapterLibraryMethods } from \"@discordjs/voice\";\nimport type { GatewayVoiceServerUpdateDispatchData, GatewayVoiceStateUpdateDispatchData } from \"discord-api-types/v9\";\n\nconst adapters = new Map<Snowflake, DiscordGatewayAdapterLibraryMethods>();\nconst trackedClients = new Set<Client>();\n\nfunction trackClient(client: Client) {\n if (trackedClients.has(client)) return;\n trackedClients.add(client);\n client.ws.on(Constants.WSEvents.VOICE_SERVER_UPDATE, (payload: GatewayVoiceServerUpdateDispatchData) => {\n adapters.get(payload.guild_id)?.onVoiceServerUpdate(payload);\n });\n client.ws.on(Constants.WSEvents.VOICE_STATE_UPDATE, (payload: GatewayVoiceStateUpdateDispatchData) => {\n if (payload.guild_id && payload.session_id && payload.user_id === client.user?.id) {\n adapters.get(payload.guild_id)?.onVoiceStateUpdate(payload);\n }\n });\n client.on(Constants.Events.SHARD_DISCONNECT, (_, shardID) => {\n const guilds = trackedShards.get(shardID);\n if (guilds) {\n for (const guildID of guilds.values()) {\n adapters.get(guildID)?.destroy();\n }\n }\n trackedShards.delete(shardID);\n });\n}\n\nconst trackedShards = new Map<number, Set<Snowflake>>();\n\nfunction trackGuild(guild: any) {\n let guilds = trackedShards.get(guild.shardID);\n if (!guilds) {\n guilds = new Set();\n trackedShards.set(guild.shardID, guilds);\n }\n guilds.add(guild.id);\n}\n\nexport function createDiscordJSAdapter(channel: VoiceChannel): DiscordGatewayAdapterCreator {\n return methods => {\n adapters.set(channel.guild.id, methods);\n trackClient(channel.client);\n trackGuild(channel.guild);\n return {\n sendPayload(data) {\n if (channel.guild.shard.status === Constants.Status.READY) {\n channel.guild.shard.send(data);\n return true;\n }\n return false;\n },\n destroy() {\n return adapters.delete(channel.guild.id);\n },\n };\n };\n}\n"]}
@@ -1,31 +1,29 @@
1
1
  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
- import type { Snowflake, StageChannel, VoiceChannel, VoiceState } from "discord.js";
4
+ import type { Snowflake, VoiceBasedChannel, VoiceState } from "discord.js";
5
5
  /**
6
6
  * Create a voice connection to the voice channel
7
7
  */
8
8
  export declare class DisTubeVoice extends TypedEmitter<DisTubeVoiceEvents> {
9
- id: Snowflake;
10
- voices: DisTubeVoiceManager;
11
- audioPlayer: AudioPlayer;
9
+ #private;
10
+ readonly id: Snowflake;
11
+ readonly voices: DisTubeVoiceManager;
12
+ readonly audioPlayer: AudioPlayer;
12
13
  connection: VoiceConnection;
13
14
  audioResource?: AudioResource;
14
15
  emittedError: boolean;
15
16
  isDisconnected: boolean;
16
- private _channel;
17
- private _volume;
18
- constructor(voiceManager: DisTubeVoiceManager, channel: VoiceChannel | StageChannel);
19
- get channel(): VoiceChannel | StageChannel;
20
- set channel(channel: VoiceChannel | StageChannel);
21
- private _join;
17
+ constructor(voiceManager: DisTubeVoiceManager, channel: VoiceBasedChannel);
18
+ get channel(): VoiceBasedChannel;
19
+ set channel(channel: VoiceBasedChannel);
22
20
  /**
23
21
  * Join a voice channel with this connection
24
- * @param {Discord.VoiceChannel|Discord.StageChannel} [channel] A voice channel
22
+ * @param {Discord.BaseGuildVoiceChannel} [channel] A voice channel
25
23
  * @private
26
24
  * @returns {Promise<DisTubeVoice>}
27
25
  */
28
- join(channel?: VoiceChannel | StageChannel): Promise<DisTubeVoice>;
26
+ join(channel?: VoiceBasedChannel): Promise<DisTubeVoice>;
29
27
  /**
30
28
  * Leave the voice channel of this connection
31
29
  * @param {Error} [error] Optional, an error to emit with 'error' event.
@@ -81,5 +79,4 @@ export declare class DisTubeVoice extends TypedEmitter<DisTubeVoiceEvents> {
81
79
  */
82
80
  get voiceState(): VoiceState | undefined;
83
81
  }
84
- export default DisTubeVoice;
85
82
  //# 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,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEpF;;GAEG;AACH,qBAAa,YAAa,SAAQ,YAAY,CAAC,kBAAkB,CAAC;IAChE,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,EAAE,mBAAmB,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAG,eAAe,CAAC;IAC7B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,EAAG,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,OAAO,CAAS;gBACZ,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY;IAuDnF,IAAI,OAAO,IAGU,YAAY,GAAG,YAAY,CAD/C;IACD,IAAI,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,EAK/C;IACD,OAAO,CAAC,KAAK;IAOb;;;;;OAKG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAiBxE;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK;IASnB;;;;;OAKG;IACH,IAAI,CAAC,KAAK,UAAQ;IAGlB;;;;OAIG;IACH,IAAI,CAAC,MAAM,EAAE,aAAa;IAe1B,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EASxB;IACD,IAAI,MAAM,IAVS,MAAM,CAYxB;IACD;;;OAGG;IACH,IAAI,gBAAgB,WAEnB;IACD,KAAK;IAGL,OAAO;IAGP;;;OAGG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD;;;OAGG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO;IASvC;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO;IASvC;;;OAGG;IACH,IAAI,UAAU,IAAI,UAAU,GAAG,SAAS,CAEvC;CACF;AAED,eAAe,YAAY,CAAC"}
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;AAE3E;;GAEG;AACH,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;IAuDzE,IAAI,OAAO,IAGU,iBAAiB,CADrC;IACD,IAAI,OAAO,CAAC,OAAO,EAAE,iBAAiB,EAOrC;IAQD;;;;;OAKG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IAiB9D;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK;IASnB;;;;;OAKG;IACH,IAAI,CAAC,KAAK,UAAQ;IAGlB;;;;OAIG;IACH,IAAI,CAAC,MAAM,EAAE,aAAa;IAe1B,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EASxB;IACD,IAAI,MAAM,IAVS,MAAM,CAYxB;IACD;;;OAGG;IACH,IAAI,gBAAgB,WAEnB;IACD,KAAK;IAGL,OAAO;IAGP;;;OAGG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD;;;OAGG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IACD;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO;IASvC;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO;IASvC;;;OAGG;IACH,IAAI,UAAU,IAAI,UAAU,GAAG,SAAS,CAEvC;CACF"}
@@ -1,4 +1,16 @@
1
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 __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8
+ if (kind === "m") throw new TypeError("Private method is not writable");
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
11
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
+ };
13
+ var _DisTubeVoice_instances, _DisTubeVoice_channel, _DisTubeVoice_volume, _DisTubeVoice_join;
2
14
  Object.defineProperty(exports, "__esModule", { value: true });
3
15
  exports.DisTubeVoice = void 0;
4
16
  const tiny_typed_emitter_1 = require("tiny-typed-emitter");
@@ -10,15 +22,19 @@ const voice_1 = require("@discordjs/voice");
10
22
  class DisTubeVoice extends tiny_typed_emitter_1.TypedEmitter {
11
23
  constructor(voiceManager, channel) {
12
24
  super();
13
- if (!(0, __1.isSupportedVoiceChannel)(channel))
14
- throw new __1.DisTubeError("NOT_SUPPORTED_VOICE");
25
+ _DisTubeVoice_instances.add(this);
26
+ this.isDisconnected = false;
27
+ _DisTubeVoice_channel.set(this, void 0);
28
+ _DisTubeVoice_volume.set(this, 100);
29
+ if (!(0, __1.isSupportedVoiceChannel)(channel)) {
30
+ throw new __1.DisTubeError("INVALID_TYPE", "BaseGuildVoiceChannel", channel, "channel");
31
+ }
15
32
  if (!channel.joinable) {
16
33
  if (channel.full)
17
34
  throw new __1.DisTubeError("VOICE_FULL");
18
35
  else
19
36
  throw new __1.DisTubeError("VOICE_MISSING_PERMS");
20
37
  }
21
- this.isDisconnected = false;
22
38
  this.id = channel.guild.id;
23
39
  this.channel = channel;
24
40
  /**
@@ -27,7 +43,6 @@ class DisTubeVoice extends tiny_typed_emitter_1.TypedEmitter {
27
43
  */
28
44
  this.voices = voiceManager;
29
45
  this.voices.add(this.id, this);
30
- this._volume = 0.5;
31
46
  this.audioPlayer = (0, voice_1.createAudioPlayer)()
32
47
  .on(voice_1.AudioPlayerStatus.Idle, oldState => {
33
48
  if (oldState.status !== voice_1.AudioPlayerStatus.Idle) {
@@ -70,31 +85,24 @@ class DisTubeVoice extends tiny_typed_emitter_1.TypedEmitter {
70
85
  */
71
86
  }
72
87
  get channel() {
73
- return this._channel;
88
+ return __classPrivateFieldGet(this, _DisTubeVoice_channel, "f");
74
89
  }
75
90
  set channel(channel) {
76
- if (!(0, __1.isSupportedVoiceChannel)(channel))
77
- throw new __1.DisTubeError("NOT_SUPPORTED_VOICE");
91
+ if (!(0, __1.isSupportedVoiceChannel)(channel)) {
92
+ throw new __1.DisTubeError("INVALID_TYPE", "BaseGuildVoiceChannel", channel, "DisTubeVoice#channel");
93
+ }
78
94
  if (channel.guild.id !== this.id)
79
95
  throw new __1.DisTubeError("VOICE_CHANGE_GUILD");
80
- this.connection = this._join(channel);
81
- this._channel = channel;
82
- }
83
- _join(channel) {
84
- return (0, voice_1.joinVoiceChannel)({
85
- channelId: channel.id,
86
- guildId: this.id,
87
- adapterCreator: channel.guild.voiceAdapterCreator || (0, __1.createDiscordJSAdapter)(channel),
88
- });
96
+ this.connection = __classPrivateFieldGet(this, _DisTubeVoice_instances, "m", _DisTubeVoice_join).call(this, channel);
97
+ __classPrivateFieldSet(this, _DisTubeVoice_channel, channel, "f");
89
98
  }
90
99
  /**
91
100
  * Join a voice channel with this connection
92
- * @param {Discord.VoiceChannel|Discord.StageChannel} [channel] A voice channel
101
+ * @param {Discord.BaseGuildVoiceChannel} [channel] A voice channel
93
102
  * @private
94
103
  * @returns {Promise<DisTubeVoice>}
95
104
  */
96
105
  async join(channel) {
97
- var _a;
98
106
  const TIMEOUT = 30e3;
99
107
  if (channel) {
100
108
  this.channel = channel;
@@ -107,7 +115,7 @@ class DisTubeVoice extends tiny_typed_emitter_1.TypedEmitter {
107
115
  this.connection.destroy();
108
116
  }
109
117
  this.voices.delete(this.id);
110
- if ((_a = this.voiceState) === null || _a === void 0 ? void 0 : _a.connection)
118
+ if (this.voiceState?.connection)
111
119
  throw new __1.DisTubeError("VOICE_DEPRECATED_CONNECTION");
112
120
  throw new __1.DisTubeError("VOICE_CONNECT_FAILED", TIMEOUT / 1e3);
113
121
  }
@@ -158,26 +166,24 @@ class DisTubeVoice extends tiny_typed_emitter_1.TypedEmitter {
158
166
  this.audioPlayer.play(this.audioResource);
159
167
  }
160
168
  set volume(volume) {
161
- var _a, _b;
162
169
  if (typeof volume !== "number" || isNaN(volume)) {
163
170
  throw new __1.DisTubeError("INVALID_TYPE", "number", volume, "volume");
164
171
  }
165
172
  if (volume < 0) {
166
173
  throw new __1.DisTubeError("NUMBER_COMPARE", "Volume", "bigger or equal to", 0);
167
174
  }
168
- this._volume = volume;
169
- (_b = (_a = this.audioResource) === null || _a === void 0 ? void 0 : _a.volume) === null || _b === void 0 ? void 0 : _b.setVolume(Math.pow(this._volume / 100, 0.5 / Math.log10(2)));
175
+ __classPrivateFieldSet(this, _DisTubeVoice_volume, volume, "f");
176
+ this.audioResource?.volume?.setVolume(Math.pow(__classPrivateFieldGet(this, _DisTubeVoice_volume, "f") / 100, 0.5 / Math.log10(2)));
170
177
  }
171
178
  get volume() {
172
- return this._volume;
179
+ return __classPrivateFieldGet(this, _DisTubeVoice_volume, "f");
173
180
  }
174
181
  /**
175
182
  * Playback duration of the audio resource in seconds
176
183
  * @type {number}
177
184
  */
178
185
  get playbackDuration() {
179
- var _a, _b;
180
- return ((_b = (_a = this.audioResource) === null || _a === void 0 ? void 0 : _a.playbackDuration) !== null && _b !== void 0 ? _b : 0) / 1000;
186
+ return (this.audioResource?.playbackDuration ?? 0) / 1000;
181
187
  }
182
188
  pause() {
183
189
  this.audioPlayer.pause();
@@ -232,10 +238,15 @@ class DisTubeVoice extends tiny_typed_emitter_1.TypedEmitter {
232
238
  * @type {Discord.VoiceState?}
233
239
  */
234
240
  get voiceState() {
235
- var _a, _b, _c;
236
- return (_c = (_b = (_a = this.channel) === null || _a === void 0 ? void 0 : _a.guild) === null || _b === void 0 ? void 0 : _b.me) === null || _c === void 0 ? void 0 : _c.voice;
241
+ return this.channel?.guild?.me?.voice;
237
242
  }
238
243
  }
239
244
  exports.DisTubeVoice = DisTubeVoice;
240
- exports.default = DisTubeVoice;
245
+ _DisTubeVoice_channel = new WeakMap(), _DisTubeVoice_volume = new WeakMap(), _DisTubeVoice_instances = new WeakSet(), _DisTubeVoice_join = function _DisTubeVoice_join(channel) {
246
+ return (0, voice_1.joinVoiceChannel)({
247
+ channelId: channel.id,
248
+ guildId: this.id,
249
+ adapterCreator: channel.guild.voiceAdapterCreator || (0, __1.createDiscordJSAdapter)(channel),
250
+ });
251
+ };
241
252
  //# sourceMappingURL=DisTubeVoice.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DisTubeVoice.js","sourceRoot":"","sources":["../../../src/core/voice/DisTubeVoice.ts"],"names":[],"mappings":"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","sourcesContent":["import { TypedEmitter } from \"tiny-typed-emitter\";\nimport { DisTubeError, createDiscordJSAdapter, entersState, isSupportedVoiceChannel } from \"../..\";\nimport {\n AudioPlayerStatus,\n VoiceConnectionDisconnectReason,\n VoiceConnectionStatus,\n createAudioPlayer,\n createAudioResource,\n joinVoiceChannel,\n} from \"@discordjs/voice\";\nimport type { DisTubeStream, DisTubeVoiceEvents, DisTubeVoiceManager } from \"../..\";\nimport type { AudioPlayer, AudioResource, VoiceConnection } from \"@discordjs/voice\";\nimport type { Snowflake, StageChannel, VoiceChannel, VoiceState } from \"discord.js\";\n\n/**\n * Create a voice connection to the voice channel\n */\nexport class DisTubeVoice extends TypedEmitter<DisTubeVoiceEvents> {\n id: Snowflake;\n voices: DisTubeVoiceManager;\n audioPlayer: AudioPlayer;\n connection!: VoiceConnection;\n audioResource?: AudioResource;\n emittedError!: boolean;\n isDisconnected: boolean;\n private _channel!: VoiceChannel | StageChannel;\n private _volume: number;\n constructor(voiceManager: DisTubeVoiceManager, channel: VoiceChannel | StageChannel) {\n super();\n if (!isSupportedVoiceChannel(channel)) throw new DisTubeError(\"NOT_SUPPORTED_VOICE\");\n if (!channel.joinable) {\n if (channel.full) throw new DisTubeError(\"VOICE_FULL\");\n else throw new DisTubeError(\"VOICE_MISSING_PERMS\");\n }\n this.isDisconnected = false;\n this.id = channel.guild.id;\n this.channel = channel;\n /**\n * The voice manager that instantiated this connection\n * @type {DisTubeVoiceManager}\n */\n this.voices = voiceManager;\n this.voices.add(this.id, this);\n this._volume = 0.5;\n this.audioPlayer = createAudioPlayer()\n .on(AudioPlayerStatus.Idle, oldState => {\n if (oldState.status !== AudioPlayerStatus.Idle) {\n delete this.audioResource;\n this.emit(\"finish\");\n }\n })\n .on(\"error\", error => {\n if (this.emittedError) return;\n this.emittedError = true;\n this.emit(\"error\", error);\n });\n this.connection\n .on(VoiceConnectionStatus.Disconnected, (_, newState) => {\n if (newState.reason === VoiceConnectionDisconnectReason.WebSocketClose && newState.closeCode === 4014) {\n entersState(this.connection, VoiceConnectionStatus.Connecting, 5e3).catch(() => {\n this.leave();\n });\n } else if (this.connection.rejoinAttempts < 5) {\n setTimeout(() => {\n this.connection.rejoin();\n }, (this.connection.rejoinAttempts + 1) * 5e3).unref();\n } else if (this.connection.state.status !== VoiceConnectionStatus.Destroyed) {\n this.leave(new DisTubeError(\"VOICE_RECONNECT_FAILED\"));\n }\n })\n .on(VoiceConnectionStatus.Destroyed, () => {\n this.leave();\n })\n // eslint-disable-next-line no-console\n .on(\"error\", console.warn);\n this.connection.subscribe(this.audioPlayer);\n /**\n * Get or set the volume percentage\n * @name DisTubeVoice#volume\n * @type {number}\n */\n }\n get channel() {\n return this._channel;\n }\n set channel(channel: VoiceChannel | StageChannel) {\n if (!isSupportedVoiceChannel(channel)) throw new DisTubeError(\"NOT_SUPPORTED_VOICE\");\n if (channel.guild.id !== this.id) throw new DisTubeError(\"VOICE_CHANGE_GUILD\");\n this.connection = this._join(channel);\n this._channel = channel;\n }\n private _join(channel: VoiceChannel | StageChannel) {\n return joinVoiceChannel({\n channelId: channel.id,\n guildId: this.id,\n adapterCreator: (channel.guild.voiceAdapterCreator as any) || createDiscordJSAdapter(channel as any),\n });\n }\n /**\n * Join a voice channel with this connection\n * @param {Discord.VoiceChannel|Discord.StageChannel} [channel] A voice channel\n * @private\n * @returns {Promise<DisTubeVoice>}\n */\n async join(channel?: VoiceChannel | StageChannel): Promise<DisTubeVoice> {\n const TIMEOUT = 30e3;\n if (channel) {\n this.channel = channel;\n }\n try {\n await entersState(this.connection, VoiceConnectionStatus.Ready, TIMEOUT);\n } catch {\n if (this.connection.state.status !== VoiceConnectionStatus.Destroyed) {\n this.connection.destroy();\n }\n this.voices.delete(this.id);\n if ((this.voiceState as any)?.connection) throw new DisTubeError(\"VOICE_DEPRECATED_CONNECTION\");\n throw new DisTubeError(\"VOICE_CONNECT_FAILED\", TIMEOUT / 1e3);\n }\n return this;\n }\n /**\n * Leave the voice channel of this connection\n * @param {Error} [error] Optional, an error to emit with 'error' event.\n */\n leave(error?: Error) {\n this.stop(true);\n if (!this.isDisconnected) {\n this.emit(\"disconnect\", error);\n this.isDisconnected = true;\n }\n if (this.connection.state.status !== VoiceConnectionStatus.Destroyed) this.connection.destroy();\n this.voices.delete(this.id);\n }\n /**\n * Stop the playing stream\n * @param {boolean} [force=false] If true, will force the {@link DisTubeVoice#audioPlayer} to enter the Idle state\n * even if the {@link DisTubeVoice#audioResource} has silence padding frames.\n * @private\n */\n stop(force = false) {\n this.audioPlayer.stop(force);\n }\n /**\n * Play a readable stream\n * @private\n * @param {DisTubeStream} stream Readable stream\n */\n play(stream: DisTubeStream) {\n this.emittedError = false;\n stream.stream.on(\"error\", (error: NodeJS.ErrnoException) => {\n if (this.emittedError || error.code === \"ERR_STREAM_PREMATURE_CLOSE\") return;\n this.emittedError = true;\n this.emit(\"error\", error);\n });\n this.audioResource = createAudioResource(stream.stream, {\n inputType: stream.type,\n inlineVolume: true,\n });\n // eslint-disable-next-line no-self-assign\n this.volume = this.volume;\n this.audioPlayer.play(this.audioResource);\n }\n set volume(volume: number) {\n if (typeof volume !== \"number\" || isNaN(volume)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"number\", volume, \"volume\");\n }\n if (volume < 0) {\n throw new DisTubeError(\"NUMBER_COMPARE\", \"Volume\", \"bigger or equal to\", 0);\n }\n this._volume = volume;\n this.audioResource?.volume?.setVolume(Math.pow(this._volume / 100, 0.5 / Math.log10(2)));\n }\n get volume() {\n return this._volume;\n }\n /**\n * Playback duration of the audio resource in seconds\n * @type {number}\n */\n get playbackDuration() {\n return (this.audioResource?.playbackDuration ?? 0) / 1000;\n }\n pause() {\n this.audioPlayer.pause();\n }\n unpause() {\n this.audioPlayer.unpause();\n }\n /**\n * Whether the bot is self-deafened\n * @type {boolean}\n */\n get selfDeaf(): boolean {\n return this.connection.joinConfig.selfDeaf;\n }\n /**\n * Whether the bot is self-muted\n * @type {boolean}\n */\n get selfMute(): boolean {\n return this.connection.joinConfig.selfMute;\n }\n /**\n * Self-deafens/undeafens the bot.\n * @param {boolean} selfDeaf Whether or not the bot should be self-deafened\n * @returns {boolean} true if the voice state was successfully updated, otherwise false\n */\n setSelfDeaf(selfDeaf: boolean): boolean {\n if (typeof selfDeaf !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", selfDeaf, \"selfDeaf\");\n }\n return this.connection.rejoin({\n ...this.connection.joinConfig,\n selfDeaf,\n });\n }\n /**\n * Self-mutes/unmutes the bot.\n * @param {boolean} selfMute Whether or not the bot should be self-muted\n * @returns {boolean} true if the voice state was successfully updated, otherwise false\n */\n setSelfMute(selfMute: boolean): boolean {\n if (typeof selfMute !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", selfMute, \"selfMute\");\n }\n return this.connection.rejoin({\n ...this.connection.joinConfig,\n selfMute,\n });\n }\n /**\n * The voice state of this connection\n * @type {Discord.VoiceState?}\n */\n get voiceState(): VoiceState | undefined {\n return this.channel?.guild?.me?.voice;\n }\n}\n\nexport default DisTubeVoice;\n"]}
1
+ {"version":3,"file":"DisTubeVoice.js","sourceRoot":"","sources":["../../../src/core/voice/DisTubeVoice.ts"],"names":[],"mappings":"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","sourcesContent":["import { TypedEmitter } from \"tiny-typed-emitter\";\nimport { DisTubeError, createDiscordJSAdapter, entersState, isSupportedVoiceChannel } from \"../..\";\nimport {\n AudioPlayerStatus,\n VoiceConnectionDisconnectReason,\n VoiceConnectionStatus,\n createAudioPlayer,\n createAudioResource,\n joinVoiceChannel,\n} from \"@discordjs/voice\";\nimport type { DisTubeStream, DisTubeVoiceEvents, DisTubeVoiceManager } from \"../..\";\nimport type { AudioPlayer, AudioResource, VoiceConnection } from \"@discordjs/voice\";\nimport type { Snowflake, VoiceBasedChannel, VoiceState } from \"discord.js\";\n\n/**\n * Create a voice connection to the voice channel\n */\nexport class DisTubeVoice extends TypedEmitter<DisTubeVoiceEvents> {\n readonly id: Snowflake;\n readonly voices: DisTubeVoiceManager;\n readonly audioPlayer: AudioPlayer;\n connection!: VoiceConnection;\n audioResource?: AudioResource;\n emittedError!: boolean;\n isDisconnected = false;\n #channel!: VoiceBasedChannel;\n #volume = 100;\n constructor(voiceManager: DisTubeVoiceManager, channel: VoiceBasedChannel) {\n super();\n if (!isSupportedVoiceChannel(channel)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"BaseGuildVoiceChannel\", channel, \"channel\");\n }\n if (!channel.joinable) {\n if (channel.full) throw new DisTubeError(\"VOICE_FULL\");\n else throw new DisTubeError(\"VOICE_MISSING_PERMS\");\n }\n this.id = channel.guild.id;\n this.channel = channel;\n /**\n * The voice manager that instantiated this connection\n * @type {DisTubeVoiceManager}\n */\n this.voices = voiceManager;\n this.voices.add(this.id, this);\n this.audioPlayer = createAudioPlayer()\n .on(AudioPlayerStatus.Idle, oldState => {\n if (oldState.status !== AudioPlayerStatus.Idle) {\n delete this.audioResource;\n this.emit(\"finish\");\n }\n })\n .on(\"error\", error => {\n if (this.emittedError) return;\n this.emittedError = true;\n this.emit(\"error\", error);\n });\n this.connection\n .on(VoiceConnectionStatus.Disconnected, (_, newState) => {\n if (newState.reason === VoiceConnectionDisconnectReason.WebSocketClose && newState.closeCode === 4014) {\n entersState(this.connection, VoiceConnectionStatus.Connecting, 5e3).catch(() => {\n this.leave();\n });\n } else if (this.connection.rejoinAttempts < 5) {\n setTimeout(() => {\n this.connection.rejoin();\n }, (this.connection.rejoinAttempts + 1) * 5e3).unref();\n } else if (this.connection.state.status !== VoiceConnectionStatus.Destroyed) {\n this.leave(new DisTubeError(\"VOICE_RECONNECT_FAILED\"));\n }\n })\n .on(VoiceConnectionStatus.Destroyed, () => {\n this.leave();\n })\n // eslint-disable-next-line no-console\n .on(\"error\", console.warn);\n this.connection.subscribe(this.audioPlayer);\n /**\n * Get or set the volume percentage\n * @name DisTubeVoice#volume\n * @type {number}\n */\n }\n get channel() {\n return this.#channel;\n }\n set channel(channel: VoiceBasedChannel) {\n if (!isSupportedVoiceChannel(channel)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"BaseGuildVoiceChannel\", channel, \"DisTubeVoice#channel\");\n }\n if (channel.guild.id !== this.id) throw new DisTubeError(\"VOICE_CHANGE_GUILD\");\n this.connection = this.#join(channel);\n this.#channel = channel;\n }\n #join(channel: VoiceBasedChannel) {\n return joinVoiceChannel({\n channelId: channel.id,\n guildId: this.id,\n adapterCreator: (channel.guild.voiceAdapterCreator as any) || createDiscordJSAdapter(channel as any),\n });\n }\n /**\n * Join a voice channel with this connection\n * @param {Discord.BaseGuildVoiceChannel} [channel] A voice channel\n * @private\n * @returns {Promise<DisTubeVoice>}\n */\n async join(channel?: VoiceBasedChannel): Promise<DisTubeVoice> {\n const TIMEOUT = 30e3;\n if (channel) {\n this.channel = channel;\n }\n try {\n await entersState(this.connection, VoiceConnectionStatus.Ready, TIMEOUT);\n } catch {\n if (this.connection.state.status !== VoiceConnectionStatus.Destroyed) {\n this.connection.destroy();\n }\n this.voices.delete(this.id);\n if ((this.voiceState as any)?.connection) throw new DisTubeError(\"VOICE_DEPRECATED_CONNECTION\");\n throw new DisTubeError(\"VOICE_CONNECT_FAILED\", TIMEOUT / 1e3);\n }\n return this;\n }\n /**\n * Leave the voice channel of this connection\n * @param {Error} [error] Optional, an error to emit with 'error' event.\n */\n leave(error?: Error) {\n this.stop(true);\n if (!this.isDisconnected) {\n this.emit(\"disconnect\", error);\n this.isDisconnected = true;\n }\n if (this.connection.state.status !== VoiceConnectionStatus.Destroyed) this.connection.destroy();\n this.voices.delete(this.id);\n }\n /**\n * Stop the playing stream\n * @param {boolean} [force=false] If true, will force the {@link DisTubeVoice#audioPlayer} to enter the Idle state\n * even if the {@link DisTubeVoice#audioResource} has silence padding frames.\n * @private\n */\n stop(force = false) {\n this.audioPlayer.stop(force);\n }\n /**\n * Play a readable stream\n * @private\n * @param {DisTubeStream} stream Readable stream\n */\n play(stream: DisTubeStream) {\n this.emittedError = false;\n stream.stream.on(\"error\", (error: NodeJS.ErrnoException) => {\n if (this.emittedError || error.code === \"ERR_STREAM_PREMATURE_CLOSE\") return;\n this.emittedError = true;\n this.emit(\"error\", error);\n });\n this.audioResource = createAudioResource(stream.stream, {\n inputType: stream.type,\n inlineVolume: true,\n });\n // eslint-disable-next-line no-self-assign\n this.volume = this.volume;\n this.audioPlayer.play(this.audioResource);\n }\n set volume(volume: number) {\n if (typeof volume !== \"number\" || isNaN(volume)) {\n throw new DisTubeError(\"INVALID_TYPE\", \"number\", volume, \"volume\");\n }\n if (volume < 0) {\n throw new DisTubeError(\"NUMBER_COMPARE\", \"Volume\", \"bigger or equal to\", 0);\n }\n this.#volume = volume;\n this.audioResource?.volume?.setVolume(Math.pow(this.#volume / 100, 0.5 / Math.log10(2)));\n }\n get volume() {\n return this.#volume;\n }\n /**\n * Playback duration of the audio resource in seconds\n * @type {number}\n */\n get playbackDuration() {\n return (this.audioResource?.playbackDuration ?? 0) / 1000;\n }\n pause() {\n this.audioPlayer.pause();\n }\n unpause() {\n this.audioPlayer.unpause();\n }\n /**\n * Whether the bot is self-deafened\n * @type {boolean}\n */\n get selfDeaf(): boolean {\n return this.connection.joinConfig.selfDeaf;\n }\n /**\n * Whether the bot is self-muted\n * @type {boolean}\n */\n get selfMute(): boolean {\n return this.connection.joinConfig.selfMute;\n }\n /**\n * Self-deafens/undeafens the bot.\n * @param {boolean} selfDeaf Whether or not the bot should be self-deafened\n * @returns {boolean} true if the voice state was successfully updated, otherwise false\n */\n setSelfDeaf(selfDeaf: boolean): boolean {\n if (typeof selfDeaf !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", selfDeaf, \"selfDeaf\");\n }\n return this.connection.rejoin({\n ...this.connection.joinConfig,\n selfDeaf,\n });\n }\n /**\n * Self-mutes/unmutes the bot.\n * @param {boolean} selfMute Whether or not the bot should be self-muted\n * @returns {boolean} true if the voice state was successfully updated, otherwise false\n */\n setSelfMute(selfMute: boolean): boolean {\n if (typeof selfMute !== \"boolean\") {\n throw new DisTubeError(\"INVALID_TYPE\", \"boolean\", selfMute, \"selfMute\");\n }\n return this.connection.rejoin({\n ...this.connection.joinConfig,\n selfMute,\n });\n }\n /**\n * The voice state of this connection\n * @type {Discord.VoiceState?}\n */\n get voiceState(): VoiceState | undefined {\n return this.channel?.guild?.me?.voice;\n }\n}\n"]}
@@ -1,16 +1,17 @@
1
1
  import { DisTubeVoice } from ".";
2
2
  import { BaseManager } from "../manager";
3
- import type { GuildIDResolvable } from "../..";
4
- import type { StageChannel, VoiceChannel } from "discord.js";
3
+ import type { GuildIdResolvable } from "../..";
4
+ import type { VoiceBasedChannel } from "discord.js";
5
5
  /**
6
6
  * Manages voice connections for {@link DisTube}
7
+ * @extends BaseManager
7
8
  */
8
9
  export declare class DisTubeVoiceManager extends BaseManager<DisTubeVoice> {
9
10
  /**
10
11
  * Get a {@link DisTubeVoice}.
11
12
  * @method get
12
13
  * @memberof DisTubeVoiceManager#
13
- * @param {GuildIDResolvable} queue The queue resolvable to resolve
14
+ * @param {GuildIdResolvable} queue The queue resolvable to resolve
14
15
  * @returns {DisTubeVoice?}
15
16
  */
16
17
  /**
@@ -20,22 +21,21 @@ export declare class DisTubeVoiceManager extends BaseManager<DisTubeVoice> {
20
21
  */
21
22
  /**
22
23
  * Create a {@link DisTubeVoice}
23
- * @param {Discord.VoiceChannel|Discord.StageChannel} channel A voice channel to join
24
+ * @param {Discord.BaseGuildVoiceChannel} channel A voice channel to join
24
25
  * @returns {DisTubeVoice}
25
26
  * @private
26
27
  */
27
- create(channel: VoiceChannel | StageChannel): DisTubeVoice;
28
+ create(channel: VoiceBasedChannel): DisTubeVoice;
28
29
  /**
29
30
  * Join a voice channel
30
- * @param {Discord.VoiceChannel|Discord.StageChannel} channel A voice channel to join
31
+ * @param {Discord.BaseGuildVoiceChannel} channel A voice channel to join
31
32
  * @returns {Promise<DisTubeVoice>}
32
33
  */
33
- join(channel: VoiceChannel | StageChannel): Promise<DisTubeVoice>;
34
+ join(channel: VoiceBasedChannel): Promise<DisTubeVoice>;
34
35
  /**
35
36
  * Leave the connected voice channel in a guild
36
- * @param {GuildIDResolvable} guild Queue Resolvable
37
+ * @param {GuildIdResolvable} guild Queue Resolvable
37
38
  */
38
- leave(guild: GuildIDResolvable): void;
39
+ leave(guild: GuildIdResolvable): void;
39
40
  }
40
- export default DisTubeVoiceManager;
41
41
  //# sourceMappingURL=DisTubeVoiceManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DisTubeVoiceManager.d.ts","sourceRoot":"","sources":["../../../src/core/voice/DisTubeVoiceManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE7D;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,WAAW,CAAC,YAAY,CAAC;IAChE;;;;;;OAMG;IACH;;;;OAIG;IACH;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,GAAG,YAAY;IAO1D;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAKjE;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,iBAAiB;CAW/B;AAED,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"DisTubeVoiceManager.d.ts","sourceRoot":"","sources":["../../../src/core/voice/DisTubeVoiceManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,WAAW,CAAC,YAAY,CAAC;IAChE;;;;;;OAMG;IACH;;;;OAIG;IACH;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY;IAOhD;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IAKvD;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,iBAAiB;CAW/B"}
@@ -7,13 +7,14 @@ const manager_1 = require("../manager");
7
7
  const voice_1 = require("@discordjs/voice");
8
8
  /**
9
9
  * Manages voice connections for {@link DisTube}
10
+ * @extends BaseManager
10
11
  */
11
12
  class DisTubeVoiceManager extends manager_1.BaseManager {
12
13
  /**
13
14
  * Get a {@link DisTubeVoice}.
14
15
  * @method get
15
16
  * @memberof DisTubeVoiceManager#
16
- * @param {GuildIDResolvable} queue The queue resolvable to resolve
17
+ * @param {GuildIdResolvable} queue The queue resolvable to resolve
17
18
  * @returns {DisTubeVoice?}
18
19
  */
19
20
  /**
@@ -23,7 +24,7 @@ class DisTubeVoiceManager extends manager_1.BaseManager {
23
24
  */
24
25
  /**
25
26
  * Create a {@link DisTubeVoice}
26
- * @param {Discord.VoiceChannel|Discord.StageChannel} channel A voice channel to join
27
+ * @param {Discord.BaseGuildVoiceChannel} channel A voice channel to join
27
28
  * @returns {DisTubeVoice}
28
29
  * @private
29
30
  */
@@ -36,7 +37,7 @@ class DisTubeVoiceManager extends manager_1.BaseManager {
36
37
  }
37
38
  /**
38
39
  * Join a voice channel
39
- * @param {Discord.VoiceChannel|Discord.StageChannel} channel A voice channel to join
40
+ * @param {Discord.BaseGuildVoiceChannel} channel A voice channel to join
40
41
  * @returns {Promise<DisTubeVoice>}
41
42
  */
42
43
  join(channel) {
@@ -47,7 +48,7 @@ class DisTubeVoiceManager extends manager_1.BaseManager {
47
48
  }
48
49
  /**
49
50
  * Leave the connected voice channel in a guild
50
- * @param {GuildIDResolvable} guild Queue Resolvable
51
+ * @param {GuildIdResolvable} guild Queue Resolvable
51
52
  */
52
53
  leave(guild) {
53
54
  const voice = this.get(guild);
@@ -55,7 +56,7 @@ class DisTubeVoiceManager extends manager_1.BaseManager {
55
56
  voice.leave();
56
57
  }
57
58
  else {
58
- const connection = (0, voice_1.getVoiceConnection)((0, __1.resolveGuildID)(guild));
59
+ const connection = (0, voice_1.getVoiceConnection)((0, __1.resolveGuildId)(guild));
59
60
  if (connection && connection.state.status !== voice_1.VoiceConnectionStatus.Destroyed) {
60
61
  connection.destroy();
61
62
  }
@@ -63,5 +64,4 @@ class DisTubeVoiceManager extends manager_1.BaseManager {
63
64
  }
64
65
  }
65
66
  exports.DisTubeVoiceManager = DisTubeVoiceManager;
66
- exports.default = DisTubeVoiceManager;
67
67
  //# sourceMappingURL=DisTubeVoiceManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DisTubeVoiceManager.js","sourceRoot":"","sources":["../../../src/core/voice/DisTubeVoiceManager.ts"],"names":[],"mappings":";;;AAAA,wBAAiC;AACjC,6BAAuC;AACvC,wCAAyC;AACzC,4CAA6E;AAI7E;;GAEG;AACH,MAAa,mBAAoB,SAAQ,qBAAyB;IAChE;;;;;;OAMG;IACH;;;;OAIG;IACH;;;;;OAKG;IACH,MAAM,CAAC,OAAoC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,QAAQ,EAAE;YACZ,OAAO,QAAQ,CAAC;SACjB;QACD,OAAO,IAAI,eAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IACD;;;;OAIG;IACH,IAAI,CAAC,OAAoC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;IACD;;;OAGG;IACH,KAAK,CAAC,KAAwB;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;SACf;aAAM;YACL,MAAM,UAAU,GAAG,IAAA,0BAAkB,EAAC,IAAA,kBAAc,EAAC,KAAK,CAAC,CAAC,CAAC;YAC7D,IAAI,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,6BAAqB,CAAC,SAAS,EAAE;gBAC7E,UAAU,CAAC,OAAO,EAAE,CAAC;aACtB;SACF;IACH,CAAC;CACF;AAnDD,kDAmDC;AAED,kBAAe,mBAAmB,CAAC","sourcesContent":["import { DisTubeVoice } from \".\";\nimport { resolveGuildID } from \"../..\";\nimport { BaseManager } from \"../manager\";\nimport { VoiceConnectionStatus, getVoiceConnection } from \"@discordjs/voice\";\nimport type { GuildIDResolvable } from \"../..\";\nimport type { StageChannel, VoiceChannel } from \"discord.js\";\n\n/**\n * Manages voice connections for {@link DisTube}\n */\nexport class DisTubeVoiceManager extends BaseManager<DisTubeVoice> {\n /**\n * Get a {@link DisTubeVoice}.\n * @method get\n * @memberof DisTubeVoiceManager#\n * @param {GuildIDResolvable} queue The queue resolvable to resolve\n * @returns {DisTubeVoice?}\n */\n /**\n * Collection of {@link DisTubeVoice}.\n * @name DisTubeVoiceManager#collection\n * @type {Discord.Collection<string, DisTubeVoice>}\n */\n /**\n * Create a {@link DisTubeVoice}\n * @param {Discord.VoiceChannel|Discord.StageChannel} channel A voice channel to join\n * @returns {DisTubeVoice}\n * @private\n */\n create(channel: VoiceChannel | StageChannel): DisTubeVoice {\n const existing = this.get(channel.guild.id);\n if (existing) {\n return existing;\n }\n return new DisTubeVoice(this, channel);\n }\n /**\n * Join a voice channel\n * @param {Discord.VoiceChannel|Discord.StageChannel} channel A voice channel to join\n * @returns {Promise<DisTubeVoice>}\n */\n join(channel: VoiceChannel | StageChannel): Promise<DisTubeVoice> {\n const existing = this.get(channel.guild.id);\n if (existing) return existing.join(channel);\n return this.create(channel).join();\n }\n /**\n * Leave the connected voice channel in a guild\n * @param {GuildIDResolvable} guild Queue Resolvable\n */\n leave(guild: GuildIDResolvable) {\n const voice = this.get(guild);\n if (voice) {\n voice.leave();\n } else {\n const connection = getVoiceConnection(resolveGuildID(guild));\n if (connection && connection.state.status !== VoiceConnectionStatus.Destroyed) {\n connection.destroy();\n }\n }\n }\n}\n\nexport default DisTubeVoiceManager;\n"]}
1
+ {"version":3,"file":"DisTubeVoiceManager.js","sourceRoot":"","sources":["../../../src/core/voice/DisTubeVoiceManager.ts"],"names":[],"mappings":";;;AAAA,wBAAiC;AACjC,6BAAuC;AACvC,wCAAyC;AACzC,4CAA6E;AAI7E;;;GAGG;AACH,MAAa,mBAAoB,SAAQ,qBAAyB;IAChE;;;;;;OAMG;IACH;;;;OAIG;IACH;;;;;OAKG;IACH,MAAM,CAAC,OAA0B;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,QAAQ,EAAE;YACZ,OAAO,QAAQ,CAAC;SACjB;QACD,OAAO,IAAI,eAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IACD;;;;OAIG;IACH,IAAI,CAAC,OAA0B;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;IACD;;;OAGG;IACH,KAAK,CAAC,KAAwB;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,KAAK,EAAE,CAAC;SACf;aAAM;YACL,MAAM,UAAU,GAAG,IAAA,0BAAkB,EAAC,IAAA,kBAAc,EAAC,KAAK,CAAC,CAAC,CAAC;YAC7D,IAAI,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,6BAAqB,CAAC,SAAS,EAAE;gBAC7E,UAAU,CAAC,OAAO,EAAE,CAAC;aACtB;SACF;IACH,CAAC;CACF;AAnDD,kDAmDC","sourcesContent":["import { DisTubeVoice } from \".\";\nimport { resolveGuildId } from \"../..\";\nimport { BaseManager } from \"../manager\";\nimport { VoiceConnectionStatus, getVoiceConnection } from \"@discordjs/voice\";\nimport type { GuildIdResolvable } from \"../..\";\nimport type { VoiceBasedChannel } from \"discord.js\";\n\n/**\n * Manages voice connections for {@link DisTube}\n * @extends BaseManager\n */\nexport class DisTubeVoiceManager extends BaseManager<DisTubeVoice> {\n /**\n * Get a {@link DisTubeVoice}.\n * @method get\n * @memberof DisTubeVoiceManager#\n * @param {GuildIdResolvable} queue The queue resolvable to resolve\n * @returns {DisTubeVoice?}\n */\n /**\n * Collection of {@link DisTubeVoice}.\n * @name DisTubeVoiceManager#collection\n * @type {Discord.Collection<string, DisTubeVoice>}\n */\n /**\n * Create a {@link DisTubeVoice}\n * @param {Discord.BaseGuildVoiceChannel} channel A voice channel to join\n * @returns {DisTubeVoice}\n * @private\n */\n create(channel: VoiceBasedChannel): DisTubeVoice {\n const existing = this.get(channel.guild.id);\n if (existing) {\n return existing;\n }\n return new DisTubeVoice(this, channel);\n }\n /**\n * Join a voice channel\n * @param {Discord.BaseGuildVoiceChannel} channel A voice channel to join\n * @returns {Promise<DisTubeVoice>}\n */\n join(channel: VoiceBasedChannel): Promise<DisTubeVoice> {\n const existing = this.get(channel.guild.id);\n if (existing) return existing.join(channel);\n return this.create(channel).join();\n }\n /**\n * Leave the connected voice channel in a guild\n * @param {GuildIdResolvable} guild Queue Resolvable\n */\n leave(guild: GuildIdResolvable) {\n const voice = this.get(guild);\n if (voice) {\n voice.leave();\n } else {\n const connection = getVoiceConnection(resolveGuildId(guild));\n if (connection && connection.state.status !== VoiceConnectionStatus.Destroyed) {\n connection.destroy();\n }\n }\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -4,5 +4,5 @@ export * from "./struct";
4
4
  export * from "./util";
5
5
  export * from "./core";
6
6
  export * from "./plugin";
7
- export { DisTube, DisTube as default } from "./DisTube";
7
+ export { DisTube, DisTube as default, version } from "./DisTube";
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -10,7 +10,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
10
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.default = exports.DisTube = void 0;
13
+ exports.version = exports.default = exports.DisTube = void 0;
14
14
  __exportStar(require("./type"), exports);
15
15
  __exportStar(require("./constant"), exports);
16
16
  __exportStar(require("./struct"), exports);
@@ -20,4 +20,5 @@ __exportStar(require("./plugin"), exports);
20
20
  var DisTube_1 = require("./DisTube");
21
21
  Object.defineProperty(exports, "DisTube", { enumerable: true, get: function () { return DisTube_1.DisTube; } });
22
22
  Object.defineProperty(exports, "default", { enumerable: true, get: function () { return DisTube_1.DisTube; } });
23
+ Object.defineProperty(exports, "version", { enumerable: true, get: function () { return DisTube_1.version; } });
23
24
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,yCAAuB;AACvB,6CAA2B;AAC3B,2CAAyB;AACzB,yCAAuB;AACvB,yCAAuB;AACvB,2CAAyB;AACzB,qCAAwD;AAA/C,kGAAA,OAAO,OAAA;AAAE,kGAAA,OAAO,OAAW","sourcesContent":["export * from \"./type\";\nexport * from \"./constant\";\nexport * from \"./struct\";\nexport * from \"./util\";\nexport * from \"./core\";\nexport * from \"./plugin\";\nexport { DisTube, DisTube as default } from \"./DisTube\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,yCAAuB;AACvB,6CAA2B;AAC3B,2CAAyB;AACzB,yCAAuB;AACvB,yCAAuB;AACvB,2CAAyB;AACzB,qCAAiE;AAAxD,kGAAA,OAAO,OAAA;AAAE,kGAAA,OAAO,OAAW;AAAE,kGAAA,OAAO,OAAA","sourcesContent":["export * from \"./type\";\nexport * from \"./constant\";\nexport * from \"./struct\";\nexport * from \"./util\";\nexport * from \"./core\";\nexport * from \"./plugin\";\nexport { DisTube, DisTube as default, version } from \"./DisTube\";\n"]}
@@ -1,8 +1,10 @@
1
- import ExtractorPlugin from "../struct/ExtractorPlugin";
1
+ import { ExtractorPlugin } from "..";
2
2
  import type { GuildMember } from "discord.js";
3
3
  export declare class HTTPPlugin extends ExtractorPlugin {
4
4
  validate(url: string): Promise<boolean>;
5
- resolve(url: string, member: GuildMember): Promise<import("..").Song>;
5
+ resolve(url: string, options?: {
6
+ member?: GuildMember;
7
+ metadata?: any;
8
+ }): Promise<import("..").Song<any>>;
6
9
  }
7
- export default HTTPPlugin;
8
10
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/plugin/http.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,MAAM,2BAA2B,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,qBAAa,UAAW,SAAQ,eAAe;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAIpB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;CAG/C;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/plugin/http.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAqC,MAAM,IAAI,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,qBAAa,UAAW,SAAQ,eAAe;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAIpB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,EAAE,GAAG,CAAA;KAAO;CAGlF"}
@@ -5,16 +5,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.HTTPPlugin = void 0;
7
7
  const http_1 = __importDefault(require("http"));
8
- const ExtractorPlugin_1 = __importDefault(require("../struct/ExtractorPlugin"));
9
8
  const __1 = require("..");
10
- class HTTPPlugin extends ExtractorPlugin_1.default {
9
+ class HTTPPlugin extends __1.ExtractorPlugin {
11
10
  async validate(url) {
12
11
  return (0, __1.validateAudioURL)(http_1.default, "http:", url);
13
12
  }
14
- async resolve(url, member) {
15
- return (0, __1.resolveHttpSong)("http", url, member);
13
+ async resolve(url, options = {}) {
14
+ return (0, __1.resolveHttpSong)(url, { ...options, source: "http" });
16
15
  }
17
16
  }
18
17
  exports.HTTPPlugin = HTTPPlugin;
19
- exports.default = HTTPPlugin;
20
18
  //# sourceMappingURL=http.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/plugin/http.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,gFAAwD;AACxD,0BAAuD;AAGvD,MAAa,UAAW,SAAQ,yBAAe;IAC7C,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,OAAO,IAAA,oBAAgB,EAAC,cAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,MAAmB;QAC5C,OAAO,IAAA,mBAAe,EAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;CACF;AARD,gCAQC;AAED,kBAAe,UAAU,CAAC","sourcesContent":["import http from \"http\";\nimport ExtractorPlugin from \"../struct/ExtractorPlugin\";\nimport { resolveHttpSong, validateAudioURL } from \"..\";\nimport type { GuildMember } from \"discord.js\";\n\nexport class HTTPPlugin extends ExtractorPlugin {\n async validate(url: string) {\n return validateAudioURL(http, \"http:\", url);\n }\n\n async resolve(url: string, member: GuildMember) {\n return resolveHttpSong(\"http\", url, member);\n }\n}\n\nexport default HTTPPlugin;\n"]}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/plugin/http.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AACxB,0BAAwE;AAGxE,MAAa,UAAW,SAAQ,mBAAe;IAC7C,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,OAAO,IAAA,oBAAgB,EAAC,cAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,UAAoD,EAAE;QAC/E,OAAO,IAAA,mBAAe,EAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;CACF;AARD,gCAQC","sourcesContent":["import http from \"http\";\nimport { ExtractorPlugin, resolveHttpSong, validateAudioURL } from \"..\";\nimport type { GuildMember } from \"discord.js\";\n\nexport class HTTPPlugin extends ExtractorPlugin {\n async validate(url: string) {\n return validateAudioURL(http, \"http:\", url);\n }\n\n async resolve(url: string, options: { member?: GuildMember; metadata?: any } = {}) {\n return resolveHttpSong(url, { ...options, source: \"http\" });\n }\n}\n"]}
@@ -1,14 +1,19 @@
1
1
  import https from "https";
2
- import ExtractorPlugin from "../struct/ExtractorPlugin";
3
- import { Song } from "..";
2
+ import { ExtractorPlugin, Song } from "..";
4
3
  import type http from "http";
5
4
  import type { GuildMember } from "discord.js";
6
5
  export declare const getResponseHeaders: (httpModule: typeof http | typeof https, url: string) => Promise<http.IncomingHttpHeaders>;
7
6
  export declare const validateAudioURL: (httpModule: typeof http | typeof https, protocol: string, url: string) => Promise<boolean>;
8
- export declare const resolveHttpSong: (source: string, url: string, member: GuildMember) => Promise<Song>;
7
+ export declare const resolveHttpSong: (url: string, options: {
8
+ source: "http" | "https";
9
+ member?: GuildMember;
10
+ metadata?: any;
11
+ }) => Promise<Song<any>>;
9
12
  export declare class HTTPSPlugin extends ExtractorPlugin {
10
13
  validate(url: string): Promise<boolean>;
11
- resolve(url: string, member: GuildMember): Promise<Song>;
14
+ resolve(url: string, options?: {
15
+ member?: GuildMember;
16
+ metadata?: any;
17
+ }): Promise<Song<any>>;
12
18
  }
13
- export default HTTPSPlugin;
14
19
  //# sourceMappingURL=https.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"https.d.ts","sourceRoot":"","sources":["../../src/plugin/https.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,eAAe,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,kBAAkB,eACjB,WAAW,GAAG,YAAY,OACjC,MAAM,KACV,QAAQ,KAAK,mBAAmB,CAQ/B,CAAC;AAEL,eAAO,MAAM,gBAAgB,eAAsB,WAAW,GAAG,YAAY,YAAY,MAAM,OAAO,MAAM,qBAU3G,CAAC;AAGF,eAAO,MAAM,eAAe,WAAkB,MAAM,OAAO,MAAM,UAAU,WAAW,kBAUrF,CAAC;AAEF,qBAAa,WAAY,SAAQ,eAAe;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAIpB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;CAG/C;AAED,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"https.d.ts","sourceRoot":"","sources":["../../src/plugin/https.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,kBAAkB,eACjB,WAAW,GAAG,YAAY,OACjC,MAAM,KACV,QAAQ,KAAK,mBAAmB,CAQ/B,CAAC;AAEL,eAAO,MAAM,gBAAgB,eAAsB,WAAW,GAAG,YAAY,YAAY,MAAM,OAAO,MAAM,qBAU3G,CAAC;AAEF,eAAO,MAAM,eAAe,QACrB,MAAM,WACF;IAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,uBAW5E,CAAC;AAEF,qBAAa,WAAY,SAAQ,eAAe;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAIpB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,QAAQ,CAAC,EAAE,GAAG,CAAA;KAAO;CAGlF"}
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.HTTPSPlugin = exports.resolveHttpSong = exports.validateAudioURL = exports.getResponseHeaders = void 0;
7
7
  const https_1 = __importDefault(require("https"));
8
- const ExtractorPlugin_1 = __importDefault(require("../struct/ExtractorPlugin"));
9
8
  const url_1 = require("url");
10
9
  const __1 = require("..");
11
10
  const getResponseHeaders = async (httpModule, url) => new Promise((resolve, reject) => {
@@ -22,29 +21,27 @@ const validateAudioURL = async (httpModule, protocol, url) => {
22
21
  return false;
23
22
  }
24
23
  const headers = await (0, exports.getResponseHeaders)(httpModule, url), type = headers["content-type"];
25
- if (type === null || type === void 0 ? void 0 : type.startsWith("audio")) {
24
+ if (type?.startsWith("audio")) {
26
25
  return true;
27
26
  }
28
27
  return false;
29
28
  };
30
29
  exports.validateAudioURL = validateAudioURL;
31
- // eslint-disable-next-line @typescript-eslint/require-await
32
- const resolveHttpSong = async (source, url, member) => {
30
+ const resolveHttpSong = async (url, options) => {
33
31
  url = url.replace(/\/+$/, "");
34
32
  return new __1.Song({
35
33
  name: url.substring(url.lastIndexOf("/") + 1).replace(/((\?|#).*)?$/, "") || url,
36
34
  url,
37
- }, member, source);
35
+ }, options);
38
36
  };
39
37
  exports.resolveHttpSong = resolveHttpSong;
40
- class HTTPSPlugin extends ExtractorPlugin_1.default {
38
+ class HTTPSPlugin extends __1.ExtractorPlugin {
41
39
  async validate(url) {
42
40
  return (0, exports.validateAudioURL)(https_1.default, "https:", url);
43
41
  }
44
- async resolve(url, member) {
45
- return (0, exports.resolveHttpSong)("https", url, member);
42
+ async resolve(url, options = {}) {
43
+ return (0, exports.resolveHttpSong)(url, { ...options, source: "https" });
46
44
  }
47
45
  }
48
46
  exports.HTTPSPlugin = HTTPSPlugin;
49
- exports.default = HTTPSPlugin;
50
47
  //# sourceMappingURL=https.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"https.js","sourceRoot":"","sources":["../../src/plugin/https.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,gFAAwD;AACxD,6BAA0B;AAC1B,0BAA0B;AAInB,MAAM,kBAAkB,GAAG,KAAK,EACrC,UAAsC,EACtC,GAAW,EACwB,EAAE,CACrC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9B,UAAU;SACP,GAAG,CAAC,GAAG,CAAC;SACR,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;QACpB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC;SACD,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAXQ,QAAA,kBAAkB,sBAW1B;AAEE,MAAM,gBAAgB,GAAG,KAAK,EAAE,UAAsC,EAAE,QAAgB,EAAE,GAAW,EAAE,EAAE;IAC9G,IAAI,IAAI,SAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;QACpD,OAAO,KAAK,CAAC;KACd;IACD,MAAM,OAAO,GAAG,MAAM,IAAA,0BAAkB,EAAC,UAAU,EAAE,GAAG,CAAC,EACvD,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACjC,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAC,OAAO,CAAC,EAAE;QAC7B,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAVW,QAAA,gBAAgB,oBAU3B;AAEF,4DAA4D;AACrD,MAAM,eAAe,GAAG,KAAK,EAAE,MAAc,EAAE,GAAW,EAAE,MAAmB,EAAE,EAAE;IACxF,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC9B,OAAO,IAAI,QAAI,CACb;QACE,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,IAAI,GAAG;QAChF,GAAG;KACJ,EACD,MAAM,EACN,MAAM,CACP,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,eAAe,mBAU1B;AAEF,MAAa,WAAY,SAAQ,yBAAe;IAC9C,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,OAAO,IAAA,wBAAgB,EAAC,eAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,MAAmB;QAC5C,OAAO,IAAA,uBAAe,EAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;CACF;AARD,kCAQC;AAED,kBAAe,WAAW,CAAC","sourcesContent":["import https from \"https\";\nimport ExtractorPlugin from \"../struct/ExtractorPlugin\";\nimport { URL } from \"url\";\nimport { Song } from \"..\";\nimport type http from \"http\";\nimport type { GuildMember } from \"discord.js\";\n\nexport const getResponseHeaders = async (\n httpModule: typeof http | typeof https,\n url: string,\n): Promise<http.IncomingHttpHeaders> =>\n new Promise((resolve, reject) => {\n httpModule\n .get(url)\n .on(\"response\", res => {\n resolve(res.headers);\n })\n .on(\"error\", reject);\n });\n\nexport const validateAudioURL = async (httpModule: typeof http | typeof https, protocol: string, url: string) => {\n if (new URL(url).protocol.toLowerCase() !== protocol) {\n return false;\n }\n const headers = await getResponseHeaders(httpModule, url),\n type = headers[\"content-type\"];\n if (type?.startsWith(\"audio\")) {\n return true;\n }\n return false;\n};\n\n// eslint-disable-next-line @typescript-eslint/require-await\nexport const resolveHttpSong = async (source: string, url: string, member: GuildMember) => {\n url = url.replace(/\\/+$/, \"\");\n return new Song(\n {\n name: url.substring(url.lastIndexOf(\"/\") + 1).replace(/((\\?|#).*)?$/, \"\") || url,\n url,\n },\n member,\n source,\n );\n};\n\nexport class HTTPSPlugin extends ExtractorPlugin {\n async validate(url: string) {\n return validateAudioURL(https, \"https:\", url);\n }\n\n async resolve(url: string, member: GuildMember) {\n return resolveHttpSong(\"https\", url, member);\n }\n}\n\nexport default HTTPSPlugin;\n"]}
1
+ {"version":3,"file":"https.js","sourceRoot":"","sources":["../../src/plugin/https.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,6BAA0B;AAC1B,0BAA2C;AAIpC,MAAM,kBAAkB,GAAG,KAAK,EACrC,UAAsC,EACtC,GAAW,EACwB,EAAE,CACrC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9B,UAAU;SACP,GAAG,CAAC,GAAG,CAAC;SACR,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;QACpB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC;SACD,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAXQ,QAAA,kBAAkB,sBAW1B;AAEE,MAAM,gBAAgB,GAAG,KAAK,EAAE,UAAsC,EAAE,QAAgB,EAAE,GAAW,EAAE,EAAE;IAC9G,IAAI,IAAI,SAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;QACpD,OAAO,KAAK,CAAC;KACd;IACD,MAAM,OAAO,GAAG,MAAM,IAAA,0BAAkB,EAAC,UAAU,EAAE,GAAG,CAAC,EACvD,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACjC,IAAI,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE;QAC7B,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAVW,QAAA,gBAAgB,oBAU3B;AAEK,MAAM,eAAe,GAAG,KAAK,EAClC,GAAW,EACX,OAA2E,EAE3E,EAAE;IACF,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC9B,OAAO,IAAI,QAAI,CACb;QACE,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,IAAI,GAAG;QAChF,GAAG;KACJ,EACD,OAAO,CACR,CAAC;AACJ,CAAC,CAAC;AAbW,QAAA,eAAe,mBAa1B;AAEF,MAAa,WAAY,SAAQ,mBAAe;IAC9C,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,OAAO,IAAA,wBAAgB,EAAC,eAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,UAAoD,EAAE;QAC/E,OAAO,IAAA,uBAAe,EAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/D,CAAC;CACF;AARD,kCAQC","sourcesContent":["import https from \"https\";\nimport { URL } from \"url\";\nimport { ExtractorPlugin, Song } from \"..\";\nimport type http from \"http\";\nimport type { GuildMember } from \"discord.js\";\n\nexport const getResponseHeaders = async (\n httpModule: typeof http | typeof https,\n url: string,\n): Promise<http.IncomingHttpHeaders> =>\n new Promise((resolve, reject) => {\n httpModule\n .get(url)\n .on(\"response\", res => {\n resolve(res.headers);\n })\n .on(\"error\", reject);\n });\n\nexport const validateAudioURL = async (httpModule: typeof http | typeof https, protocol: string, url: string) => {\n if (new URL(url).protocol.toLowerCase() !== protocol) {\n return false;\n }\n const headers = await getResponseHeaders(httpModule, url),\n type = headers[\"content-type\"];\n if (type?.startsWith(\"audio\")) {\n return true;\n }\n return false;\n};\n\nexport const resolveHttpSong = async (\n url: string,\n options: { source: \"http\" | \"https\"; member?: GuildMember; metadata?: any },\n // eslint-disable-next-line @typescript-eslint/require-await\n) => {\n url = url.replace(/\\/+$/, \"\");\n return new Song(\n {\n name: url.substring(url.lastIndexOf(\"/\") + 1).replace(/((\\?|#).*)?$/, \"\") || url,\n url,\n },\n options,\n );\n};\n\nexport class HTTPSPlugin extends ExtractorPlugin {\n async validate(url: string) {\n return validateAudioURL(https, \"https:\", url);\n }\n\n async resolve(url: string, options: { member?: GuildMember; metadata?: any } = {}) {\n return resolveHttpSong(url, { ...options, source: \"https\" });\n }\n}\n"]}