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.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- slacky (0.1.4)
4
+ slacky (0.2)
5
5
  dotenv
6
6
  em-cron
7
7
  eventmachine
@@ -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
- next if member.is_ultra_restricted # no single channel guests
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
@@ -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')
@@ -20,6 +20,7 @@ module Slacky
20
20
  end
21
21
 
22
22
  begin
23
+ Thread.abort_on_exception = true
23
24
  @slackthread = Thread.new do
24
25
  bot = Bot.new @config
25
26
  @bot_class.new bot
@@ -39,6 +39,12 @@ module Slacky
39
39
  end
40
40
  end
41
41
 
42
+ def command_args
43
+ return nil unless command
44
+ index = @text.index(command) + command.length
45
+ @text[index..-1].strip
46
+ end
47
+
42
48
  def yes?
43
49
  [ 'y', 'yes', 'yep' ].include? @text.downcase
44
50
  end
@@ -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
- result = self.db.exec_params "select * from users where slack_id = $1", [ user ]
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
- result = self.db.exec_params "select * from users where username = $1", [ user ]
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
- row = result[0]
50
- user = self.new username: row['username'],
51
- slack_id: row['slack_id'],
52
- slack_im_id: row['slack_im_id'],
53
- first_name: row['first_name'],
54
- last_name: row['last_name'],
55
- email: row['email'],
56
- timezone: row['timezone'],
57
- presence: row['presence'],
58
- data: JSON.parse(row['data'])
59
- user.extend @@decorator if @@decorator
60
- user
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
 
@@ -1,3 +1,3 @@
1
1
  module Slacky
2
- VERSION = "0.1.4"
2
+ VERSION = "0.2"
3
3
  end
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.1.4
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-25 00:00:00.000000000 Z
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: -862400809388430587
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: -862400809388430587
238
+ hash: 2539155529530202042
239
239
  requirements: []
240
240
  rubyforge_project:
241
241
  rubygems_version: 1.8.23