mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-15 11:03:30 +01:00
Actually add GUILD_SYNC
This commit is contained in:
@@ -173,6 +173,13 @@ class Client extends EventEmitter {
|
|||||||
return timeout;
|
return timeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
syncGuilds(guilds = this.guilds.array()) {
|
||||||
|
return this.ws.send({
|
||||||
|
op: 12,
|
||||||
|
d: guilds.map(g => g.id),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Caches a user, or obtains it from the cache if it's already cached.
|
* Caches a user, or obtains it from the cache if it's already cached.
|
||||||
* If the user isn't already cached, it will only be obtainable by OAuth bot accounts.
|
* If the user isn't already cached, it will only be obtainable by OAuth bot accounts.
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ class ClientManager {
|
|||||||
this.client.ws.send({
|
this.client.ws.send({
|
||||||
op: Constants.OPCodes.HEARTBEAT,
|
op: Constants.OPCodes.HEARTBEAT,
|
||||||
d: Date.now(),
|
d: Date.now(),
|
||||||
});
|
}, true);
|
||||||
}, time);
|
}, time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ class ActionsManager {
|
|||||||
this.register('GuildRoleUpdate');
|
this.register('GuildRoleUpdate');
|
||||||
this.register('UserGet');
|
this.register('UserGet');
|
||||||
this.register('UserUpdate');
|
this.register('UserUpdate');
|
||||||
|
this.register('GuildSync');
|
||||||
}
|
}
|
||||||
|
|
||||||
register(name) {
|
register(name) {
|
||||||
|
|||||||
29
src/client/actions/GuildSync.js
Normal file
29
src/client/actions/GuildSync.js
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
const Action = require('./Action');
|
||||||
|
|
||||||
|
class GuildSync extends Action {
|
||||||
|
|
||||||
|
handle(data) {
|
||||||
|
const client = this.client;
|
||||||
|
const guild = client.guilds.get(data.id);
|
||||||
|
|
||||||
|
if (guild) {
|
||||||
|
data.presences = data.presences || [];
|
||||||
|
data.members = data.members || [];
|
||||||
|
for (const presence of data.presences) {
|
||||||
|
const user = client.users.get(presence.user.id);
|
||||||
|
if (user) {
|
||||||
|
user.status = presence.status;
|
||||||
|
user.game = presence.game;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (const syncMember of data.members) {
|
||||||
|
const member = guild.members.get(syncMember.user.id);
|
||||||
|
if (member) {
|
||||||
|
guild._updateMember(member, syncMember);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = GuildSync;
|
||||||
@@ -71,7 +71,10 @@ class WebSocketManager {
|
|||||||
* @param {Object} packet An object that can be JSON stringified
|
* @param {Object} packet An object that can be JSON stringified
|
||||||
* @returns {void}
|
* @returns {void}
|
||||||
*/
|
*/
|
||||||
send(data) {
|
send(data, force = false) {
|
||||||
|
if (force) {
|
||||||
|
return this.ws.send(JSON.stringify(data));
|
||||||
|
}
|
||||||
this._queue.push(JSON.stringify(data));
|
this._queue.push(JSON.stringify(data));
|
||||||
this.doQueue();
|
this.doQueue();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ class WebSocketPacketManager {
|
|||||||
this.register(Constants.WSEvents.VOICE_SERVER_UPDATE, 'VoiceServerUpdate');
|
this.register(Constants.WSEvents.VOICE_SERVER_UPDATE, 'VoiceServerUpdate');
|
||||||
this.register(Constants.WSEvents.MESSAGE_DELETE_BULK, 'MessageDeleteBulk');
|
this.register(Constants.WSEvents.MESSAGE_DELETE_BULK, 'MessageDeleteBulk');
|
||||||
this.register(Constants.WSEvents.CHANNEL_PINS_UPDATE, 'ChannelPinsUpdate');
|
this.register(Constants.WSEvents.CHANNEL_PINS_UPDATE, 'ChannelPinsUpdate');
|
||||||
|
this.register(Constants.WSEvents.GUILD_SYNC, 'GuildSync');
|
||||||
}
|
}
|
||||||
|
|
||||||
get client() {
|
get client() {
|
||||||
|
|||||||
14
src/client/websocket/packets/handlers/GuildSync.js
Normal file
14
src/client/websocket/packets/handlers/GuildSync.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
const AbstractHandler = require('./AbstractHandler');
|
||||||
|
|
||||||
|
class GuildSyncHandler extends AbstractHandler {
|
||||||
|
|
||||||
|
handle(packet) {
|
||||||
|
const data = packet.d;
|
||||||
|
const client = this.packetManager.client;
|
||||||
|
|
||||||
|
client.actions.GuildSync.handle(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = GuildSyncHandler;
|
||||||
@@ -21,6 +21,12 @@ class ReadyHandler extends AbstractHandler {
|
|||||||
client.dataManager.newChannel(privateDM);
|
client.dataManager.newChannel(privateDM);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!client.user.bot) {
|
||||||
|
client.setInterval(client.syncGuilds.bind(client), 30000);
|
||||||
|
}
|
||||||
|
|
||||||
|
client.once('ready', client.syncGuilds.bind(client));
|
||||||
|
|
||||||
this.packetManager.ws.sessionID = data.session_id;
|
this.packetManager.ws.sessionID = data.session_id;
|
||||||
|
|
||||||
this.packetManager.ws.checkIfReady('abc');
|
this.packetManager.ws.checkIfReady('abc');
|
||||||
|
|||||||
@@ -625,11 +625,12 @@ class Guild {
|
|||||||
return this.members.get(this.ownerID);
|
return this.members.get(this.ownerID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Syncs this guild (already done automatically every 30 seconds)
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
sync() {
|
sync() {
|
||||||
return this.client.ws.send({
|
this.client.syncGuilds([this]);
|
||||||
op: 12,
|
|
||||||
d: [this.id],
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -201,6 +201,7 @@ exports.WSEvents = {
|
|||||||
VOICE_SERVER_UPDATE: 'VOICE_SERVER_UPDATE',
|
VOICE_SERVER_UPDATE: 'VOICE_SERVER_UPDATE',
|
||||||
MESSAGE_DELETE_BULK: 'MESSAGE_DELETE_BULK',
|
MESSAGE_DELETE_BULK: 'MESSAGE_DELETE_BULK',
|
||||||
CHANNEL_PINS_UPDATE: 'CHANNEL_PINS_UPDATE',
|
CHANNEL_PINS_UPDATE: 'CHANNEL_PINS_UPDATE',
|
||||||
|
GUILD_SYNC: 'GUILD_SYNC',
|
||||||
};
|
};
|
||||||
|
|
||||||
const PermissionFlags = exports.PermissionFlags = {
|
const PermissionFlags = exports.PermissionFlags = {
|
||||||
|
|||||||
Reference in New Issue
Block a user