slack-bot-server 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 08f9edd260732b19478908af280a1d3acf318190
4
- data.tar.gz: 1a82cf329ca85099d093e6fb78090adebc44393f
3
+ metadata.gz: 8b273bf7f49d2acf1743f6ef74ac8e4ca3fc336d
4
+ data.tar.gz: a4b089d850c7a0cceef7fe9d1643ce4843831b5d
5
5
  SHA512:
6
- metadata.gz: a4da0c83a05616f950969841c32b029ca7d60ffc79056fee1178011c31b5e748adf0f7e470772628524aa7e92db62a1521fe17bf30337d136f332558f833ec65
7
- data.tar.gz: 951b05156d6d4365c4d0ef64b6ea8f460efc4b612dab3e9f39c58bfcd5479a49126aa08d41cd400845b174748d53583efe95ca88a4f2688a43367bf0b771b6f4
6
+ metadata.gz: 324c943e0ee722c366a08f5fb14e168b3f4145baf951c127bb9f82a5797236410552edbb6bb342da66b2abb41d79692066cab53ae86c4db5cb1335bbc1cfc06f
7
+ data.tar.gz: 1bfb87e6b026251971e0dd9a35b2601c37845c075910df809112a0c443bdeeafcb4be4cb4c9d5bc0f83daaeafe9defbeef8f6e89e9eea088d3a88396b1be5b36
@@ -0,0 +1,7 @@
1
+ ## 0.3.0
2
+
3
+ Changes:
4
+
5
+ - The `SlackBotServer::Server#on_new_proc` has been renamed to `Server#on_add`
6
+ - The `add` and `add_bot` methods on `SlackBotServer::Server` and `SlackBotServer::RemoteControl` control have been merged as `add_bot`
7
+ - Multiple arguments may be passed via the `add_bot` method to the block given to `SlackBotServer::on_add`
data/README.md CHANGED
@@ -42,7 +42,7 @@ server = SlackBotServer::Server.new(queue: queue)
42
42
 
43
43
  # How your application-specific should be created when the server
44
44
  # is told about a new slack api token to connect with
45
- server.on_new_token do |token|
45
+ server.on_add do |token|
46
46
  # Return a new bot instance to the server. `SimpleBot` is a provided
47
47
  # example bot with some very simple behaviour.
48
48
  SlackBotServer::SimpleBot.new(token: token)
@@ -100,10 +100,17 @@ queue = SlackBotServer::RedisQueue.new(Resque.redis)
100
100
 
101
101
  server = SlackBotServer::Server.new(queue: queue)
102
102
 
103
- server.on_new_token do |token|
103
+ # The `on_add` block can take any number arguments - basically whatever
104
+ # is passed to the `add_bot` method (see below). Since the bot will almost
105
+ # certainly need to use a Slack API token to actually connect to Slack,
106
+ # this should either be one of the arguments, or be retrievable using one
107
+ # of the arguments.
108
+ # It should return a bot (something that responds to `start`); if anything
109
+ # else is returned, it will be ignored.
110
+ server.on_add do |token, team_id|
104
111
  # Our bots need to know some data about the team they are connecting
105
112
  # to, like specifics of their account and their tasks
106
- team_data = Harmonia.find_team_data_by_slack_api_token(token)
113
+ team_data = Harmonia.find_team_data(team_id)
107
114
 
108
115
  # Our bot instance stores that data in an instance variable internally
109
116
  # and then refers to it when it receives messages
@@ -112,8 +119,10 @@ end
112
119
 
113
120
  # When the server starts we need to find all the teams which have already
114
121
  # set up integrations and ensure their bots are launched immediately
115
- Harmonia.all_existing_slack_api_tokens.each do |token|
116
- server.add_token(token)
122
+ Harmonia.teams.each do |team|
123
+ # Any arguments can be passed to the `add_bot` method; they are passed
124
+ # on to the proc supplied to `on_add` for the server.
125
+ server.add_bot(team.slack_token, team.id)
117
126
  end
118
127
 
119
128
  # Actually start the server. The pre-loaded bots will connect immediately,
@@ -132,10 +141,10 @@ control to add the token to the server.
132
141
  # Somewhere within your application
133
142
  queue = SlackBotServer::RedisQueue.new(Redis.new)
134
143
  slack_remote = SlackBotServer::RemoteControl.new(queue: queue)
