bot_mob 0.1.2 → 0.1.3
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/ambassador.rb +16 -0
- data/lib/bot_mob/ambassadors/slack.rb +42 -0
- data/lib/bot_mob/application.rb +8 -2
- data/lib/bot_mob/authority.rb +9 -23
- data/lib/bot_mob/bot.rb +13 -16
- data/lib/bot_mob/version.rb +1 -1
- data/lib/bot_mob.rb +5 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d0769d0dc57a2e5348d3cd9ee7490d05e09c01c9
|
4
|
+
data.tar.gz: ddd3ffc84ed4fc254a024a9773bc1dadde5d9924
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58c88902f282c873274b4865b3ed03d2161d315ba44e177aaa0297221c7b39c3672294b5205cf15bd2ad352ffc4ac62d1595f00e98ce92642e065de56e2fee6c
|
7
|
+
data.tar.gz: 0a0e3d6796e0081cd58b1795f667c708a157ca8cc439a754df78efed94038c6cb046c41b36f186e25b612aceccc66919710b2e478e8bb1359e4dc9865ef7d087
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module BotMob
|
2
|
+
class Ambassador
|
3
|
+
NETWORKS = [:slack]
|
4
|
+
|
5
|
+
def self.setup(network, code)
|
6
|
+
raise BotMob::InvalidNetworkError unless NETWORKS.include?(network.to_s.to_sym)
|
7
|
+
send("setup_#{network}", code)
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def self.setup_slack(code)
|
13
|
+
BotMob::Ambassador::Slack.new(code)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module BotMob
|
2
|
+
module Ambassadors
|
3
|
+
class Slack
|
4
|
+
def initialize(code)
|
5
|
+
@code = code
|
6
|
+
end
|
7
|
+
|
8
|
+
def token
|
9
|
+
oauth_response && oauth_response.bot_access_token
|
10
|
+
end
|
11
|
+
|
12
|
+
def external_id
|
13
|
+
oauth_response && oauth_response.bot_user_id
|
14
|
+
end
|
15
|
+
|
16
|
+
def success?
|
17
|
+
external_id && token
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def oauth_response
|
23
|
+
return @oauth_response if defined?(@oauth_response)
|
24
|
+
|
25
|
+
response = client.oauth_access({
|
26
|
+
code: @code,
|
27
|
+
client_id: ENV['CLIENT_ID'],
|
28
|
+
client_secret: ENV['CLIENT_SECRET']
|
29
|
+
})
|
30
|
+
|
31
|
+
@oauth_response = response.bot
|
32
|
+
rescue Slack::Web::Api::Error => e
|
33
|
+
puts e.message
|
34
|
+
nil
|
35
|
+
end
|
36
|
+
|
37
|
+
def client
|
38
|
+
@client ||= Slack::Web::Client.new
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/bot_mob/application.rb
CHANGED
@@ -3,12 +3,12 @@ module BotMob
|
|
3
3
|
#
|
4
4
|
# This is the base class for BotMob.
|
5
5
|
class Application
|
6
|
-
attr_reader :bot_class, :bots
|
6
|
+
attr_reader :bot_class, :bots
|
7
7
|
|
8
8
|
def initialize(bot_class)
|
9
9
|
@bot_class = bot_class
|
10
10
|
@bots = {}
|
11
|
-
|
11
|
+
|
12
12
|
Install.all.each { |install| register(install) }
|
13
13
|
end
|
14
14
|
|
@@ -34,5 +34,11 @@ module BotMob
|
|
34
34
|
@bots[install.user_id] ||= bot
|
35
35
|
@bots[install.user_id].refresh
|
36
36
|
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def wire
|
41
|
+
@wire ||= BotMob::Wire.new
|
42
|
+
end
|
37
43
|
end
|
38
44
|
end
|
data/lib/bot_mob/authority.rb
CHANGED
@@ -4,38 +4,24 @@ 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
|
-
attr_accessor :
|
7
|
+
attr_accessor :network, :ambassador
|
8
8
|
|
9
|
-
def initialize(code)
|
10
|
-
@
|
9
|
+
def initialize(network, code)
|
10
|
+
@ambassador = BotMob::Ambassador.setup(network, code)
|
11
11
|
end
|
12
12
|
|
13
13
|
def process
|
14
|
-
return
|
15
|
-
response = request_access.bot
|
14
|
+
return unless ambassador.success?
|
16
15
|
|
17
|
-
Install.
|
18
|
-
|
19
|
-
|
20
|
-
BotMob::Wire.new.publish(user_id: install.user_id)
|
21
|
-
end
|
22
|
-
rescue Slack::Web::Api::Error => e
|
23
|
-
puts e.message
|
24
|
-
nil
|
16
|
+
install = Install.create_with_ambassador(ambassador)
|
17
|
+
# check for install's success
|
18
|
+
wire.publish(external_id: install.external_id)
|
25
19
|
end
|
26
20
|
|
27
21
|
private
|
28
22
|
|
29
|
-
def
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
def auth_params
|
34
|
-
{ client_id: ENV['CLIENT_ID'], client_secret: ENV['CLIENT_SECRET'], code: code }
|
35
|
-
end
|
36
|
-
|
37
|
-
def client
|
38
|
-
@client ||= Slack::Web::Client.new
|
23
|
+
def wire
|
24
|
+
@wire ||= BotMob::Wire.new
|
39
25
|
end
|
40
26
|
end
|
41
27
|
end
|
data/lib/bot_mob/bot.rb
CHANGED
@@ -4,7 +4,7 @@ module BotMob
|
|
4
4
|
# This is the base for all bots that will connect
|
5
5
|
# to Slack.
|
6
6
|
class Bot
|
7
|
-
attr_reader :user_id, :state
|
7
|
+
attr_reader :user_id, :state
|
8
8
|
|
9
9
|
def initialize(user_id, token)
|
10
10
|
@user_id = user_id
|
@@ -21,17 +21,16 @@ module BotMob
|
|
21
21
|
client.start_async
|
22
22
|
rescue Slack::Web::Api::Error => e
|
23
23
|
logger.info e.message
|
24
|
-
|
25
|
-
@state = :inactive
|
24
|
+
set_state :inactive
|
26
25
|
end
|
27
26
|
|
28
27
|
def connect
|
29
|
-
|
28
|
+
set_state :connecting
|
30
29
|
establish_connection
|
31
30
|
end
|
32
31
|
|
33
32
|
def reconnect
|
34
|
-
|
33
|
+
set_state :reconnecting
|
35
34
|
@client = Slack::RealTime::Client.new(token: @token)
|
36
35
|
setup
|
37
36
|
establish_connection
|
@@ -93,11 +92,9 @@ module BotMob
|
|
93
92
|
def setup
|
94
93
|
@state = :waiting
|
95
94
|
|
96
|
-
client.on :hello
|
97
|
-
|
98
|
-
|
99
|
-
logger.info "State[#{user_id}] - #{state}"
|
100
|
-
end
|
95
|
+
client.on :hello { set_state(:connected) }
|
96
|
+
client.on :close { set_state(:disconnecting) }
|
97
|
+
client.on :closed { set_state(:closed) }
|
101
98
|
|
102
99
|
client.on :message do |data|
|
103
100
|
message = BotMob::InboundMessage.new(:websocket, data)
|
@@ -108,15 +105,15 @@ module BotMob
|
|
108
105
|
handle(message)
|
109
106
|
end
|
110
107
|
end
|
108
|
+
end
|
111
109
|
|
112
|
-
|
113
|
-
|
110
|
+
def set_state(state)
|
111
|
+
if state == :connected
|
112
|
+
logger.info "Successfully connected, '#{client.team.name}' team at https://#{client.team.domain}.slack.com."
|
114
113
|
end
|
115
114
|
|
116
|
-
|
117
|
-
|
118
|
-
@state = :closed
|
119
|
-
end
|
115
|
+
logger.info "State[#{user_id}] - #{state}"
|
116
|
+
@state = state
|
120
117
|
end
|
121
118
|
|
122
119
|
def client
|
data/lib/bot_mob/version.rb
CHANGED
data/lib/bot_mob.rb
CHANGED
@@ -9,12 +9,17 @@ require 'bot_mob/version'
|
|
9
9
|
# BotMob provides all the tools you need to easily
|
10
10
|
# connect to chat networks
|
11
11
|
module BotMob
|
12
|
+
autoload :Ambassador, 'bot_mob/ambassador'
|
12
13
|
autoload :Application, 'bot_mob/application'
|
13
14
|
autoload :Authority, 'bot_mob/authority'
|
14
15
|
autoload :Bot, 'bot_mob/bot'
|
15
16
|
autoload :InboundMessage, 'bot_mob/inbound_message'
|
16
17
|
autoload :Wire, 'bot_mob/wire'
|
17
18
|
|
19
|
+
module Ambassadors
|
20
|
+
autoload :Slack, 'bot_mob/ambassadors/slack'
|
21
|
+
end
|
22
|
+
|
18
23
|
def self.root
|
19
24
|
File.expand_path('../..', __FILE__)
|
20
25
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bot_mob
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Werner
|
@@ -181,6 +181,8 @@ files:
|
|
181
181
|
- bin/setup
|
182
182
|
- bot_mob.gemspec
|
183
183
|
- lib/bot_mob.rb
|
184
|
+
- lib/bot_mob/ambassador.rb
|
185
|
+
- lib/bot_mob/ambassadors/slack.rb
|
184
186
|
- lib/bot_mob/application.rb
|
185
187
|
- lib/bot_mob/authority.rb
|
186
188
|
- lib/bot_mob/bot.rb
|
@@ -206,7 +208,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
206
208
|
version: '0'
|
207
209
|
requirements: []
|
208
210
|
rubyforge_project:
|
209
|
-
rubygems_version: 2.
|
211
|
+
rubygems_version: 2.5.1
|
210
212
|
signing_key:
|
211
213
|
specification_version: 4
|
212
214
|
summary: Build your bots
|