diff --git a/spectrum/src/frontends/slack/SlackAPI.cpp b/spectrum/src/frontends/slack/SlackAPI.cpp index 7348fcd7..01eb3ed3 100644 --- a/spectrum/src/frontends/slack/SlackAPI.cpp +++ b/spectrum/src/frontends/slack/SlackAPI.cpp @@ -217,7 +217,31 @@ void SlackAPI::getSlackChannelInfo(HTTPRequest *req, bool ok, rapidjson::Documen return; } - GET_ARRAY(resp, channels); + rapidjson::Value &channels = resp["channels"]; + if (!channels.IsArray()) { + rapidjson::Value &channel = resp["channel"]; + if (channel.IsObject()) { + SlackChannelInfo info; + + STORE_STRING(channel, id); + info.id = id; + + STORE_STRING(channel, name); + info.name = name; + + rapidjson::Value &members = channel["members"]; + for (int y = 0; members.IsArray() && y < members.Size(); y++) { + if (!members[y].IsString()) { + continue; + } + + info.members.push_back(members[y].GetString()); + } + + ret[info.name] = info; + } + return; + } for (int i = 0; i < channels.Size(); i++) { if (!channels[i].IsObject()) { @@ -360,8 +384,11 @@ void SlackAPI::handleSlackChannelInvite(HTTPRequest *req, bool ok, rapidjson::Do } void SlackAPI::handleSlackChannelCreate(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data, const std::string &channel, const std::string &userId, CreateChannelCallback callback) { - std::string channelId = getChannelId(req, ok, resp, data); - if (channelId.empty()) { + std::map &channels = m_idManager->getChannels(); + SlackAPI::getSlackChannelInfo(req, ok, resp, data, channels); + + std::string channelId = m_idManager->getId(channel); + if (channelId == channel) { LOG4CXX_INFO(logger, "Error creating channel " << channel << "."); return; } diff --git a/spectrum/src/frontends/slack/SlackIdManager.cpp b/spectrum/src/frontends/slack/SlackIdManager.cpp index 65842c20..a1c5b5a7 100644 --- a/spectrum/src/frontends/slack/SlackIdManager.cpp +++ b/spectrum/src/frontends/slack/SlackIdManager.cpp @@ -55,22 +55,22 @@ const std::string &SlackIdManager::getName(const std::string &id) { } const std::string &SlackIdManager::getId(const std::string &name) { - for (std::map::const_iterator it = m_channels.begin(); it != m_channels.end(); ++it) { - if (it->second.name == name) { - return it->second.id; - } + if (m_channels.find(name) == m_channels.end()) { + return name; } - return name; + return m_channels[name].id; } bool SlackIdManager::hasMember(const std::string &channelId, const std::string &userId) { - if (m_channels.find(channelId) == m_channels.end()) { - return false; + + for (std::map::const_iterator it = m_channels.begin(); it != m_channels.end(); ++it) { + if (it->second.id == channelId) { + return std::find(it->second.members.begin(), it->second.members.end(), userId) != it->second.members.end(); + } } - SlackChannelInfo &channel = m_channels[channelId]; - return std::find(channel.members.begin(), channel.members.end(), userId) != channel.members.end(); + return false; } diff --git a/spectrum/src/frontends/slack/SlackRTM.cpp b/spectrum/src/frontends/slack/SlackRTM.cpp index ed69af49..bbaf4284 100644 --- a/spectrum/src/frontends/slack/SlackRTM.cpp +++ b/spectrum/src/frontends/slack/SlackRTM.cpp @@ -124,12 +124,18 @@ void SlackRTM::handlePayloadReceived(const std::string &payload) { text = "/me " + text; STORE_STRING(d, user); onMessageReceived(channel, user, text, ts); + } + else if (subtype == "channel_join") { + } else { STORE_STRING(d, user); onMessageReceived(channel, user, text, ts); } } + else if (type == "channel_joined") { + + } } void SlackRTM::sendMessage(const std::string &channel, const std::string &message) {