Slack: Store info about created channel to SlackIdManager
This commit is contained in:
parent
f6d1844943
commit
2ce9fd2e16
3 changed files with 45 additions and 12 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Reference in a new issue