From f79b8c446509e5c7eaf07d272a58b59398efac29 Mon Sep 17 00:00:00 2001 From: Kushal Dave Date: Fri, 19 Feb 2016 15:43:02 -0800 Subject: [PATCH] Bug fix + file support to ReactionAdded/Removed Correctly parse reactions to files. Also fix a significant bug where new channels were always parsed as isDirect=true. --- .../simpleslackapi/events/ReactionAdded.java | 8 +++-- .../events/ReactionRemoved.java | 8 +++-- .../impl/ReactionAddedImpl.java | 28 +++++++++++++++-- .../impl/ReactionRemovedImpl.java | 30 ++++++++++++++++--- .../impl/SlackJSONMessageParser.java | 28 ++++++++++------- 5 files changed, 80 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/ullink/slack/simpleslackapi/events/ReactionAdded.java b/src/main/java/com/ullink/slack/simpleslackapi/events/ReactionAdded.java index 70d907b1..225525c5 100644 --- a/src/main/java/com/ullink/slack/simpleslackapi/events/ReactionAdded.java +++ b/src/main/java/com/ullink/slack/simpleslackapi/events/ReactionAdded.java @@ -1,12 +1,16 @@ package com.ullink.slack.simpleslackapi.events; import com.ullink.slack.simpleslackapi.SlackChannel; +import com.ullink.slack.simpleslackapi.SlackUser; -public interface ReactionAdded extends SlackEvent{ +public interface ReactionAdded extends SlackEvent { public String getEmojiName(); public SlackChannel getChannel(); + public SlackUser getUser(); public String getMessageID(); - + public String getFileID(); + public String getFileCommentID(); + } diff --git a/src/main/java/com/ullink/slack/simpleslackapi/events/ReactionRemoved.java b/src/main/java/com/ullink/slack/simpleslackapi/events/ReactionRemoved.java index 30645627..8cb115c6 100644 --- a/src/main/java/com/ullink/slack/simpleslackapi/events/ReactionRemoved.java +++ b/src/main/java/com/ullink/slack/simpleslackapi/events/ReactionRemoved.java @@ -1,13 +1,15 @@ package com.ullink.slack.simpleslackapi.events; import com.ullink.slack.simpleslackapi.SlackChannel; +import com.ullink.slack.simpleslackapi.SlackUser; public interface ReactionRemoved extends SlackEvent { public String getEmojiName(); - public SlackChannel getChannel(); - + public SlackUser getUser(); public String getMessageID(); - + public String getFileID(); + public String getFileCommentID(); + } diff --git a/src/main/java/com/ullink/slack/simpleslackapi/impl/ReactionAddedImpl.java b/src/main/java/com/ullink/slack/simpleslackapi/impl/ReactionAddedImpl.java index 238f66d6..20e82712 100644 --- a/src/main/java/com/ullink/slack/simpleslackapi/impl/ReactionAddedImpl.java +++ b/src/main/java/com/ullink/slack/simpleslackapi/impl/ReactionAddedImpl.java @@ -1,6 +1,7 @@ package com.ullink.slack.simpleslackapi.impl; import com.ullink.slack.simpleslackapi.SlackChannel; +import com.ullink.slack.simpleslackapi.SlackUser; import com.ullink.slack.simpleslackapi.events.ReactionAdded; import com.ullink.slack.simpleslackapi.events.SlackEventType; @@ -9,11 +10,17 @@ public class ReactionAddedImpl implements ReactionAdded { private final String emojiName; private final String messageID; private final SlackChannel channel; - - public ReactionAddedImpl(String emojiName, String messageID, SlackChannel channel) { + private final SlackUser user; + private final String fileID; + private final String fileCommentID; + + public ReactionAddedImpl(String emojiName, SlackUser user, SlackChannel channel, String messageID, String fileID, String fileCommentID) { this.emojiName = emojiName; - this.messageID = messageID; + this.user = user; this.channel = channel; + this.messageID = messageID; + this.fileID = fileID; + this.fileCommentID = fileCommentID; } @Override @@ -31,6 +38,21 @@ public String getMessageID() { return messageID; } + @Override + public String getFileID() { + return fileID; + } + + @Override + public String getFileCommentID() { + return fileCommentID; + } + + @Override + public SlackUser getUser() { + return user; + } + @Override public SlackEventType getEventType() { return SlackEventType.REACTION_ADDED; diff --git a/src/main/java/com/ullink/slack/simpleslackapi/impl/ReactionRemovedImpl.java b/src/main/java/com/ullink/slack/simpleslackapi/impl/ReactionRemovedImpl.java index e299cb00..0eeee933 100644 --- a/src/main/java/com/ullink/slack/simpleslackapi/impl/ReactionRemovedImpl.java +++ b/src/main/java/com/ullink/slack/simpleslackapi/impl/ReactionRemovedImpl.java @@ -1,18 +1,25 @@ package com.ullink.slack.simpleslackapi.impl; import com.ullink.slack.simpleslackapi.SlackChannel; +import com.ullink.slack.simpleslackapi.SlackUser; import com.ullink.slack.simpleslackapi.events.ReactionRemoved; import com.ullink.slack.simpleslackapi.events.SlackEventType; public class ReactionRemovedImpl implements ReactionRemoved{ private final String emojiName; - private final String messageID; private final SlackChannel channel; - - public ReactionRemovedImpl(String emojiName, String messageID, SlackChannel channel) { + private final SlackUser user; + private final String messageID; + private final String fileID; + private final String fileCommentID; + + public ReactionRemovedImpl(String emojiName, SlackUser user, SlackChannel channel, String messageID, String fileID, String fileCommentID) { this.emojiName = emojiName; - this.messageID = messageID; + this.user = user; this.channel = channel; + this.messageID = messageID; + this.fileID = fileID; + this.fileCommentID = fileCommentID; } @Override @@ -30,6 +37,21 @@ public String getMessageID() { return messageID; } + @Override + public String getFileID() { + return fileID; + } + + @Override + public String getFileCommentID() { + return fileCommentID; + } + + @Override + public SlackUser getUser() { + return user; + } + @Override public SlackEventType getEventType() { return SlackEventType.REACTION_REMOVED; diff --git a/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackJSONMessageParser.java b/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackJSONMessageParser.java index 6523776c..186c8741 100644 --- a/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackJSONMessageParser.java +++ b/src/main/java/com/ullink/slack/simpleslackapi/impl/SlackJSONMessageParser.java @@ -280,16 +280,20 @@ private static SlackChannel parseChannelDescription(JSONObject channelJSONObject String name = (String) channelJSONObject.get("name"); String topic = (String)((Map)channelJSONObject.get("topic")).get("value"); String purpose = (String) ((Map) channelJSONObject.get("purpose")).get("value"); - return new SlackChannelImpl(id, name, topic, purpose, true); + return new SlackChannelImpl(id, name, topic, purpose, id.startsWith("D")); } private static ReactionAdded extractReactionAddedEvent(SlackSession slackSession, JSONObject obj) { - JSONObject message = (JSONObject) obj.get("item"); + JSONObject item = (JSONObject) obj.get("item"); String emojiName = (String) obj.get("reaction"); - String messageId = (String) message.get("ts"); - String channelId = (String) message.get("channel"); - return new ReactionAddedImpl(emojiName, messageId, slackSession.findChannelById(channelId)); + String messageId = (String) item.get("ts"); + String fileId = (String) item.get("file"); + String fileCommentId = (String) item.get("file_comment"); + String channelId = (String) item.get("channel"); + SlackChannel channel = (channelId != null) ? slackSession.findChannelById(channelId) : null; + SlackUser user = slackSession.findUserById((String) obj.get("user")); + return new ReactionAddedImpl(emojiName, user, channel, messageId, fileId, fileCommentId); } private static SlackUserChange extractUserChangeEvent(SlackSession slackSession, JSONObject obj) { @@ -299,11 +303,15 @@ private static SlackUserChange extractUserChangeEvent(SlackSession slackSession, } private static ReactionRemoved extractReactionRemovedEvent(SlackSession slackSession, JSONObject obj) { - JSONObject message = (JSONObject) obj.get("item"); - String emojiName = (String) obj.get("reaction"); - String messageId = (String) message.get("ts"); - String channelId = (String) message.get("channel"); - return new ReactionRemovedImpl(emojiName, messageId, slackSession.findChannelById(channelId)); + JSONObject item = (JSONObject) obj.get("item"); + String emojiName = (String) obj.get("reaction"); + String messageId = (String) item.get("ts"); + String fileId = (String) item.get("file"); + String fileCommentId = (String) item.get("file_comment"); + String channelId = (String) item.get("channel"); + SlackChannel channel = (channelId != null) ? slackSession.findChannelById(channelId) : null; + SlackUser user = slackSession.findUserById((String) obj.get("user")); + return new ReactionRemovedImpl(emojiName, user, channel, messageId, fileId, fileCommentId); } private static PinRemoved extractPinRemovedEvent(SlackSession slackSession, JSONObject obj) {