Add Sharding Support!

This commit is contained in:
Amish Shah
2016-08-22 21:31:43 +01:00
parent fb2392a1ed
commit 3fded1d7af
5 changed files with 51 additions and 4 deletions

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,5 @@
const DocumentedItem = require('./DocumentedItem');
const DocumentedParam = require('./DocumentedParam');
/*
{ id: 'Client()',
@@ -18,13 +19,26 @@ const DocumentedItem = require('./DocumentedItem');
class DocumentedConstructor extends DocumentedItem {
registerMetaInfo(data) {
super.registerMetaInfo(data);
this.directData = data;
const newParams = [];
for (const param of data.params) {
newParams.push(new DocumentedParam(this, param));
}
this.directData.params = newParams;
}
serialize() {
super.serialize();
const { id, name, description, memberof, access } = this.directData;
return { id, name, description, memberof, access };
const { id, name, description, memberof, access, params } = this.directData;
return {
id,
name,
description,
memberof,
access,
params: params.map(p => p.serialize())
};
}
}

View File

@@ -112,6 +112,9 @@ class WebSocketManager {
this.reconnecting = false;
const payload = this.client.options.ws;
payload.token = this.client.token;
if (this.client.options.shard_count > 0) {
payload.shard = [this.client.options.shard_id, this.client.options.shard_count];
}
this.send({
op: Constants.OPCodes.IDENTIFY,

View File

@@ -1,3 +1,28 @@
/**
* Options that can be passed to a client:
* ```js
* {
* ws: {
* large_threshold: 250,
* compress: true,
* properties: {
* $os: process ? process.platform : 'discord.js',
* $browser: 'discord.js',
* $device: 'discord.js',
* $referrer: '',
* $referring_domain: '',
* },
* },
* protocol_version: 6,
* max_message_cache: 200,
* rest_ws_bridge_timeout: 5000,
* api_request_method: 'sequential',
* shard_id: 0,
* shard_count: 0,
* };
* ```
* @typedef {Object} ClientOptions
*/
exports.DefaultOptions = {
ws: {
large_threshold: 250,
@@ -14,6 +39,8 @@ exports.DefaultOptions = {
max_message_cache: 200,
rest_ws_bridge_timeout: 5000,
api_request_method: 'sequential',
shard_id: 0,
shard_count: 0,
};
exports.Status = {

View File

@@ -3,7 +3,10 @@
const Discord = require('../');
const request = require('superagent');
const client = new Discord.Client();
const client = new Discord.Client({
shard_id: 0,
shard_count: 2,
});
client.login(require('./auth.json').token).then(token => console.log('logged in with token ' + token)).catch(console.log);