diff options
author | Z.J. van de Weg <zegerjan@gitlab.com> | 2016-09-05 13:36:09 +0200 |
---|---|---|
committer | Z.J. van de Weg <zegerjan@gitlab.com> | 2016-09-05 13:44:52 +0200 |
commit | caee5b00c35892c1a11fe04820f30580ab808723 (patch) | |
tree | 060385e5710e93f23f04046ef7340fa72cac281b | |
parent | beb0b666dc000d51b7ed0eb264bd04ca466117d1 (diff) | |
download | gitlab-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-- | Gemfile | 3 | ||||
-rw-r--r-- | Gemfile.lock | 17 | ||||
-rwxr-xr-x | bin/setup_bot | 10 | ||||
-rwxr-xr-x | bin/slack_server | 30 |
4 files changed, 60 insertions, 0 deletions
@@ -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 |