diff --git a/package.json b/package.json index d3f0271d7..b463179ae 100644 --- a/package.json +++ b/package.json @@ -50,5 +50,28 @@ }, "engines": { "node": ">=6.0.0" + }, + "browser": { + "src/sharding/Shard.js": false, + "src/sharding/ShardClientUtil.js": false, + "src/sharding/ShardingManager.js": false, + "src/client/voice/dispatcher/StreamDispatcher.js": false, + "src/client/voice/opus/BaseOpusEngine.js": false, + "src/client/voice/opus/NodeOpusEngine.js": false, + "src/client/voice/opus/OpusEngineList.js": false, + "src/client/voice/opus/OpusScriptEngine.js": false, + "src/client/voice/pcm/ConverterEngine.js": false, + "src/client/voice/pcm/ConverterEngineList.js": false, + "src/client/voice/pcm/FfmpegConverterEngine.js": false, + "src/client/voice/player/AudioPlayer.js": false, + "src/client/voice/player/BasePlayer.js": false, + "src/client/voice/player/DefaultPlayer.js": false, + "src/client/voice/receiver/VoiceReadable.js": false, + "src/client/voice/receiver/VoiceReceiver.js": false, + "src/client/voice/util/SecretKey.js": false, + "src/client/voice/ClientVoiceManager.js": false, + "src/client/voice/VoiceConnection.js": false, + "src/client/voice/VoiceUDPClient.js": false, + "src/client/voice/VoiceWebSocket.js": false } } diff --git a/src/client/Client.js b/src/client/Client.js index fd5c029e0..bf784a7ab 100644 --- a/src/client/Client.js +++ b/src/client/Client.js @@ -83,11 +83,11 @@ class Client extends EventEmitter { this.actions = new ActionsManager(this); /** - * The Voice Manager of the Client - * @type {ClientVoiceManager} + * The Voice Manager of the Client (`null` in browsers) + * @type {?ClientVoiceManager} * @private */ - this.voice = new ClientVoiceManager(this); + this.voice = !this.browser ? new ClientVoiceManager(this) : null; /** * The shard helpers for the client (only if the process was spawned as a child, such as from a ShardingManager) @@ -186,6 +186,7 @@ class Client extends EventEmitter { * @readonly */ get voiceConnections() { + if (this.browser) return new Collection(); return this.voice.connections; } diff --git a/src/client/voice/ClientVoiceManager.js b/src/client/voice/ClientVoiceManager.js index d65384505..09e9982a1 100644 --- a/src/client/voice/ClientVoiceManager.js +++ b/src/client/voice/ClientVoiceManager.js @@ -78,7 +78,6 @@ class ClientVoiceManager { */ joinChannel(channel) { return new Promise((resolve, reject) => { - if (this.client.browser) throw new Error('Voice connections are not available in browsers.'); if (this.pending.get(channel.guild.id)) throw new Error('Already connecting to this guild\'s voice server.'); if (!channel.joinable) throw new Error('You do not have permission to join this voice channel.'); diff --git a/src/structures/Guild.js b/src/structures/Guild.js index f073132f0..bfa8406f8 100644 --- a/src/structures/Guild.js +++ b/src/structures/Guild.js @@ -256,6 +256,7 @@ class Guild { * @readonly */ get voiceConnection() { + if (this.client.browser) return null; return this.client.voice.connections.get(this.id) || null; } diff --git a/src/structures/VoiceChannel.js b/src/structures/VoiceChannel.js index 4ba788460..848a6d513 100644 --- a/src/structures/VoiceChannel.js +++ b/src/structures/VoiceChannel.js @@ -50,6 +50,7 @@ class VoiceChannel extends GuildChannel { * @type {boolean} */ get joinable() { + if (this.client.browser) return false; return this.permissionsFor(this.client.user).hasPermission('CONNECT'); } @@ -99,6 +100,7 @@ class VoiceChannel extends GuildChannel { * .catch(console.error); */ join() { + if (this.client.browser) return Promise.reject(new Error('Voice connections are not available in browsers.')); return this.client.voice.joinChannel(this); } @@ -109,6 +111,7 @@ class VoiceChannel extends GuildChannel { * voiceChannel.leave(); */ leave() { + if (this.client.browser) return; const connection = this.client.voice.connections.get(this.guild.id); if (connection && connection.channel.id === this.id) connection.disconnect(); } diff --git a/webpack.config.js b/webpack.config.js index 75e28e7e7..fe9ae4742 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -22,9 +22,6 @@ const createConfig = (options) => { path: __dirname, filename, }, - resolve: { - descriptionFiles: ['package.json'], - }, module: { rules: [ { test: /\.json$/, loader: 'json-loader' }, @@ -32,9 +29,10 @@ const createConfig = (options) => { ], }, externals: { - 'node-opus': { commonjs: 'node-opus' }, - opusscript: { commonjs: 'opusscript' }, ws: { commonjs: 'ws' }, + opusscript: { commonjs: 'opusscript' }, + 'node-opus': { commonjs: 'node-opus' }, + 'tweet-nacl': { commonjs: 'tweet-nacl' }, }, node: { fs: 'empty', @@ -42,6 +40,7 @@ const createConfig = (options) => { tls: 'mock', child_process: 'empty', dgram: 'empty', + zlib: 'empty', __dirname: true, }, plugins,