driftwood 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 57ac1f7190f47c6413f6fe8c53cb834fc62c4e2f
4
- data.tar.gz: 6ca438be8979c39b7061c908ebca7b0c2296c76d
3
+ metadata.gz: 77ea40594b8549245f238cc8fb69313ee1038994
4
+ data.tar.gz: 39f9ca21844888e5363bb25fe0fcb175881f4197
5
5
  SHA512:
6
- metadata.gz: 6f9fec93e433aef6f3ff051da63abffba7293440d62d98c791fb7f356c259d188315a416ffc84a4d429274fca89ffc7961f455a46adf2c1e30909bfdf61ebd1e
7
- data.tar.gz: 241f288468773cd7529988eec46eef53f7fa2703e01f4c3f45fe6f272d595e0d919a2c228b8d8c2bc4ba7d15c0da4786c9c8372ac183a4c631f7e313d558a8cb
6
+ metadata.gz: 3c9ff226d67968a50609f4f90e18e2764b8ebc05ce840cf2c8d2b5b0ab2dd6bad347401a0ea623ab447167addc724c4619d9ea35872b1f0176d067d916463b50
7
+ data.tar.gz: 07a27a94fe63a26e15f1d4921850fb13059fc510c82a2cd43426754c58bde9172ee458007e9e9815362297ede658ba48d8bfd7b8a606633c4b1b416f7aeb50c9
@@ -1,3 +1,10 @@
1
+ # v0.0.8
2
+
3
+ * b296fcc Ben Ford 89 seconds ago BUGFIX: only respond to own messages (HEAD -> master)
4
+ * d0ff98b Ben Ford 2 minutes ago add simple templatable onboarding messages
5
+ * dcae81e Ben Ford 3 minutes ago add ability to run multiple instances for dev purposes
6
+ * 0c90fcf Ben Ford 4 minutes ago move logger into its own plugin
7
+
1
8
  # v0.0.7
2
9
 
3
10
  Add barebones plugin system
data/README.md CHANGED
@@ -58,7 +58,7 @@ Example configuration:
58
58
  ### Setting up integration
59
59
 
60
60
  The installation steps from https://github.com/slackapi/Slack-Ruby-Onboarding-Tutorial
61
- can be followed with a few obvious modifications. Configure and application for
61
+ can be followed with a few obvious modifications. Configure an application for
62
62
  your team, and configure the service before starting it up.
63
63
 
64
64
  Once it's running, load up the webpage and press the **Add to Slack** button
@@ -22,6 +22,7 @@ class Driftwood < Sinatra::Base
22
22
  $logger.info "Starting Driftwood v#{Driftwood::VERSION}"
23
23
  @bigquery = Driftwood::Bigquery.new(settings.gcloud)
24
24
  @slack = Driftwood::Slack.new(settings.slack)
25
+ @app_id = settings.slack[:client_id]
25
26
  @slack.authorize(cached_auth)
26
27
 
27
28
  @plugins = settings.plugins.map do |plugin, config|
@@ -58,45 +59,6 @@ class Driftwood < Sinatra::Base
58
59
  end
59
60
  end
60
61
 
61
- # logging handler
62
- @slack.register_handler('message') do |team_id, event_data|
63
- next unless event_data['channel_type'] == 'channel'
64
- $logger.debug "Logged message for #{team_id}: #{event_data['text']}"
65
- @bigquery.insert_message(@slack.normalize_message(team_id, event_data))
66
- end
67
-
68
- # register new users
69
- @slack.register_handler('team_join') do |team_id, event_data|
70
- user = @slack.normalize_user(event_data['user'])
71
- $logger.info "Registered new user: #{user['name']} (#{user['real_name']})"
72
- @bigquery.insert_user(user)
73
- end
74
-
75
- # Do this in a thread so it doesn't block initialization
76
- # These methods may take a long time to complete
77
- Thread.new do
78
- begin
79
- $logger.info "Starting data synchronization..."
80
- sync_messages
81
- sync_channels
82
- sync_users
83
- rescue => e
84
- $logger.error e.message
85
- $logger.debug e.backtrace.join("\n")
86
- end
87
-
88
- loop do
89
- sleep 86400 # Once a day; 60 * 60 * 24
90
- begin
91
- $logger.info "Purging deleted users..."
92
- @bigquery.purge_deleted_users
93
- rescue => e
94
- $logger.error e.message
95
- $logger.debug e.backtrace.join("\n")
96
- end
97
- end
98
- end
99
-
100
62
  end
101
63
 
102
64
  get '/' do
@@ -138,36 +100,12 @@ class Driftwood < Sinatra::Base
138
100
 
139
101
  helpers do
140
102
  def cached_auth
141
- @bigquery.get_auth_tokens()
103
+ @bigquery.get_auth_tokens(@app_id)
142
104
  end
143
105
 
144
106
  def save_auth_cache(auth)
