summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZ.J. van de Weg <zegerjan@gitlab.com>2016-09-05 13:36:09 +0200
committerZ.J. van de Weg <zegerjan@gitlab.com>2016-09-05 13:44:52 +0200
commitcaee5b00c35892c1a11fe04820f30580ab808723 (patch)
tree060385e5710e93f23f04046ef7340fa72cac281b
parentbeb0b666dc000d51b7ed0eb264bd04ca466117d1 (diff)
downloadgitlab-ce-zj-slack-bot.tar.gz
PoC Pong Slack botzj-slack-bot
This is a very basic Proof-of-Concept for a Slack bot in GitLab. Main focus of this commit just to get something running and iterate from this point on. If you'd like to test this, you'll need a Slack team and a bot with a token/key. In case you're a GitLab team member, I can supply these to you. [ci skip]
-rw-r--r--Gemfile3
-rw-r--r--Gemfile.lock17
-rwxr-xr-xbin/setup_bot10
-rwxr-xr-xbin/slack_server30
4 files changed, 60 insertions, 0 deletions
diff --git a/Gemfile b/Gemfile
index 620338e5997..939a92ce1e8 100644
--- a/Gemfile
+++ b/Gemfile
@@ -172,6 +172,9 @@ gem 'gemnasium-gitlab-service', '~> 0.2'
# Slack integration
gem 'slack-notifier', '~> 1.2.0'
+# Slack chatbot
+gem 'slack-bot-server'
+
# Asana integration
gem 'asana', '~> 0.4.0'
diff --git a/Gemfile.lock b/Gemfile.lock
index 28ede86b3ba..36251ad0280 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -204,6 +204,9 @@ GEM
faraday_middleware-multi_json (0.0.6)
faraday_middleware
multi_json
+ faye-websocket (0.10.4)
+ eventmachine (>= 0.12.0)
+ websocket-driver (>= 0.5.1)
ffaker (2.0.0)
ffi (1.9.10)
flay (2.6.1)
@@ -290,6 +293,7 @@ GEM
omniauth (~> 1.0)
pyu-ruby-sasl (~> 0.0.3.1)
rubyntlm (~> 0.3)
+ gli (2.14.0)
globalid (0.3.7)
activesupport (>= 4.1.0)
gollum-grit_adapter (1.0.1)
@@ -683,7 +687,19 @@ GEM
rack (~> 1.5)
rack-protection (~> 1.4)
tilt (>= 1.3, < 3)
+ slack-bot-server (0.4.7)
+ faye-websocket (~> 0.10)
+ multi_json
+ slack-ruby-client (~> 0.7)
slack-notifier (1.2.1)
+ slack-ruby-client (0.7.7)
+ activesupport
+ faraday
+ faraday_middleware
+ gli
+ hashie
+ json
+ websocket-driver
slop (3.6.0)
spinach (0.8.10)
colorize
@@ -953,6 +969,7 @@ DEPENDENCIES
sidekiq-cron (~> 0.4.0)
simplecov (= 0.12.0)
sinatra (~> 1.4.4)
+ slack-bot-server
slack-notifier (~> 1.2.0)
spinach-rails (~> 0.2.1)
spinach-rerun-reporter (~> 0.0.2)
diff --git a/bin/setup_bot b/bin/setup_bot
new file mode 100755
index 00000000000..4de2783a1ce
--- /dev/null
+++ b/bin/setup_bot
@@ -0,0 +1,10 @@
+#!/usr/bin/env ruby
+
+require 'slack_bot_server'
+require 'slack_bot_server/redis_queue'
+require 'slack_bot_server/remote_control'
+
+queue = SlackBotServer::RedisQueue.new
+slack_remote = SlackBotServer::RemoteControl.new(queue: queue)
+
+slack_remote.add_bot(ENV['SLACK_BOT_KEY'])
diff --git a/bin/slack_server b/bin/slack_server
new file mode 100755
index 00000000000..2e6a0e08c13
--- /dev/null
+++ b/bin/slack_server
@@ -0,0 +1,30 @@
+#!/usr/bin/env ruby
+
+require 'sidekiq'
+
+require 'slack_bot_server'
+require 'slack_bot_server/redis_queue'
+
+module SlackBotServer
+ class PongServer < SlackBotServer::Bot
+ username 'Tanuki'
+
+ on_mention do |data|
+ reply text: "PONG"
+ end
+
+ on_im do |data|
+ reply text: "PONG"
+ end
+ end
+end
+
+queue = SlackBotServer::RedisQueue.new
+server = SlackBotServer::Server.new(queue: queue)
+
+server.on_add do |token|
+ SlackBotServer::PongServer.new(token: token)
+end
+
+# This is a blocking call, code placed after this line will not be executed
+server.start