slacky 0.1.4 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/lib/slacky/bot.rb +8 -2
- data/lib/slacky/config.rb +5 -0
- data/lib/slacky/daemon.rb +1 -0
- data/lib/slacky/message.rb +6 -0
- data/lib/slacky/user.rb +48 -17
- data/lib/slacky/version.rb +1 -1
- metadata +4 -4
data/Gemfile.lock
CHANGED
data/lib/slacky/bot.rb
CHANGED
@@ -138,6 +138,7 @@ module Slacky
|
|
138
138
|
|
139
139
|
@client.on :message do |data|
|
140
140
|
next unless ( user = User.find data.user )
|
141
|
+
next unless user.valid?
|
141
142
|
|
142
143
|
channel = Channel.find data.channel
|
143
144
|
channel = Channel.im data.channel, user if data.channel =~ /^D/ && ! channel
|
@@ -194,12 +195,17 @@ module Slacky
|
|
194
195
|
print "Getting users from Slack..."
|
195
196
|
resp = web_client.users_list presence: 1
|
196
197
|
throw resp unless resp.ok
|
198
|
+
User.invalidate_all_users
|
199
|
+
whitelist = @config.whitelist_users || []
|
197
200
|
resp.members.map do |member|
|
198
201
|
next unless member.profile.email # no bots
|
199
202
|
next if member.deleted # no ghosts
|
200
|
-
|
203
|
+
unless whitelist.include?(member.id) || whitelist.include?(member.name) || whitelist.include?("@#{member.name}")
|
204
|
+
next if member.is_ultra_restricted # no single channel guests
|
205
|
+
next if member.is_restricted # no multi channel guests either
|
206
|
+
end
|
201
207
|
user = User.find(member.id) || User.new(slack_id: member.id)
|
202
|
-
user.populate(member).save
|
208
|
+
user.populate(member).validate.save
|
203
209
|
end
|
204
210
|
puts " done!"
|
205
211
|
end
|
data/lib/slacky/config.rb
CHANGED
@@ -44,6 +44,11 @@ module Slacky
|
|
44
44
|
ENV['ACCEPT_CHANNELS'].split(',').map {|c| c.strip}
|
45
45
|
end
|
46
46
|
|
47
|
+
def whitelist_users
|
48
|
+
return nil unless ENV['WHITELIST_USERS']
|
49
|
+
ENV['WHITELIST_USERS'].split(',').map {|u| u.strip}
|
50
|
+
end
|
51
|
+
|
47
52
|
def log(msg, ex = nil)
|
48
53
|
log = File.new(log_file, 'a')
|
49
54
|
timestamp = Time.now.strftime('%Y-%m-%d %H:%M:%S')
|
data/lib/slacky/daemon.rb
CHANGED
data/lib/slacky/message.rb
CHANGED
data/lib/slacky/user.rb
CHANGED
@@ -3,8 +3,13 @@ require 'json'
|
|
3
3
|
module Slacky
|
4
4
|
class User
|
5
5
|
attr_accessor :username, :slack_id, :slack_im_id, :first_name, :last_name, :email, :timezone, :presence, :data
|
6
|
+
attr_writer :valid
|
6
7
|
attr_reader :tz
|
7
8
|
|
9
|
+
def valid?
|
10
|
+
@valid
|
11
|
+
end
|
12
|
+
|
8
13
|
@@decorator = @@config = @@db = nil
|
9
14
|
|
10
15
|
def self.decorator=(decorator)
|
@@ -33,31 +38,51 @@ create table if not exists users (
|
|
33
38
|
email varchar(128) not null,
|
34
39
|
timezone varchar(256),
|
35
40
|
presence varchar(64),
|
41
|
+
valid boolean not null default false,
|
36
42
|
data jsonb not null
|
37
43
|
);
|
38
44
|
SQL
|
39
45
|
end
|
40
46
|
|
47
|
+
def self.invalidate_all_users
|
48
|
+
self.db.exec 'update users set valid = FALSE'
|
49
|
+
end
|
50
|
+
|
41
51
|
def self.find(user)
|
52
|
+
return nil unless user
|
42
53
|
return user.map { |u| User.find u }.compact if user.is_a? Array
|
43
|
-
|
54
|
+
match = user.match(/^<@(.*)>$/)
|
55
|
+
id = ( match ? match[1] : user )
|
56
|
+
result = self.db.exec_params "select * from users where slack_id = $1", [ id ]
|
44
57
|
if result.ntuples == 0
|
45
|
-
|
58
|
+
username = ( user =~ /^@/ ? user.sub(/^@/, '') : user )
|
59
|
+
result = self.db.exec_params "select * from users where username = $1", [ username ]
|
46
60
|
end
|
47
61
|
return nil if result.ntuples == 0
|
62
|
+
hydrate(result)[0]
|
63
|
+
end
|
48
64
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
65
|
+
def self.find_by_data(query)
|
66
|
+
result = self.db.exec "select * from users where data #{query}"
|
67
|
+
hydrate result
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.hydrate(result)
|
71
|
+
return [] if result.ntuples == 0
|
72
|
+
result.map do |row|
|
73
|
+
user = self.new username: row['username'],
|
74
|
+
slack_id: row['slack_id'],
|
75
|
+
slack_im_id: row['slack_im_id'],
|
76
|
+
first_name: row['first_name'],
|
77
|
+
last_name: row['last_name'],
|
78
|
+
email: row['email'],
|
79
|
+
timezone: row['timezone'],
|
80
|
+
presence: row['presence'],
|
81
|
+
valid: row['valid'],
|
82
|
+
data: JSON.parse(row['data'])
|
83
|
+
user.extend @@decorator if @@decorator
|
84
|
+
user
|
85
|
+
end
|
61
86
|
end
|
62
87
|
|
63
88
|
def initialize(attrs={})
|
@@ -69,6 +94,7 @@ SQL
|
|
69
94
|
@email = attrs[:email]
|
70
95
|
@timezone = attrs[:timezone] || "America/Los_Angeles"
|
71
96
|
@presence = attrs[:presence]
|
97
|
+
@valid = attrs[:valid]
|
72
98
|
@data = attrs[:data] || {}
|
73
99
|
end
|
74
100
|
|
@@ -83,11 +109,16 @@ SQL
|
|
83
109
|
self
|
84
110
|
end
|
85
111
|
|
112
|
+
def validate
|
113
|
+
@valid = true
|
114
|
+
self
|
115
|
+
end
|
116
|
+
|
86
117
|
def save
|
87
118
|
User.db.exec_params "delete from users where slack_id = $1", [ @slack_id ]
|
88
|
-
User.db.exec_params "insert into users (username, slack_id, slack_im_id, first_name, last_name, email, timezone, presence, data)
|
89
|
-
values ($1, $2, $3, $4, $5, $6, $7, $8, $9)",
|
90
|
-
[ @username, @slack_id, @slack_im_id, @first_name, @last_name, @email, @timezone, @presence, JSON.dump(@data) ]
|
119
|
+
User.db.exec_params "insert into users (username, slack_id, slack_im_id, first_name, last_name, email, timezone, presence, valid, data)
|
120
|
+
values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)",
|
121
|
+
[ @username, @slack_id, @slack_im_id, @first_name, @last_name, @email, @timezone, @presence, @valid, JSON.dump(@data) ]
|
91
122
|
self
|
92
123
|
end
|
93
124
|
|
data/lib/slacky/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slacky
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.2'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-05-
|
12
|
+
date: 2016-05-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: slack-ruby-client
|
@@ -226,7 +226,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
226
226
|
version: '0'
|
227
227
|
segments:
|
228
228
|
- 0
|
229
|
-
hash:
|
229
|
+
hash: 2539155529530202042
|
230
230
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
231
231
|
none: false
|
232
232
|
requirements:
|
@@ -235,7 +235,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
235
235
|
version: '0'
|
236
236
|
segments:
|
237
237
|
- 0
|
238
|
-
hash:
|
238
|
+
hash: 2539155529530202042
|
239
239
|
requirements: []
|
240
240
|
rubyforge_project:
|
241
241
|
rubygems_version: 1.8.23
|