145
- @bigquery.insert_team(auth)
146
- end
147
-
148
- def sync_channels
149
- @slack.all_channels.each do |channel|
150
- @bigquery.insert_channel(channel)
151
- end
152
- $logger.info "All channels synced."
153
- end
154
-
155
- def sync_users
156
- @slack.all_users.each do |user|
157
- @bigquery.insert_user(user)
158
- end
159
- @bigquery.reconcile_user_creations
160
- $logger.info "All users synced."
161
- end
162
-
163
- def sync_messages
164
- starting_from = @bigquery.newest_message_timestamp
165
- @slack.all_messages(starting_from).each do |message|
166
- @bigquery.insert_message(message)
167
- end
168
- $logger.info "All messages synced."
107
+ @bigquery.insert_team(auth, @app_id)
169
108
  end
170
-
171
109
  end
172
110
 
173
111
  end
@@ -33,6 +33,7 @@ class Driftwood::Bigquery
33
33
  s.string "user_access_token", mode: :required
34
34
  s.string "bot_user_id", mode: :required
35
35
  s.string "bot_access_token", mode: :required
36
+ s.string "application_id", mode: :required
36
37
  end
37
38
  end
38
39
 
@@ -116,14 +117,16 @@ class Driftwood::Bigquery
116
117
  $logger.info "Bigquery initialization complete"
117
118
  end
118
119
 
119
- def get_auth_tokens()
120
- @dataset.query("SELECT * FROM slack_teams").to_a rescue []
120
+ def get_auth_tokens(application_id)
121
+ @dataset.query("SELECT * FROM slack_teams WHERE application_id = '#{application_id}'").to_a rescue []
121
122
  end
122
123
 
123
- def insert_team(auth_token)
124
+ def insert_team(auth_token, application_id)
125
+ auth_token[:application_id] = application_id
126
+
124
127
  # We can take the 2.5s delete-before-insert here because it only happens when
125
128
  # authorizing a new team integration.
126
- @dataset.query("DELETE FROM slack_teams WHERE team_id = '#{auth_token[:team_id]}'")
129
+ @dataset.query("DELETE FROM slack_teams WHERE team_id = '#{auth_token[:team_id]}' AND application_id = '#{application_id}'")
127
130
  @teams.insert(auth_token).success?
128
131
  end
129
132
 
@@ -0,0 +1,70 @@
1
+ class Driftwood::Plugin::Logger < Driftwood::Plugin
2
+
3
+ def initialize(config=nil, slack=nil, bigquery=nil)
4
+ super(config, slack, bigquery)
5
+ @about = 'Logs all public messages to BigQuery.'
6
+
7
+ # logging handler
8
+ @slack.register_handler('message') do |team_id, event_data|
9
+ next unless event_data['channel_type'] == 'channel'
10
+ $logger.debug "Logged message for #{team_id}: #{event_data['text']}"
11
+ @bigquery.insert_message(@slack.normalize_message(team_id, event_data))
12
+ end
13
+
14
+ # register new users
15
+ @slack.register_handler('team_join') do |team_id, event_data|
16
+ user = @slack.normalize_user(event_data['user'])
17
+ $logger.info "Registered new user: #{user['name']} (#{user['real_name']})"
18
+ @bigquery.insert_user(user)
19
+ end
20
+
21
+ # Do this in a thread so it doesn't block initialization
22
+ # These methods may take a long time to complete
23
+ Thread.new do
24
+ begin
25
+ $logger.info "Starting data synchronization..."
26
+ sync_messages
27
+ sync_channels
28
+ sync_users
29
+ rescue => e
30
+ $logger.error e.message
31
+ $logger.debug e.backtrace.join("\n")
32
+ end
33
+
34
+ loop do
35
+ sleep 86400 # Once a day; 60 * 60 * 24
36
+ begin
37
+ $logger.info "Purging deleted users..."
38
+ @bigquery.purge_deleted_users
39
+ rescue => e
40
+ $logger.error e.message
41
+ $logger.debug e.backtrace.join("\n")
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ def sync_channels
48
+ @slack.all_channels.each do |channel|
49
+ @bigquery.insert_channel(channel)
50
+ end
51
+ $logger.info "All channels synced."
52
+ end
53
+
54
+ def sync_users
55
+ @slack.all_users.each do |user|
56
+ @bigquery.insert_user(user)
57
+ end
58
+ @bigquery.reconcile_user_creations
59
+ $logger.info "All users synced."
60
+ end
61
+
62
+ def sync_messages
63
+ starting_from = @bigquery.newest_message_timestamp
64
+ @slack.all_messages(starting_from).each do |message|
65
+ @bigquery.insert_message(message)
66
+ end
67
+ $logger.info "All messages synced."
68
+ end
69
+
70
+ end
@@ -6,7 +6,7 @@ class Driftwood::Plugin::Netserv < Driftwood::Plugin
6
6
  @usage = 'Available commands: hello, ping, echo <message>, version.'
