bot_mob 0.1.14 → 0.2.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 +4 -4
- data/lib/bot_mob/application.rb +12 -29
- data/lib/bot_mob/authority.rb +3 -4
- data/lib/bot_mob/bot.rb +1 -1
- data/lib/bot_mob/connection.rb +2 -2
- data/lib/bot_mob/install.rb +6 -2
- data/lib/bot_mob/roster.rb +55 -0
- data/lib/bot_mob/version.rb +1 -1
- data/lib/bot_mob/wire.rb +1 -1
- data/lib/bot_mob.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd3908ac2430717821fdeaea597de6a9e9352825
|
4
|
+
data.tar.gz: 015641eeafc749d5add8796838553f75a129f65c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db17341fa132c62760e7866dd9d558b3a8f190f41eb0b5d6b3ccdf0608ef0d154bf1df0b51bd0867d521c4da71ddd80a81a54959358bc2493d713ba6f90982c2
|
7
|
+
data.tar.gz: 4503c2784258e2f5cac51016b775fad1019a30c87d36cf34e6ac45ec86d25d01f771a898b43fb3bfa0b18cf744ce19e66e1e49ece5ffb87ffccfa2cef55dd09b
|
data/lib/bot_mob/application.rb
CHANGED
@@ -1,50 +1,33 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
1
3
|
module BotMob
|
2
4
|
# ## BotMob::Application
|
3
5
|
#
|
4
6
|
# This is the base class for BotMob.
|
5
7
|
class Application
|
6
|
-
|
8
|
+
extend Forwardable
|
7
9
|
|
8
|
-
|
9
|
-
@bot_class = bot_class
|
10
|
-
@bots = {}
|
11
|
-
end
|
10
|
+
def_delegators :roster, :register
|
12
11
|
|
13
12
|
def start!
|
14
13
|
BotMob.logger.info("=> BotMob #{BotMob::VERSION} application starting")
|
15
|
-
|
16
|
-
|
14
|
+
|
15
|
+
roster.load
|
16
|
+
wire.listen do |bot|
|
17
|
+
roster.connect(bot)
|
18
|
+
end
|
17
19
|
|
18
20
|
loop do
|
19
21
|
sleep(10)
|
20
22
|
# Avoid polling at all for the time being
|
21
|
-
#
|
23
|
+
# roster.load if roster.available? && !wire.available?
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
25
|
-
def connect(auth)
|
26
|
-
external_id, token = auth['external_id'], auth['token']
|
27
|
-
BotMob.logger.info "Register bot: #{external_id}"
|
28
|
-
bot = bot_class.new(external_id, token)
|
29
|
-
@bots[external_id] ||= bot
|
30
|
-
@bots[external_id].refresh
|
31
|
-
end
|
32
|
-
|
33
|
-
def registry_available?
|
34
|
-
@registry_available.nil? || @registry_available
|
35
|
-
end
|
36
|
-
|
37
27
|
private
|
38
28
|
|
39
|
-
def
|
40
|
-
|
41
|
-
BotMob::Install.all.each { |install| connect(install.auth) }
|
42
|
-
BotMob.logger.info '=> Registry loaded'
|
43
|
-
@registry_available = true
|
44
|
-
rescue ActiveRecord::ConnectionNotEstablished => e
|
45
|
-
@registry_available = false
|
46
|
-
BotMob.logger.info "=> Database unavailable, skipping registry"
|
47
|
-
end
|
29
|
+
def roster
|
30
|
+
@roster ||= BotMob::Roster.new
|
48
31
|
end
|
49
32
|
|
50
33
|
def wire
|
data/lib/bot_mob/authority.rb
CHANGED
@@ -4,17 +4,16 @@ module BotMob
|
|
4
4
|
# The Authority class will process an access code
|
5
5
|
# and retrieve an access token from Slack
|
6
6
|
class Authority
|
7
|
-
|
7
|
+
attr_reader :network, :ambassador
|
8
8
|
|
9
9
|
def initialize(network, code)
|
10
10
|
@ambassador = BotMob::Ambassador.setup(network, code)
|
11
11
|
end
|
12
12
|
|
13
|
-
def process
|
13
|
+
def process(bot_class)
|
14
14
|
return unless ambassador.success?
|
15
15
|
|
16
|
-
|
17
|
-
wire.publish(external_id: install.external_id, token: install.token)
|
16
|
+
wire.publish(ambassador.auth.merge(bot_class: bot_class.to_s))
|
18
17
|
end
|
19
18
|
|
20
19
|
private
|
data/lib/bot_mob/bot.rb
CHANGED
data/lib/bot_mob/connection.rb
CHANGED
@@ -77,7 +77,7 @@ module BotMob
|
|
77
77
|
logger.info "Successfully connected, '#{client.team.name}' team at https://#{client.team.domain}.slack.com."
|
78
78
|
end
|
79
79
|
|
80
|
-
logger.info "State[#{bot.external_id}] - #{state}"
|
80
|
+
logger.info "State[#{bot.class.to_s}##{bot.external_id}] - #{state}"
|
81
81
|
@state = state
|
82
82
|
end
|
83
83
|
|
@@ -93,7 +93,7 @@ module BotMob
|
|
93
93
|
if bot.respond?(message)
|
94
94
|
logger.info("Received message at #{Time.now}")
|
95
95
|
logger.info(" Parameters: #{message.data}")
|
96
|
-
bot.
|
96
|
+
bot.respond(message)
|
97
97
|
end
|
98
98
|
end
|
99
99
|
end
|
data/lib/bot_mob/install.rb
CHANGED
@@ -2,9 +2,13 @@ module BotMob
|
|
2
2
|
class Install < ActiveRecord::Base
|
3
3
|
self.table_name = "botmob_installs"
|
4
4
|
|
5
|
+
def self.registered_bot(auth)
|
6
|
+
where(bot_class: auth['bot_class'], external_id: auth['external_id'])
|
7
|
+
end
|
8
|
+
|
5
9
|
def self.create_with_auth(auth)
|
6
|
-
|
7
|
-
i.token = auth[
|
10
|
+
registered_bot(auth).first_or_initialize.tap do |i|
|
11
|
+
i.token = auth['token']
|
8
12
|
i.save!
|
9
13
|
end
|
10
14
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module BotMob
|
2
|
+
class Roster
|
3
|
+
attr_reader :registry
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@registry = {}
|
7
|
+
@bots = {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def connect(auth)
|
11
|
+
class_name = auth['bot_class'].to_s
|
12
|
+
bot_class = registry[class_name]
|
13
|
+
external_id, token = auth['external_id'], auth['token']
|
14
|
+
BotMob.logger.info "Initializing #{bot_class}: #{external_id}"
|
15
|
+
|
16
|
+
puts "Registry: #{registry.inspect}"
|
17
|
+
puts "Using registered bot: #{bot_class.inspect}"
|
18
|
+
unless auth.is_a?(BotMob::Install)
|
19
|
+
BotMob.logger.info "Updating #{bot_class} bot record..."
|
20
|
+
BotMob::Install.create_with_auth(auth)
|
21
|
+
end
|
22
|
+
|
23
|
+
puts "Setting up a new bot with:\n #{auth.inspect}\n #{external_id}\n #{token}"
|
24
|
+
bot = bot_class.new(external_id, token)
|
25
|
+
@bots["#{bot_class}##{external_id}"] ||= bot
|
26
|
+
@bots["#{bot_class}##{external_id}"].refresh
|
27
|
+
end
|
28
|
+
|
29
|
+
def load
|
30
|
+
begin
|
31
|
+
BotMob::Install.all.each do |install|
|
32
|
+
connect(install)
|
33
|
+
end
|
34
|
+
|
35
|
+
BotMob.logger.info '=> Roster loaded'
|
36
|
+
@available = true
|
37
|
+
rescue ActiveRecord::ConnectionNotEstablished => e
|
38
|
+
@available = false
|
39
|
+
BotMob.logger.info "=> Database unavailable, skipping roster load"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def [](key)
|
44
|
+
registry[key.to_s]
|
45
|
+
end
|
46
|
+
|
47
|
+
def register(bot_class)
|
48
|
+
@registry[bot_class.to_s] = bot_class
|
49
|
+
end
|
50
|
+
|
51
|
+
def available?
|
52
|
+
@available.nil? || @available
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/bot_mob/version.rb
CHANGED
data/lib/bot_mob/wire.rb
CHANGED
data/lib/bot_mob.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bot_mob
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Werner
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bunny
|
@@ -231,6 +231,7 @@ files:
|
|
231
231
|
- lib/bot_mob/connection.rb
|
232
232
|
- lib/bot_mob/inbound_message.rb
|
233
233
|
- lib/bot_mob/install.rb
|
234
|
+
- lib/bot_mob/roster.rb
|
234
235
|
- lib/bot_mob/slack/ambassador.rb
|
235
236
|
- lib/bot_mob/version.rb
|
236
237
|
- lib/bot_mob/wire.rb
|