diff --git a/src/main/java/net/dv8tion/jda/core/handle/PresenceUpdateHandler.java b/src/main/java/net/dv8tion/jda/core/handle/PresenceUpdateHandler.java index e125d9ba845..b7290cc0701 100644 --- a/src/main/java/net/dv8tion/jda/core/handle/PresenceUpdateHandler.java +++ b/src/main/java/net/dv8tion/jda/core/handle/PresenceUpdateHandler.java @@ -208,11 +208,9 @@ protected Long handleInternally(JSONObject content) //If the OnlineStatus is OFFLINE, ignore the event and return. OnlineStatus status = OnlineStatus.fromKey(content.getString("status")); - if (status == OnlineStatus.OFFLINE) - return null; //If this was for a Guild, cache it in the Guild for later use in GUILD_MEMBER_ADD - if (guild != null) + if (status != OnlineStatus.OFFLINE && guild != null) guild.getCachedPresenceMap().put(userId, content); } return null; diff --git a/src/main/java/net/dv8tion/jda/core/requests/WebSocketClient.java b/src/main/java/net/dv8tion/jda/core/requests/WebSocketClient.java index 7922f3fbda9..f2b60f88dfc 100644 --- a/src/main/java/net/dv8tion/jda/core/requests/WebSocketClient.java +++ b/src/main/java/net/dv8tion/jda/core/requests/WebSocketClient.java @@ -922,20 +922,20 @@ protected void handleEvent(JSONObject raw) return; } } -// -// // Needs special handling due to content of "d" being an array -// if(type.equals("PRESENCE_REPLACE")) -// { -// JSONArray presences = raw.getJSONArray("d"); -// LOG.trace(String.format("%s -> %s", type, presences.toString())); -// PresenceUpdateHandler handler = new PresenceUpdateHandler(api, responseTotal); -// for (int i = 0; i < presences.length(); i++) -// { -// JSONObject presence = presences.getJSONObject(i); -// handler.handle(presence); -// } -// return; -// } + + // Needs special handling due to content of "d" being an array + if (type.equals("PRESENCES_REPLACE")) + { + JSONArray presences = raw.getJSONArray("d"); + LOG.trace(String.format("%s -> %s", type, presences.toString())); + PresenceUpdateHandler handler = getHandler("PRESENCE_UPDATE"); + for (int i = 0; i < presences.length(); i++) + { + JSONObject presence = presences.getJSONObject(i); + handler.handle(responseTotal, presence); + } + return; + } JSONObject content = raw.getJSONObject("d"); LOG.trace(String.format("%s -> %s", type, content.toString())); @@ -946,7 +946,6 @@ protected void handleEvent(JSONObject raw) { //INIT types case "READY": - //LOG.debug(String.format("%s -> %s", type, content.toString())); already logged on trace level processingReady = true; handleIdentifyRateLimit = false; sessionId = content.getString("session_id"); @@ -1319,8 +1318,11 @@ private void setupHandlers() handlers.put("VOICE_STATE_UPDATE", new VoiceStateUpdateHandler(api)); // Unused events - handlers.put("CHANNEL_PINS_UPDATE", new SocketHandler.NOPHandler(api)); - handlers.put("WEBHOOKS_UPDATE", new SocketHandler.NOPHandler(api)); + final SocketHandler.NOPHandler nopHandler = new SocketHandler.NOPHandler(api); + handlers.put("CHANNEL_PINS_UPDATE", nopHandler); + handlers.put("WEBHOOKS_UPDATE", nopHandler); + handlers.put("GUILD_INTEGRATIONS_UPDATE", nopHandler); + handlers.put("CHANNEL_PINS_ACK", nopHandler); if (api.getAccountType() == AccountType.CLIENT) { @@ -1333,7 +1335,7 @@ private void setupHandlers() handlers.put("RELATIONSHIP_REMOVE", new RelationshipRemoveHandler(api)); // Unused client events - handlers.put("MESSAGE_ACK", new SocketHandler.NOPHandler(api)); + handlers.put("MESSAGE_ACK", nopHandler); } }