7
7
 
8
8
  @slack.register_handler('message') do |team_id, event_data|
9
- next unless event_data['channel_type'] == 'im'
9
+ next unless @slack.to_me?(event_data)
10
10
 
11
11
  user = event_data['user']
12
12
  text = event_data['text']
@@ -16,8 +16,8 @@ class Driftwood::Plugin::Netserv < Driftwood::Plugin
16
16
  @slack.send_response(team_id, user, "Hi there, #{@slack.real_name(team_id, user)}!")
17
17
  when /^ping$/i
18
18
  @slack.send_response(team_id, user, "Pong")
19
- when /^echo$/i
20
- @slack.send_response(team_id, user, "Echo response: #{text.sub(/^echo /, '')}")
19
+ when /^echo (.*)/i
20
+ @slack.send_response(team_id, user, "Echo response: #{$1}")
21
21
  when /^version$/i
22
22
  @slack.send_response(team_id, user, "Driftwood v#{Driftwood::VERSION}")
23
23
  end
@@ -1,3 +1,5 @@
1
+ require 'erb'
2
+
1
3
  class Driftwood::Plugin::Onboard < Driftwood::Plugin
2
4
 
3
5
  def initialize(config=nil, slack=nil, bigquery=nil)
@@ -7,8 +9,18 @@ class Driftwood::Plugin::Onboard < Driftwood::Plugin
7
9
  @slack.register_handler('team_join') do |team_id, event_data|
8
10
  user = @slack.normalize_user(event_data['user'])
9
11
  $logger.info "User #{user['name']} (#{user['real_name']}) joined the workspace"
10
- @slack.send_response(team_id, event_data['user'], "--- a handy welcome message ---")
11
- # send them welcome infos
12
+
13
+ filename = File.expand_path(config[:workspace]) rescue nil
14
+ if filename
15
+ begin
16
+ $logger.debug "Sending team welcome from #{filename}"
17
+ template = ERB.new(File.read(filename))
18
+ @slack.send_response(team_id, event_data['user'], template.result(binding))
19
+ rescue => e
20
+ $logger.info "Sending onboarding welcome failed: #{e.message}"
21
+ $logger.debug e.backtrace.join("\n")
22
+ end
23
+ end
12
24
  end
13
25
 
14
26
  @slack.register_handler('member_joined_channel') do |team_id, event_data|
@@ -16,8 +28,18 @@ class Driftwood::Plugin::Onboard < Driftwood::Plugin
16
28
  user = @slack.normalize_user(user)
17
29
  channel = @slack.channel_name(event_data['team'], event_data['channel'])
18
30
  $logger.info "User #{user['name']} (#{user['real_name']}) joined ##{channel}"
19
- @slack.send_response(team_id, event_data['channel'], "--- a handy welcome message ---")
20
- # send them welcome infos
31
+
32
+ filename = File.expand_path(config[:channels][channel]) rescue nil
33
+ if filename
34
+ begin
35
+ $logger.debug "Sending channel welcome from #{filename}"
36
+ template = ERB.new(File.read(filename))
37
+ @slack.send_response(team_id, event_data['user'], template.result(binding))
38
+ rescue => e
39
+ $logger.info "Sending channel welcome failed: #{e.message}"
40
+ $logger.debug e.backtrace.join("\n")
41
+ end
42
+ end
21
43
  end
22
44
 
23
45
  end
@@ -304,6 +304,16 @@ class Driftwood::Slack
304
304
  end
305
305
  end
306
306
 
307
+ def my_ims
308
+ @teams.map do |team_id, team|
309
+ team[:client].im_list['ims'].map { |im| im['id'] }
310
+ end.flatten
311
+ end
312
+
313
+ def to_me?(event_data)
314
+ return false unless event_data['channel_type'] == 'im'
315
+ my_ims.include? event_data['channel']
316
+ end
307
317
 
308
318
  def shell
309
319
  require 'pry'
@@ -1,4 +1,4 @@
1
1
  class Driftwood
2
- VERSION = '0.0.7'
2
+ VERSION = '0.0.8'
3
3
  end
4
4
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: driftwood
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Ford
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-14 00:00:00.000000000 Z
11
+ date: 2018-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
@@ -72,9 +72,9 @@ files:
72
72
  - lib/driftwood/monkeypatches.rb
73
73
  - lib/driftwood/plugin.rb
74
74
  - lib/driftwood/plugin/debug.rb
75
+ - lib/driftwood/plugin/logger.rb
75
76
  - lib/driftwood/plugin/netserv.rb
76
77
  - lib/driftwood/plugin/onboard.rb
77
- - lib/driftwood/plugin/ping.rb
78
78
  - lib/driftwood/slack.rb
79
79
  - lib/driftwood/version.rb
80
80
  - public/driftwood.jpg
File without changes