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;
|
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++) {
|
for (int i = 0; i < channels.Size(); i++) {
|
||||||
if (!channels[i].IsObject()) {
|
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) {
|
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);
|
std::map<std::string, SlackChannelInfo> &channels = m_idManager->getChannels();
|
||||||
if (channelId.empty()) {
|
SlackAPI::getSlackChannelInfo(req, ok, resp, data, channels);
|
||||||
|
|
||||||
|
std::string channelId = m_idManager->getId(channel);
|
||||||
|
if (channelId == channel) {
|
||||||
LOG4CXX_INFO(logger, "Error creating channel " << channel << ".");
|
LOG4CXX_INFO(logger, "Error creating channel " << channel << ".");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,23 +55,23 @@ const std::string &SlackIdManager::getName(const std::string &id) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string &SlackIdManager::getId(const std::string &name) {
|
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 (m_channels.find(name) == m_channels.end()) {
|
||||||
if (it->second.name == name) {
|
|
||||||
return it->second.id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return m_channels[name].id;
|
||||||
|
}
|
||||||
|
|
||||||
bool SlackIdManager::hasMember(const std::string &channelId, const std::string &userId) {
|
bool SlackIdManager::hasMember(const std::string &channelId, const std::string &userId) {
|
||||||
if (m_channels.find(channelId) == m_channels.end()) {
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
SlackChannelInfo &channel = m_channels[channelId];
|
|
||||||
return std::find(channel.members.begin(), channel.members.end(), userId) != channel.members.end();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,12 +124,18 @@ void SlackRTM::handlePayloadReceived(const std::string &payload) {
|
||||||
text = "/me " + text;
|
text = "/me " + text;
|
||||||
STORE_STRING(d, user);
|
STORE_STRING(d, user);
|
||||||
onMessageReceived(channel, user, text, ts);
|
onMessageReceived(channel, user, text, ts);
|
||||||
|
}
|
||||||
|
else if (subtype == "channel_join") {
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
STORE_STRING(d, user);
|
STORE_STRING(d, user);
|
||||||
onMessageReceived(channel, user, text, ts);
|
onMessageReceived(channel, user, text, ts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (type == "channel_joined") {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SlackRTM::sendMessage(const std::string &channel, const std::string &message) {
|
void SlackRTM::sendMessage(const std::string &channel, const std::string &message) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue