slacky 0.1.4 → 0.2
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.
- 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
|