Slack: Invite our bot to main SlackChannel once it is created
This commit is contained in:
parent
2e508b97c3
commit
52347fa379
6 changed files with 38 additions and 14 deletions
|
@ -147,6 +147,15 @@ void SlackAPI::channelsList( HTTPRequest::Callback callback) {
|
|||
queueRequest(req);
|
||||
}
|
||||
|
||||
void SlackAPI::channelsInvite(const std::string &channel, const std::string &user, HTTPRequest::Callback callback) {
|
||||
std::string url = "https://slack.com/api/channels.invite?";
|
||||
url += "&channel=" + Util::urlencode(channel);
|
||||
url += "&user=" + Util::urlencode(user);
|
||||
url += "&token=" + Util::urlencode(m_token);
|
||||
HTTPRequest *req = new HTTPRequest(THREAD_POOL(m_component), HTTPRequest::Get, url, callback);
|
||||
queueRequest(req);
|
||||
}
|
||||
|
||||
void SlackAPI::channelsCreate(const std::string &name, HTTPRequest::Callback callback) {
|
||||
std::string url = "https://slack.com/api/channels.create?name=" + Util::urlencode(name) + "&token=" + Util::urlencode(m_token);
|
||||
HTTPRequest *req = new HTTPRequest(THREAD_POOL(m_component), HTTPRequest::Get, url, callback);
|
||||
|
|
|
@ -76,6 +76,7 @@ class SlackAPI : public HTTPRequestQueue {
|
|||
std::string getOwnerId(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data);
|
||||
|
||||
void channelsCreate(const std::string &name, HTTPRequest::Callback callback);
|
||||
void channelsInvite(const std::string &channel, const std::string &user, HTTPRequest::Callback callback);
|
||||
void channelsList(HTTPRequest::Callback callback);
|
||||
|
||||
void imOpen(const std::string &uid, HTTPRequest::Callback callback);
|
||||
|
|
|
@ -184,6 +184,15 @@ void SlackRTM::handleRTMStart(HTTPRequest *req, bool ok, rapidjson::Document &re
|
|||
|
||||
m_selfName = selfName.GetString();
|
||||
|
||||
rapidjson::Value &selfId = self["id"];
|
||||
if (!selfId.IsString()) {
|
||||
LOG4CXX_ERROR(logger, "No 'id' string in the reply.");
|
||||
LOG4CXX_ERROR(logger, data);
|
||||
return;
|
||||
}
|
||||
|
||||
m_selfId = selfId.GetString();
|
||||
|
||||
SlackAPI::getSlackChannelInfo(req, ok, resp, data, m_channels);
|
||||
SlackAPI::getSlackImInfo(req, ok, resp, data, m_ims);
|
||||
SlackAPI::getSlackUserInfo(req, ok, resp, data, m_users);
|
||||
|
|
|
@ -89,6 +89,10 @@ class SlackRTM {
|
|||
return m_selfName;
|
||||
}
|
||||
|
||||
const std::string &getSelfId() {
|
||||
return m_selfId;
|
||||
}
|
||||
|
||||
private:
|
||||
void handlePayloadReceived(const std::string &payload);
|
||||
void handleRTMStart(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data);
|
||||
|
@ -100,6 +104,7 @@ class SlackRTM {
|
|||
std::map<std::string, SlackImInfo> m_ims;
|
||||
std::map<std::string, SlackUserInfo> m_users;
|
||||
std::string m_selfName;
|
||||
std::string m_selfId;
|
||||
|
||||
private:
|
||||
Component *m_component;
|
||||
|
|
|
@ -215,14 +215,7 @@ void SlackSession::handleJoinMessage(const std::string &message, std::vector<std
|
|||
m_api->channelsList(boost::bind(&SlackSession::handleJoinRoomList, this, _1, _2, _3, _4, args));
|
||||
}
|
||||
|
||||
void SlackSession::handleSlackChannelCreate(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data) {
|
||||
std::string channelId = m_api->getChannelId(req, ok, resp, data);
|
||||
if (channelId.empty()) {
|
||||
LOG4CXX_INFO(logger,"Error creating channel " << m_slackChannel << ".");
|
||||
return;
|
||||
}
|
||||
|
||||
m_slackChannel = channelId;
|
||||
void SlackSession::handleSlackChannelInvite(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data) {
|
||||
Swift::Presence::ref presence = Swift::Presence::create();
|
||||
presence->setFrom(Swift::JID("", m_uinfo.jid, "default"));
|
||||
presence->setTo(m_component->getJID());
|
||||
|
@ -231,18 +224,24 @@ void SlackSession::handleSlackChannelCreate(HTTPRequest *req, bool ok, rapidjson
|
|||
m_component->getFrontend()->onPresenceReceived(presence);
|
||||
}
|
||||
|
||||
void SlackSession::handleSlackChannelCreate(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data) {
|
||||
std::string channelId = m_api->getChannelId(req, ok, resp, data);
|
||||
if (channelId.empty()) {
|
||||
LOG4CXX_INFO(logger,"Error creating channel " << m_slackChannel << ".");
|
||||
return;
|
||||
}
|
||||
|
||||
m_slackChannel = channelId;
|
||||
m_api->channelsInvite(m_slackChannel, m_rtm->getSelfId(), boost::bind(&SlackSession::handleSlackChannelInvite, this, _1, _2, _3, _4));
|
||||
}
|
||||
|
||||
void SlackSession::handleSlackChannelList(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data) {
|
||||
std::map<std::string, SlackChannelInfo> channels;
|
||||
SlackAPI::getSlackChannelInfo(req, ok, resp, data, channels);
|
||||
|
||||
if (channels.find(m_slackChannel) != channels.end()) {
|
||||
m_slackChannel = channels[m_slackChannel].id;
|
||||
Swift::Presence::ref presence = Swift::Presence::create();
|
||||
presence->setFrom(Swift::JID("", m_uinfo.jid, "default"));
|
||||
presence->setTo(m_component->getJID());
|
||||
presence->setType(Swift::Presence::Available);
|
||||
presence->addPayload(boost::shared_ptr<Swift::Payload>(new Swift::MUCPayload()));
|
||||
m_component->getFrontend()->onPresenceReceived(presence);
|
||||
m_api->channelsInvite(m_slackChannel, m_rtm->getSelfId(), boost::bind(&SlackSession::handleSlackChannelInvite, this, _1, _2, _3, _4));
|
||||
}
|
||||
else {
|
||||
m_api->channelsCreate(m_slackChannel, boost::bind(&SlackSession::handleSlackChannelCreate, this, _1, _2, _3, _4));
|
||||
|
|
|
@ -75,6 +75,7 @@ class SlackSession {
|
|||
|
||||
void handleSlackChannelCreate(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data);
|
||||
void handleSlackChannelList(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data);
|
||||
void handleSlackChannelInvite(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data);
|
||||
|
||||
void sendOnlineBuddies();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue