slack-smart-bot 1.8.0 → 1.8.1

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
  SHA256:
3
- metadata.gz: b15c46b5b101a0a31487508457982e8f5d6b81ad41f54338407ecdb2aa9974f3
4
- data.tar.gz: d32bfceda9068f5f11d1002f255b77a280f3a7b7068f40a632c03b7cb6378127
3
+ metadata.gz: 19ab121009af799ef4d1338e6b274c3212aa3fb9eed9098ab32b4d445e620a14
4
+ data.tar.gz: d9d16f6eb8de9fe372865e56f4f4e22ae2b10acdd55918f2d17a38a25f7111d7
5
5
  SHA512:
6
- metadata.gz: 61c6e4060d928a1562176a0596ac968c7d007998c268816af489a0d36624a768ba1eadd3b6d27be7d19d37984b335d70215f718189165c1a9ac0a3a18130c5a0
7
- data.tar.gz: 48995f9d416dd8906353508ac9bf86219cd92b2ede2f0043c3752dcc4db95564161ad64f41d86fd9f821fa1dc6d9d5bba3ef5519be037214e0003c3423b595c9
6
+ metadata.gz: d94f2a3b0f5f26c1ece8f9d9241b89e26714e6565104a1591c2f0ab0bac0bb9273d2e64e5a988fde4c18cdea0e89a8bcb98d5ee1f36ab22756b30d2b3cf61fff
7
+ data.tar.gz: 2dadb23423038f6141e0f8fdf540b15ec5da160058eb7d286e7fee9b6b7672c58d348f33221848b472997a42818283ea76cb67748ad1d2437784ac0a61f41b3d
@@ -177,10 +177,20 @@ class SlackSmartBot
177
177
  get_rules_imported()
178
178
 
179
179
  begin
180
+ #todo: take in consideration the case that the value supplied on config.masters and config.admins are the ids and not the user names
180
181
  @admin_users_id = []
182
+ @master_admin_users_id = []
181
183
  config.admins.each do |au|
182
184
  user_info = client.web_client.users_info(user: "@#{au}")
183
185
  @admin_users_id << user_info.user.id
186
+ if config.masters.include?(au)
187
+ @master_admin_users_id << user_info.user.id
188
+ end
189
+ sleep 1
190
+ end
191
+ (config.masters-config.admins).each do |au|
192
+ user_info = client.web_client.users_info(user: "@#{au}")
193
+ @master_admin_users_id << user_info.user.id
184
194
  sleep 1
185
195
  end
186
196
  rescue Slack::Web::Api::Errors::TooManyRequestsError
@@ -2,7 +2,7 @@ class SlackSmartBot
2
2
  # list of available emojis: https://www.webfx.com/tools/emoji-cheat-sheet/
3
3
  # react(:thumbsup)
4
4
  def react(emoji, parent=false)
5
- if parent
5
+ if parent or Thread.current[:ts].to_s == ''
6
6
  ts = Thread.current[:thread_ts]
7
7
  else
8
8
  ts = Thread.current[:ts]
@@ -32,14 +32,10 @@ class SlackSmartBot
32
32
  message = ["You need to set stats to true to generate the stats when running the bot instance."]
33
33
  end
34
34
  save_stats(__method__)
35
- if config.masters.include?(from_user) and typem==:on_dm #master admin user
35
+ if (config.masters.include?(from_user) or @master_admin_users_id.include?(from_user)) and typem==:on_dm #master admin user
36
36
  if !File.exist?("#{config.stats_path}.#{Time.now.strftime("%Y-%m")}.log")
37
37
  message<<'No stats'
38
38
  else
39
- if user!=''
40
- user_info = client.web_client.users_info(user: user)
41
- user_name = user_info.user.name
42
- end
43
39
  from = "#{Time.now.strftime("%Y-%m")}-01" if from == ''
44
40
  to = "#{Time.now.strftime("%Y-%m-%d")}" if to == ''
45
41
  from_short = from
@@ -52,13 +48,56 @@ class SlackSmartBot
52
48
  rows_month = {}
53
49
  users_month = {}
54
50
  commands_month = {}
55
-
51
+ users_id_name = {}
52
+ users_name_id = {}
53
+
54
+ # to translate global and enterprise users since sometimes was returning different names/ids
55
+ Dir["#{config.stats_path}.*.log"].sort.each do |file|
56
+ if file >= "#{config.stats_path}.#{from_file}.log" or file <= "#{config.stats_path}.#{to_file}.log"
57
+ CSV.foreach(file, headers: true, header_converters: :symbol, converters: :numeric) do |row|
58
+ unless users_id_name.key?(row[:user_id])
59
+ users_id_name[row[:user_id]] = row[:user_name]
60
+ end
61
+ unless users_name_id.key?(row[:user_name])
62
+ users_name_id[row[:user_name]] = row[:user_id]
63
+ end
64
+
65
+ end
66
+ end
67
+ end
68
+
69
+ if user!=''
70
+ user_info = client.web_client.users_info(user: user)
71
+ if users_id_name.key?(user_info.user.id)
72
+ user_name = users_id_name[user_info.user.id]
73
+ else
74
+ user_name = user_info.user.name
75
+ end
76
+ if users_name_id.key?(user_info.user.name)
77
+ user_id = users_name_id[user_info.user.name]
78
+ else
79
+ user_id = user_info.user.id
80
+ end
81
+ end
82
+ master_admins = config.masters.dup
83
+ config.masters.each do |u|
84
+ if users_id_name.key?(u)
85
+ master_admins << users_id_name[u]
86
+ elsif users_name_id.key?(u)
87
+ master_admins << users_name_id[u]
88
+ end
89
+ end
90
+
56
91
  Dir["#{config.stats_path}.*.log"].sort.each do |file|
57
92
  if file >= "#{config.stats_path}.#{from_file}.log" or file <= "#{config.stats_path}.#{to_file}.log"
58
93
  CSV.foreach(file, headers: true, header_converters: :symbol, converters: :numeric) do |row|
59
94
  row[:date] = row[:date].to_s
60
- if !exclude_masters or (exclude_masters and !config.masters.include?(row[:user_name]))
61
- if user=='' or (user!='' and row[:user_name] == user_name)
95
+ row[:user_name] = users_id_name[row[:user_id]]
96
+ row[:user_id] = users_name_id[row[:user_name]]
97
+ if !exclude_masters or (exclude_masters and !master_admins.include?(row[:user_name]) and
98
+ !master_admins.include?(row[:user_id]) and
99
+ !@master_admin_users_id.include?(row[:user_id]))
100
+ if user=='' or (user!='' and row[:user_name] == user_name) or (user!='' and row[:user_id] == user_id)
62
101
  if exclude_command == '' or (exclude_command!='' and row[:command]!=exclude_command)
63
102
  if row[:bot_channel_id] == channel_id or channel_id == ''
64
103
  if row[:date] >= from and row[:date] <= to
@@ -68,7 +107,7 @@ class SlackSmartBot
68
107
  users_month[row[:date][0..6]] = [] unless users_month.key?(row[:date][0..6])
69
108
  commands_month[row[:date][0..6]] = [] unless commands_month.key?(row[:date][0..6])
70
109
  rows_month[row[:date][0..6]] += 1
71
- users_month[row[:date][0..6]] << row[:user_name]
110
+ users_month[row[:date][0..6]] << row[:user_id]
72
111
  commands_month[row[:date][0..6]] << row[:command]
73
112
  end
74
113
  end
@@ -79,7 +118,6 @@ class SlackSmartBot
79
118
  end
80
119
  end
81
120
  end
82
-
83
121
  total = rows.size
84
122
  if exclude_masters
85
123
  message << 'Excluding master admins'
@@ -111,7 +149,7 @@ class SlackSmartBot
111
149
  message << "\t#{k}: #{v} (#{(v.to_f*100/total).round(2)}%) / #{commands_month[k].uniq.size} / #{users_month[k].uniq.size} #{message_new_users}"
112
150
  end
113
151
  end
114
-
152
+
115
153
  if channel_id == ''
116
154
  message << "*Channels*"
117
155
  channels = rows.bot_channel.uniq.sort
@@ -121,21 +159,25 @@ class SlackSmartBot
121
159
  end
122
160
  end
123
161
  if user==''
124
- users = rows.user_name.uniq.sort
162
+ users = rows.user_id.uniq.sort
125
163
  message << "*Users* - #{users.size}"
164
+ count_user = {}
126
165
  users.each do |user|
127
- count = rows.count {|h| h.user_name==user}
128
- message << "\t#{user}: #{count} (#{(count.to_f*100/total).round(2)}%)"
166
+ count = rows.count {|h| h.user_id==user}
167
+ count_user[user] = count
168
+ end
169
+ count_user.sort_by {|k,v| -v}.each do |user, count|
170
+ message << "\t#{users_id_name[user]}: #{count} (#{(count.to_f*100/total).round(2)}%)"
129
171
  end
130
172
  end
131
-
173
+
132
174
  commands = rows.command.uniq.sort
133
175
  message << "*Commands* - #{commands.size}"
134
176
  commands.each do |command|
135
177
  count = rows.count {|h| h.command==command}
136
178
  message << "\t#{command}: #{count} (#{(count.to_f*100/total).round(2)}%)"
137
179
  end
138
-
180
+
139
181
  message << "*Message type*"
140
182
  types = rows.type_message.uniq.sort
141
183
  types.each do |type|
@@ -144,7 +186,6 @@ class SlackSmartBot
144
186
  end
145
187
  message << "*Last activity*: #{rows[-1].date} #{rows[-1].bot_channel} #{rows[-1].type_message} #{rows[-1].user_name} #{rows[-1].command}"
146
188
  end
147
-
148
189
  end
149
190
  else
150
191
  message<<"Only Master admin users on a private conversation with the bot can see the bot stats."
@@ -117,7 +117,8 @@ class SlackSmartBot
117
117
  begin
118
118
  #todo: when changed @questions user_id then move user_info inside the ifs to avoid calling it when not necessary
119
119
  user_info = client.web_client.users_info(user: data.user)
120
- user_info.user.id = data.user #todo: remove this line when slack issue with Wxxxx Uxxxx fixed
120
+ #user_info.user.id = data.user #todo: remove this line when slack issue with Wxxxx Uxxxx fixed
121
+ data.user = user_info.user.id #todo: remove this line when slack issue with Wxxxx Uxxxx fixed
121
122
  if @questions.key?(user_info.user.name)
122
123
  if data.text.match?(/^\s*(Bye|Bæ|Good\sBye|Adiós|Ciao|Bless|Bless\sBless|Adeu)\s(#{@salutations.join("|")})\s*$/i)
123
124
  @questions.delete(user_info.user.name)
metadata CHANGED
@@ -1,35 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slack-smart-bot
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.0
4
+ version: 1.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mario Ruiz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-27 00:00:00.000000000 Z
11
+ date: 2020-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: slack-ruby-client
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 0.15.0
20
17
  - - "~>"
21
18
  - !ruby/object:Gem::Version
22
19
  version: '0.15'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.15.1
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: 0.15.0
30
27
  - - "~>"
31
28
  - !ruby/object:Gem::Version
32
29
  version: '0.15'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.15.1
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: nice_http
35
35
  requirement: !ruby/object:Gem::Requirement