Changeset - 52347fa379b0
[Not reviewed]
0 6 0
Jan Kaluza - 9 years ago 2016-01-27 16:08:58
jkaluza@redhat.com
Slack: Invite our bot to main SlackChannel once it is created
6 files changed with 36 insertions and 12 deletions:
0 comments (0 inline, 0 general)
spectrum/src/frontends/slack/SlackAPI.cpp
Show inline comments
 
@@ -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);
spectrum/src/frontends/slack/SlackAPI.h
Show inline comments
 
@@ -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);
spectrum/src/frontends/slack/SlackRTM.cpp
Show inline comments
 
@@ -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);
spectrum/src/frontends/slack/SlackRTM.h
Show inline comments
 
@@ -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;
spectrum/src/frontends/slack/SlackSession.cpp
Show inline comments
 
@@ -215,6 +215,15 @@ 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::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());
 
	presence->setType(Swift::Presence::Available);
 
	presence->addPayload(boost::shared_ptr<Swift::Payload>(new Swift::MUCPayload()));
 
	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()) {
 
@@ -223,12 +232,7 @@ void SlackSession::handleSlackChannelCreate(HTTPRequest *req, bool ok, rapidjson
 
	}
 

	
 
	m_slackChannel = channelId;
 
	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));
 
}
 

	
 
void SlackSession::handleSlackChannelList(HTTPRequest *req, bool ok, rapidjson::Document &resp, const std::string &data) {
 
@@ -237,12 +241,7 @@ void SlackSession::handleSlackChannelList(HTTPRequest *req, bool ok, rapidjson::
 

	
 
	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));
spectrum/src/frontends/slack/SlackSession.h
Show inline comments
 
@@ -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();
 

	
0 comments (0 inline, 0 general)