135
- slack_remote.add_token('user-accounts-slack-api-token')
144
+ slack_remote.add_bot('user-accounts-slack-api-token')
136
145
  ```
137
146
 
138
- This will queue the token to be added by the server, using the `on_new_token` block provided in the server script.
147
+ This will queue a bot be added by the server, using the `on_add` block provided in the server script.
139
148
 
140
149
  When a bot is created and added within the server, it is stored using a key, which the bot class itself can define, but defaults to the slack api token used to instantiate the bot.
141
150
 
@@ -9,8 +9,8 @@ class SlackBotServer::RemoteControl
9
9
  @queue = queue
10
10
  end
11
11
 
12
- def add_token(token)
13
- @queue.push([:add_token, token])
12
+ def add_bot(*args)
13
+ @queue.push([:add_bot, *args])
14
14
  end
15
15
 
16
16
  def remove_bot(key)
@@ -8,12 +8,16 @@ class SlackBotServer::Server
8
8
  def initialize(queue: SlackBotServer::LocalQueue.new)
9
9
  @queue = queue
10
10
  @bots = {}
11
- @new_token_proc = -> (token) { SlackBotServer::SimpleBot.new(token: token) }
11
+ @add_proc = -> (token) { SlackBotServer::SimpleBot.new(token: token) }
12
12
  @running = false
13
13
  end
14
14
 
15
- def on_new_token(&block)
16
- @new_token_proc = block
15
+ # Define the block which should be called when the `add_bot` method is
16
+ # called, or the `add_bot` message is sent via a queue. This block
17
+ # should return a bot (which responds to start), in which case it will
18
+ # be added and started. If anything else is returned, it will be ignored.
19
+ def on_add(&block)
20
+ @add_proc = block
17
21
  end
18
22
 
19
23
  def start
@@ -43,15 +47,13 @@ class SlackBotServer::Server
43
47
  @bots[key.to_sym]
44
48
  end
45
49
 
46
- def add_bot(bot)
47
- log "adding bot #{bot}"
48
- @bots[bot.key.to_sym] = bot
49
- bot.start if @running
50
- end
51
-
52
- def add_token(token)
53
- bot = @new_token_proc.call(token)
54
- add_bot(bot) if bot
50
+ def add_bot(*args)
51
+ bot = @add_proc.call(*args)
52
+ if bot.respond_to?(:start)
53
+ log "adding bot #{bot}"
54
+ @bots[bot.key.to_sym] = bot
55
+ bot.start if @running
56
+ end
55
57
  rescue => e
56
58
  log_error(e)
57
59
  end
@@ -70,26 +72,25 @@ class SlackBotServer::Server
70
72
  def process_instruction(instruction)
71
73
  type, *args = instruction
72
74
  case type.to_sym
73
- when :add_token
74
- token = args.first
75
- log "got new token: '#{token}'"
76
- add_token(token)
75
+ when :add_bot
76
+ log "adding bot: #{args.inspect}"
77
+ add_bot(*args)
77
78
  when :remove_bot
78
79
  key = args.first
79
80
  remove_bot(key)
80
81
  when :broadcast
81
82
  key, message_data = args
82
- log "[#{key}] #{message_data}"
83
+ log "[#{key}] broadcast: #{message_data}"
83
84
  bot = bot(key)
84
85
  bot.broadcast(message_data)
85
86
  when :say
86
87
  key, message_data = args
87
- log "[#{key}] #{message_data}"
88
+ log "[#{key}] say: #{message_data}"
88
89
  bot = bot(key)
89
90
  bot.say(message_data)
90
91
  when :say_to
91
92
  key, user_id, message_data = args
92
- log "[#{key}] (#{user_id}) #{message_data}"
93
+ log "[#{key}] say_to: (#{user_id}) #{message_data}"
93
94
  bot = bot(key)
94
95
  bot.say_to(user_id, message_data)
95
96
  when :call
@@ -1,3 +1,3 @@
1
1
  module SlackBotServer
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slack-bot-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Adam
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-18 00:00:00.000000000 Z
11
+ date: 2016-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: slack-api
@@ -119,6 +119,7 @@ files:
119
119
  - ".gitignore"
120
120
  - ".rspec"
121
121
  - ".travis.yml"
122
+ - CHANGELOG.md
122
123
  - CONTRIBUTING.md
123
124
  - Gemfile
124
125
  - LICENSE.txt
@@ -153,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
153
154
  version: '0'
154
155
  requirements: []
155
156
  rubyforge_project:
156
- rubygems_version: 2.4.5.1
157
+ rubygems_version: 2.5.1
157
158
  signing_key:
158
159
  specification_version: 4
159
160
  summary: A server for hosting slack bots.