diff --git a/src/sharding/Shard.js b/src/sharding/Shard.js index 98bafff2e..96ab796dc 100644 --- a/src/sharding/Shard.js +++ b/src/sharding/Shard.js @@ -175,8 +175,8 @@ class Shard extends EventEmitter { } /** - * Evaluates a script on the shard, in the context of the {@link Client}. - * @param {string} script JavaScript to run on the shard + * Evaluates a script or function on the shard, in the context of the {@link Client}. + * @param {string|Function} script JavaScript to run on the shard * @returns {Promise<*>} Result of the script execution */ eval(script) { @@ -191,7 +191,8 @@ class Shard extends EventEmitter { }; this.process.on('message', listener); - this.send({ _eval: script }).catch(err => { + const _eval = typeof script === 'function' ? `(${script})(this)` : script; + this.send({ _eval }).catch(err => { this.process.removeListener('message', listener); this._evals.delete(script); reject(err); diff --git a/src/sharding/ShardClientUtil.js b/src/sharding/ShardClientUtil.js index b0e9d57ed..1c47f0296 100644 --- a/src/sharding/ShardClientUtil.js +++ b/src/sharding/ShardClientUtil.js @@ -86,6 +86,7 @@ class ShardClientUtil { */ broadcastEval(script) { return new Promise((resolve, reject) => { + script = typeof script !== 'function' ? `(${script})(this)` : script; const listener = message => { if (!message || message._sEval !== script) return; process.removeListener('message', listener);