add member chunks

This commit is contained in:
hydrabolt
2016-02-12 22:07:56 +00:00
parent f0c719cf71
commit 54045de5f1
8 changed files with 97 additions and 3 deletions

View File

@@ -564,6 +564,11 @@ Overwrites the permissions of a role or a user in a channel
"attachFiles" : true
}
forceFetchUsers()
~~~~~~~~~~~~~~~~~
As of 12/02/2016, the API will now only return the online users in a server if it has more than 250 users. If you want to be aware of ALL users in a server, use this function. As of yet, it doesn't return anything and users are just silently and gradually added to the relevant servers.
Events
------

View File

@@ -675,6 +675,12 @@ var Client = (function (_EventEmitter) {
return this.setStatus(null, game, callback);
};
//def forceFetchUsers
Client.prototype.forceFetchUsers = function forceFetchUsers() {
return this.internal.forceFetchUsers();
};
_createClass(Client, [{
key: "users",
get: function get() {

View File

@@ -319,6 +319,21 @@ var InternalClient = (function () {
});
};
// def forceFetchUsers
InternalClient.prototype.forceFetchUsers = function forceFetchUsers() {
this.sendWS({
op: 8,
d: {
guild_id: this.servers.map(function (srv) {
return srv.id;
}),
query: "",
limit: 0
}
});
};
// def createServer
InternalClient.prototype.createServer = function createServer(name) {
@@ -1717,14 +1732,18 @@ var InternalClient = (function () {
var user = self.users.get("id", data.user_id);
var server = self.servers.get("id", data.guild_id);
console.log("2 meowwww");
if (user && server) {
console.log("1 meowwww");
if (data.channel_id) {
// in voice channel
console.log("meowwww");
var channel = self.channels.get("id", data.channel_id);
if (channel && channel.type === "voice") {
server.eventVoiceStateUpdate(channel, user, data);
} else {
console.log("mewarnow");
client.emit("warn", "voice state channel not in cache");
}
} else {
@@ -1735,6 +1754,33 @@ var InternalClient = (function () {
client.emit("warn", "voice state update but user or server not in cache");
}
break;
case _Constants.PacketType.SERVER_MEMBERS_CHUNK:
var server = self.servers.get("id", data.guild_id);
if (server) {
for (var _iterator6 = data.members, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {
var _ref6;
if (_isArray6) {
if (_i6 >= _iterator6.length) break;
_ref6 = _iterator6[_i6++];
} else {
_i6 = _iterator6.next();
if (_i6.done) break;
_ref6 = _i6.value;
}
var user = _ref6;
server.members.add(self.users.get("id", user.id) || self.users.add(new _StructuresUser2["default"](user, client)));
}
} else {
client.emit("warn", "chunk update received but server not in cache");
}
break;
default:
client.emit("unknown", packet);

View File

@@ -126,6 +126,7 @@ var PacketType = {
TYPING: "TYPING_START",
SERVER_BAN_ADD: "GUILD_BAN_ADD",
SERVER_BAN_REMOVE: "GUILD_BAN_REMOVE",
VOICE_STATE_UPDATE: "VOICE_STATE_UPDATE"
VOICE_STATE_UPDATE: "VOICE_STATE_UPDATE",
SERVER_MEMBERS_CHUNK: "GUILD_MEMBERS_CHUNK"
};
exports.PacketType = PacketType;

View File

@@ -556,4 +556,9 @@ export default class Client extends EventEmitter {
setPlayingGame(game, callback = (/*err, {}*/) => { }) {
return this.setStatus(null, game, callback);
}
//def forceFetchUsers
forceFetchUsers(){
return this.internal.forceFetchUsers();
}
}

View File

@@ -249,6 +249,18 @@ export default class InternalClient {
});
}
// def forceFetchUsers
forceFetchUsers(){
this.sendWS({
op : 8,
d : {
guild_id : this.servers.map(srv => srv.id),
query : "",
limit : 0
}
});
}
// def createServer
createServer(name, region = "london") {
name = this.resolver.resolveString(name);
@@ -1526,6 +1538,21 @@ export default class InternalClient {
client.emit("warn", "voice state update but user or server not in cache");
}
break;
case PacketType.SERVER_MEMBERS_CHUNK:
var server = self.servers.get("id", data.guild_id);
if(server){
for(var user of data.members){
server.members.add(self.users.get("id", user.id) || self.users.add(new User(user, client)));
}
}else{
client.emit("warn", "chunk update received but server not in cache");
}
break;
default:
client.emit("unknown", packet);

View File

@@ -84,5 +84,6 @@ export const PacketType = {
TYPING : "TYPING_START",
SERVER_BAN_ADD : "GUILD_BAN_ADD",
SERVER_BAN_REMOVE: "GUILD_BAN_REMOVE",
VOICE_STATE_UPDATE : "VOICE_STATE_UPDATE"
VOICE_STATE_UPDATE : "VOICE_STATE_UPDATE",
SERVER_MEMBERS_CHUNK : "GUILD_MEMBERS_CHUNK"
};

View File

@@ -79,10 +79,13 @@ client.on("message", msg => {
console.log("INIT");
client.forceFetchUsers();
client.on("debug", msg => console.log("[debug]", msg));
client.on("unk", msg => console.log("[unknown]", msg));
client.login(process.env["ds_email"], process.env["ds_password"]).catch(console.log);
client.on("presence", (old, news) => console.log(`PRESENCE TEST ${old.username} $$ ${news.username}`))
//client.on("presence", (old, news) => console.log(`PRESENCE TEST ${old.username} $$ ${news.username}`))
var chan1, chan2;
var msg1, msg2;