All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.riversun.xternal.simpleslackapi.impl.SlackJSONReplyParser Maven / Gradle / Ivy

The newest version!
package org.riversun.xternal.simpleslackapi.impl;

import org.riversun.xternal.simpleslackapi.SlackSession;
import org.riversun.xternal.simpleslackapi.replies.ParsedSlackReply;
import org.riversun.xternal.simpleslackapi.replies.SlackChannelReply;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

class SlackJSONReplyParser
{
    static ParsedSlackReply decode(JsonObject obj, SlackSession session)
    {
        Boolean ok = obj.get("ok").getAsBoolean();
        String error = null;
        if (obj.get("error") != null)
        {
            error = obj.get("error").getAsString();
        }
        if (obj.get("presence") != null)
        {
            return new SlackUserPresenceReplyImpl(ok, error,"active".equals(obj.get("presence").getAsString()));
        }

        if (isMpim(obj) || isIm(obj) || isChannel(obj) || isGroup(obj)) {
            return buildSlackChannelReply(ok,error,obj,session);
        }

        if(isMessageReply(obj)) {
            String timestamp = GsonHelper.getStringOrNull(obj.get("ts"));
            return new SlackMessageReplyImpl(ok, error, GsonHelper.getLongOrDefaultValue(obj.get("reply_to"),-1l), timestamp);
        }

        if (isEmojiReply(obj)) {
            String timestamp = GsonHelper.getStringOrNull(obj.get("cache_ts"));
            return new SlackEmojiReplyImpl(ok, error, SlackJSONMessageParser.extractEmojisFromMessageJSON(obj.get("emoji").getAsJsonObject()), timestamp);
        }

        if (ok == null) {
            //smelly reply
            ok = Boolean.FALSE;
        }
        return new SlackReplyImpl(ok,error);
    }

    private static SlackChannelReply buildSlackChannelReply(Boolean ok, String error, JsonObject obj, SlackSession session) {
        if (obj.get("id") != null) {
            return new SlackChannelReplyImpl(ok,error, session.findChannelById(obj.get("id").getAsString()));
        }

        JsonElement channelObj = obj.get("channel");
        if (channelObj == null) {
            channelObj = obj.get("group");
        }

        String id = channelObj.getAsJsonObject().get("id").getAsString();
        return new SlackChannelReplyImpl(ok,error, session.findChannelById(id));
    }

    private static boolean isMessageReply(JsonObject obj)
    {
        return obj.get("ts") != null;
    }
    
    private static boolean isMpim(JsonObject obj) {
        return GsonHelper.getBooleanOrDefaultValue(obj.get("is_mpim"),false);
    }

    private static boolean isIm(JsonObject obj) {
        return GsonHelper.getBooleanOrDefaultValue(obj.get("is_im"),false);
    }

    private static boolean isChannel(JsonObject obj) {
        JsonElement channel = obj.get("channel");
        return channel != null && channel.isJsonObject();
    }

    private static boolean isGroup(JsonObject obj)
    {
        if (obj.get("is_group") != null) {
            return obj.get("is_group").getAsBoolean();
        }
        JsonElement group = obj.get("group");
        return group != null && group.isJsonObject();
    }

    private static boolean isEmojiReply(JsonObject obj) {
        JsonElement emoji = obj.get("emoji");
        return emoji != null && emoji.isJsonObject();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy