Slack: Store info about created channel to SlackIdManager

This commit is contained in:
Jan Kaluza 2016-01-29 14:57:17 +01:00
parent f6d1844943
commit 2ce9fd2e16
3 changed files with 45 additions and 12 deletions

View file

@ -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<std::string, SlackChannelInfo> &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;
}

View file

@ -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<std::string, SlackChannelInfo>::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<std::string, SlackChannelInfo>::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;
}

View file

@ -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) {