slack-smart-bot 1.8.1 → 1.10.0

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.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +127 -21
  3. data/lib/slack/smart-bot/comm/ask.rb +55 -42
  4. data/lib/slack/smart-bot/comm/dont_understand.rb +2 -2
  5. data/lib/slack/smart-bot/comm/event_hello.rb +34 -0
  6. data/lib/slack/smart-bot/comm/get_channel_members.rb +13 -0
  7. data/lib/slack/smart-bot/comm/get_channels.rb +35 -0
  8. data/lib/slack/smart-bot/comm/get_user_info.rb +20 -0
  9. data/lib/slack/smart-bot/comm/get_users.rb +24 -0
  10. data/lib/slack/smart-bot/comm/react.rb +38 -8
  11. data/lib/slack/smart-bot/comm/respond.rb +219 -48
  12. data/lib/slack/smart-bot/comm/respond_direct.rb +2 -3
  13. data/lib/slack/smart-bot/comm/respond_thread.rb +5 -0
  14. data/lib/slack/smart-bot/comm/send_file.rb +38 -34
  15. data/lib/slack/smart-bot/comm/send_msg_channel.rb +27 -22
  16. data/lib/slack/smart-bot/comm/send_msg_user.rb +58 -33
  17. data/lib/slack/smart-bot/comm/unreact.rb +24 -7
  18. data/lib/slack/smart-bot/comm.rb +7 -1
  19. data/lib/slack/smart-bot/commands/general/add_announcement.rb +32 -0
  20. data/lib/slack/smart-bot/commands/general/bot_help.rb +68 -28
  21. data/lib/slack/smart-bot/commands/general/bot_stats.rb +314 -0
  22. data/lib/slack/smart-bot/commands/general/bot_status.rb +3 -5
  23. data/lib/slack/smart-bot/commands/general/bye_bot.rb +0 -7
  24. data/lib/slack/smart-bot/commands/general/delete_announcement.rb +34 -0
  25. data/lib/slack/smart-bot/commands/general/delete_share.rb +34 -0
  26. data/lib/slack/smart-bot/commands/general/hi_bot.rb +16 -11
  27. data/lib/slack/smart-bot/commands/general/leaderboard.rb +200 -0
  28. data/lib/slack/smart-bot/commands/general/see_announcements.rb +113 -0
  29. data/lib/slack/smart-bot/commands/general/see_favorite_commands.rb +54 -0
  30. data/lib/slack/smart-bot/commands/general/see_shares.rb +41 -0
  31. data/lib/slack/smart-bot/commands/general/see_statuses.rb +78 -0
  32. data/lib/slack/smart-bot/commands/general/share_messages.rb +58 -0
  33. data/lib/slack/smart-bot/commands/general/stop_using_rules.rb +11 -6
  34. data/lib/slack/smart-bot/commands/general/suggest_command.rb +30 -0
  35. data/lib/slack/smart-bot/commands/general/use_rules.rb +13 -16
  36. data/lib/slack/smart-bot/commands/general/whats_new.rb +19 -0
  37. data/lib/slack/smart-bot/commands/general_bot_commands.rb +243 -0
  38. data/lib/slack/smart-bot/commands/on_bot/add_shortcut.rb +67 -38
  39. data/lib/slack/smart-bot/commands/on_bot/admin/add_routine.rb +49 -14
  40. data/lib/slack/smart-bot/commands/on_bot/admin/extend_rules.rb +5 -7
  41. data/lib/slack/smart-bot/commands/on_bot/admin/pause_bot.rb +4 -1
  42. data/lib/slack/smart-bot/commands/on_bot/admin/pause_routine.rb +1 -0
  43. data/lib/slack/smart-bot/commands/on_bot/admin/remove_routine.rb +2 -3
  44. data/lib/slack/smart-bot/commands/on_bot/admin/run_routine.rb +6 -1
  45. data/lib/slack/smart-bot/commands/on_bot/admin/see_result_routine.rb +32 -0
  46. data/lib/slack/smart-bot/commands/on_bot/admin/see_routines.rb +12 -4
  47. data/lib/slack/smart-bot/commands/on_bot/admin/start_bot.rb +4 -1
  48. data/lib/slack/smart-bot/commands/on_bot/admin/start_routine.rb +1 -0
  49. data/lib/slack/smart-bot/commands/on_bot/admin/stop_using_rules_on.rb +2 -0
  50. data/lib/slack/smart-bot/commands/on_bot/admin_master/react_to.rb +32 -0
  51. data/lib/slack/smart-bot/commands/on_bot/admin_master/send_message.rb +24 -0
  52. data/lib/slack/smart-bot/commands/on_bot/delete_repl.rb +3 -5
  53. data/lib/slack/smart-bot/commands/on_bot/delete_shortcut.rb +54 -25
  54. data/lib/slack/smart-bot/commands/on_bot/get_repl.rb +7 -9
  55. data/lib/slack/smart-bot/commands/on_bot/repl.rb +55 -25
  56. data/lib/slack/smart-bot/commands/on_bot/ruby_code.rb +36 -13
  57. data/lib/slack/smart-bot/commands/on_bot/run_repl.rb +5 -7
  58. data/lib/slack/smart-bot/commands/on_bot/see_repls.rb +4 -6
  59. data/lib/slack/smart-bot/commands/on_bot/see_shortcuts.rb +29 -13
  60. data/lib/slack/smart-bot/commands/on_extended/bot_rules.rb +55 -9
  61. data/lib/slack/smart-bot/commands/on_master/admin/kill_bot_on_channel.rb +4 -1
  62. data/lib/slack/smart-bot/commands/on_master/admin_master/exit_bot.rb +5 -3
  63. data/lib/slack/smart-bot/commands/on_master/admin_master/notify_message.rb +2 -1
  64. data/lib/slack/smart-bot/commands/on_master/admin_master/publish_announcements.rb +32 -0
  65. data/lib/slack/smart-bot/commands/on_master/admin_master/set_general_message.rb +38 -0
  66. data/lib/slack/smart-bot/commands/on_master/admin_master/set_maintenance.rb +49 -0
  67. data/lib/slack/smart-bot/commands/on_master/create_bot.rb +30 -21
  68. data/lib/slack/smart-bot/commands.rb +19 -1
  69. data/lib/slack/smart-bot/listen.rb +7 -8
  70. data/lib/slack/smart-bot/process.rb +373 -192
  71. data/lib/slack/smart-bot/process_first.rb +202 -104
  72. data/lib/slack/smart-bot/treat_message.rb +325 -186
  73. data/lib/slack/smart-bot/utils/answer.rb +18 -0
  74. data/lib/slack/smart-bot/utils/answer_delete.rb +15 -0
  75. data/lib/slack/smart-bot/utils/build_help.rb +57 -5
  76. data/lib/slack/smart-bot/utils/create_routine_thread.rb +83 -30
  77. data/lib/slack/smart-bot/utils/get_bots_created.rb +4 -1
  78. data/lib/slack/smart-bot/utils/get_channels_name_and_id.rb +1 -7
  79. data/lib/slack/smart-bot/utils/get_help.rb +87 -35
  80. data/lib/slack/smart-bot/utils/get_shares.rb +12 -0
  81. data/lib/slack/smart-bot/utils/has_access.rb +12 -0
  82. data/lib/slack/smart-bot/utils/save_stats.rb +23 -8
  83. data/lib/slack/smart-bot/utils/save_status.rb +52 -0
  84. data/lib/slack/smart-bot/utils/update_shortcuts_file.rb +6 -0
  85. data/lib/slack/smart-bot/utils.rb +5 -0
  86. data/lib/slack-smart-bot.rb +88 -47
  87. data/lib/slack-smart-bot_general_commands.rb +46 -0
  88. data/lib/slack-smart-bot_general_rules.rb +5 -2
  89. data/lib/slack-smart-bot_rules.rb +49 -23
  90. data/whats_new.txt +36 -0
  91. metadata +44 -13
  92. data/lib/slack/smart-bot/commands/on_bot/admin_master/bot_stats.rb +0 -195
@@ -0,0 +1,13 @@
1
+ #todo: add pagination for case more than 1000 members in the channel
2
+ def get_channel_members(channel_id)
3
+ begin
4
+ if config.simulate and config.key?(:client)
5
+ client.web_client.conversations_members[channel_id.to_sym].members
6
+ else
7
+ client.web_client.conversations_members(channel: channel_id, limit: 1000).members
8
+ end
9
+ rescue Exception => stack
10
+ @logger.warn stack
11
+ end
12
+
13
+ end
@@ -0,0 +1,35 @@
1
+ def get_channels(bot_is_in: false, types: 'private_channel,public_channel')
2
+ begin
3
+ if config.simulate and config.key?(:client)
4
+ if bot_is_in
5
+ client.web_client.conversations_members.reject { |r, v| !v.members.include?(config.nick_id) }.values
6
+ else
7
+ client.web_client.conversations_members.values
8
+ end
9
+ else
10
+ if bot_is_in
11
+ client.web_client.users_conversations(exclude_archived: true, limit: 1000, types: "im, public_channel,private_channel").channels
12
+ else
13
+ resp = client.web_client.conversations_list(types: types, limit: "600", exclude_archived: "true")
14
+ channels = resp.channels
15
+ begin
16
+ while resp.response_metadata.next_cursor.to_s != ""
17
+ resp = client.web_client.conversations_list(
18
+ cursor: resp.response_metadata.next_cursor.to_s,
19
+ types: types,
20
+ limit: "600",
21
+ exclude_archived: "true",
22
+ )
23
+ channels += resp.channels
24
+ end
25
+ rescue Exception => stack
26
+ @logger.warn stack
27
+ end
28
+ return channels
29
+ end
30
+ end
31
+ rescue Exception => stack
32
+ @logger.warn stack
33
+ return []
34
+ end
35
+ end
@@ -0,0 +1,20 @@
1
+ class SlackSmartBot
2
+
3
+ def get_user_info(user)
4
+ begin
5
+ if user.to_s.length>0
6
+ if config.simulate and config.key?(:client)
7
+ if user[0]=='@' #name
8
+ client.web_client.users_info.select{|k, v| v[:user][:name] == user[1..-1]}.values[-1]
9
+ else #id
10
+ client.web_client.users_info[user.to_sym]
11
+ end
12
+ else
13
+ client.web_client.users_info(user: user)
14
+ end
15
+ end
16
+ rescue Exception => stack
17
+ @logger.warn stack
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,24 @@
1
+ class SlackSmartBot
2
+
3
+ def get_users()
4
+ begin
5
+ users = []
6
+ cursor = nil
7
+ if config.simulate
8
+ users = client.web_client.users_list
9
+ else
10
+ begin
11
+ resp = client.web_client.users_list(limit: 1000, cursor: cursor)
12
+ if resp.key?(:members) and resp[:members].is_a(Array) and resp[:members].size > 0
13
+ users << resp[:members]
14
+ end
15
+ cursor = resp.get_values(:next_cursor).values[-1]
16
+ end until cursor.empty?
17
+ users.flatten!
18
+ end
19
+ return users
20
+ rescue Exception => stack
21
+ @logger.warn stack
22
+ end
23
+ end
24
+ end
@@ -1,16 +1,46 @@
1
1
  class SlackSmartBot
2
2
  # list of available emojis: https://www.webfx.com/tools/emoji-cheat-sheet/
3
3
  # react(:thumbsup)
4
- def react(emoji, parent=false)
5
- if parent or Thread.current[:ts].to_s == ''
6
- ts = Thread.current[:thread_ts]
4
+ # ts: can be true, false or a specific ts
5
+ def react(emoji, ts=false, channel='')
6
+ result = true
7
+ channel = Thread.current[:dest] if channel == ''
8
+ if ts.is_a?(TrueClass) or ts.is_a?(FalseClass)
9
+ parent = ts
10
+ ts = nil
7
11
  else
8
- ts = Thread.current[:ts]
12
+ parent = false
9
13
  end
10
- begin
11
- client.web_client.reactions_add(channel: Thread.current[:dest], name: emoji, timestamp: ts)
12
- rescue Exception => stack
13
- @logger.warn stack
14
+ if ts.nil?
15
+ if parent or Thread.current[:ts].to_s == ''
16
+ ts = Thread.current[:thread_ts]
17
+ else
18
+ ts = Thread.current[:ts]
19
+ end
20
+ else
21
+ if ts.to_s.match?(/^\d+\.\d+$/)
22
+ #thread id
23
+ elsif ts.to_s.match?(/^p\d\d\d\d\d+$/)
24
+ #a thread id taken from url fex: p1622549264010700
25
+ ts = ts.scan(/(\d+)/).join
26
+ ts = "#{ts[0..9]}.#{ts[10..-1]}"
27
+ else
28
+ ts = Thread.current[:thread_ts] if ts == ''
29
+ end
30
+
31
+ end
32
+ if ts.nil?
33
+ @logger.warn 'react method no ts supplied'
34
+ result = false
35
+ else
36
+ emoji.gsub!(':','') if emoji.is_a?(String)
37
+ begin
38
+ client.web_client.reactions_add(channel: channel, name: emoji.to_sym, timestamp: ts) unless config.simulate
39
+ rescue Exception => stack
40
+ @logger.warn stack
41
+ result = false
42
+ end
14
43
  end
44
+ return result
15
45
  end
16
46
  end
@@ -1,59 +1,230 @@
1
1
  class SlackSmartBot
2
- def respond(msg, dest = nil)
3
- if dest.nil? and Thread.current.key?(:dest)
4
- dest = Thread.current[:dest]
5
- end
6
- dest = @channels_id[dest] if @channels_id.key?(dest) #it is a name of channel
7
- if dest.nil?
8
- if config[:simulate]
9
- open("#{config.path}/buffer_complete.log", "a") { |f|
10
- f.puts "|#{@channel_id}|#{config[:nick_id]}|#{msg}~~~"
11
- }
12
- else
13
- if Thread.current[:on_thread]
14
- client.message(channel: @channel_id, text: msg, as_user: true, thread_ts: Thread.current[:thread_ts])
2
+ def respond(msg = "", dest = nil, unfurl_links: true, unfurl_media: true, thread_ts: "", web_client: true, blocks: [], dont_share: false)
3
+ result = true
4
+ if (msg.to_s != "" or !msg.to_s.match?(/^A\s*\z/) or !blocks.empty?) and Thread.current[:routine_type].to_s != "bgroutine"
5
+ if !web_client.is_a?(TrueClass) and !web_client.is_a?(FalseClass)
6
+ (!unfurl_links or !unfurl_media) ? web_client = true : web_client = false
7
+ end
8
+ begin
9
+ msg = msg.to_s
10
+ web_client = true if !blocks.empty?
11
+
12
+ on_thread = Thread.current[:on_thread]
13
+ if dest.nil? and Thread.current.key?(:dest)
14
+ dest = Thread.current[:dest]
15
+ elsif dest.is_a?(Symbol) and dest == :on_thread
16
+ on_thread = true
17
+ dest = Thread.current[:dest]
18
+ elsif dest.is_a?(Symbol) and dest == :direct
19
+ dest = Thread.current[:user].id
20
+ end
21
+ if thread_ts.to_s.match?(/^\d+\.\d+$/)
22
+ on_thread = true
23
+ #thread id
24
+ elsif thread_ts.to_s.match?(/^p\d\d\d\d\d+$/)
25
+ on_thread = true
26
+ #a thread id taken from url fex: p1622549264010700
27
+ thread_ts = thread_ts.scan(/(\d+)/).join
28
+ thread_ts = "#{thread_ts[0..9]}.#{thread_ts[10..-1]}"
15
29
  else
16
- client.message(channel: @channel_id, text: msg, as_user: true)
30
+ thread_ts = Thread.current[:thread_ts] if thread_ts == ""
17
31
  end
18
- end
19
- if config[:testing] and config.on_master_bot
20
- open("#{config.path}/buffer.log", "a") { |f|
21
- f.puts "|#{@channel_id}|#{config[:nick_id]}|#{msg}"
22
- }
23
- end
24
- elsif dest[0] == "C" or dest[0] == "G" # channel
25
- if config[:simulate]
26
- open("#{config.path}/buffer_complete.log", "a") { |f|
27
- f.puts "|#{dest}|#{config[:nick_id]}|#{msg}~~~"
28
- }
29
- else
30
- if Thread.current[:on_thread]
31
- client.message(channel: dest, text: msg, as_user: true, thread_ts: Thread.current[:thread_ts])
32
+
33
+ dest = @channels_id[dest] if @channels_id.key?(dest) #it is a name of channel
34
+
35
+ on_thread ? txt_on_thread=':on_thread:' : txt_on_thread=''
36
+
37
+ if blocks.empty?
38
+ if !config.simulate #https://api.slack.com/docs/rate-limits
39
+ msg.size > 500 ? wait = 0.5 : wait = 0.1
40
+ sleep wait if Time.now <= (@last_respond + wait)
41
+ else
42
+ wait = 0
43
+ end
44
+
45
+ msgs = [] # max of 4000 characters per message
46
+ txt = ""
47
+ msg.split("\n").each do |m|
48
+ if (m + txt).size > 4000
49
+ msgs << txt.chars.each_slice(4000).map(&:join) unless txt == ""
50
+ txt = ""
51
+ end
52
+ txt += (m + "\n")
53
+ end
54
+ msgs << txt
55
+ msgs.flatten!
56
+ if dest.nil?
57
+ if config[:simulate]
58
+ open("#{config.path}/buffer_complete.log", "a") { |f|
59
+ f.puts "|#{@channel_id}|#{config[:nick_id]}|#{config[:nick]}|#{txt_on_thread}#{msg}~~~"
60
+ }
61
+ else
62
+ if on_thread
63
+ msgs.each do |msg|
64
+ if web_client
65
+ resp = client.web_client.chat_postMessage(channel: @channel_id, text: msg, as_user: true, unfurl_links: unfurl_links, unfurl_media: unfurl_media, thread_ts: thread_ts)
66
+ else
67
+ resp = client.message(channel: @channel_id, text: msg, as_user: true, thread_ts: thread_ts, unfurl_links: unfurl_links, unfurl_media: unfurl_media)
68
+ end
69
+ sleep wait
70
+ end
71
+ else
72
+ msgs.each do |msg|
73
+ if web_client
74
+ resp = client.web_client.chat_postMessage(channel: @channel_id, text: msg, as_user: true, unfurl_links: unfurl_links, unfurl_media: unfurl_media)
75
+ else
76
+ resp = client.message(channel: @channel_id, text: msg, as_user: true, unfurl_links: unfurl_links, unfurl_media: unfurl_media)
77
+ end
78
+ sleep wait
79
+ end
80
+ end
81
+ end
82
+ if config[:testing] and config.on_master_bot and !@buffered
83
+ @buffered = true
84
+ open("#{config.path}/buffer.log", "a") { |f|
85
+ f.puts "|#{@channel_id}|#{config[:nick_id]}|#{config[:nick]}|#{msg}"
86
+ }
87
+ end
88
+ elsif dest[0] == "C" or dest[0] == "G" # channel
89
+ if config[:simulate]
90
+ open("#{config.path}/buffer_complete.log", "a") { |f|
91
+ f.puts "|#{dest}|#{config[:nick_id]}|#{config[:nick]}|#{txt_on_thread}#{msg}~~~"
92
+ }
93
+ else
94
+ if on_thread
95
+ msgs.each do |msg|
96
+ if web_client
97
+ resp = client.web_client.chat_postMessage(channel: dest, text: msg, as_user: true, unfurl_links: unfurl_links, unfurl_media: unfurl_media, thread_ts: thread_ts)
98
+ else
99
+ resp = client.message(channel: dest, text: msg, as_user: true, thread_ts: thread_ts, unfurl_links: unfurl_links, unfurl_media: unfurl_media)
100
+ end
101
+ sleep wait
102
+ end
103
+ else
104
+ msgs.each do |msg|
105
+ if web_client
106
+ resp = client.web_client.chat_postMessage(channel: dest, text: msg, as_user: true, unfurl_links: unfurl_links, unfurl_media: unfurl_media)
107
+ else
108
+ resp = client.message(channel: dest, text: msg, as_user: true, unfurl_links: unfurl_links, unfurl_media: unfurl_media)
109
+ end
110
+ sleep wait
111
+ end
112
+ end
113
+ end
114
+ if config[:testing] and config.on_master_bot and !@buffered
115
+ @buffered = true
116
+ open("#{config.path}/buffer.log", "a") { |f|
117
+ f.puts "|#{dest}|#{config[:nick_id]}|#{config[:nick]}|#{msg}"
118
+ }
119
+ end
120
+ elsif dest[0] == "D" or dest[0] == "U" or dest[0] == "W" # Direct message
121
+ msgs.each do |msg|
122
+ send_msg_user(dest, msg, on_thread, unfurl_links: unfurl_links, unfurl_media: unfurl_media)
123
+ sleep wait
124
+ end
125
+ elsif dest[0] == "@"
126
+ begin
127
+ user_info = @users.select { |u| u.id == dest[1..-1] or u.name == dest[1..-1] or (u.key?(:enterprise_user) and u.enterprise_user.id == dest[1..-1]) }[-1]
128
+ msgs.each do |msg|
129
+ send_msg_user(user_info.id, msg, on_thread, unfurl_links: unfurl_links, unfurl_media: unfurl_media)
130
+ sleep wait
131
+ end
132
+ rescue Exception => stack
133
+ @logger.warn("user #{dest} not found.")
134
+ @logger.warn stack
135
+ if Thread.current.key?(:dest)
136
+ respond("User #{dest} not found.")
137
+ end
138
+ result = false
139
+ end
140
+ else
141
+ @logger.warn("method respond not treated correctly: msg:#{msg} dest:#{dest}")
142
+ result = false
143
+ end
32
144
  else
33
- client.message(channel: dest, text: msg, as_user: true)
145
+ wait = 0.1
146
+ if dest.nil?
147
+ if config[:simulate]
148
+ open("#{config.path}/buffer_complete.log", "a") { |f|
149
+ f.puts "|#{@channel_id}|#{config[:nick_id]}|#{config[:nick]}|#{txt_on_thread}#{blocks.join}~~~"
150
+ }
151
+ else
152
+ if on_thread
153
+ blocks.each_slice(40).to_a.each do |blockstmp|
154
+ resp = client.web_client.chat_postMessage(channel: @channel_id, blocks: blockstmp, as_user: true, thread_ts: thread_ts)
155
+ sleep wait
156
+ end
157
+ else
158
+ blocks.each_slice(40).to_a.each do |blockstmp|
159
+ resp = client.web_client.chat_postMessage(channel: @channel_id, blocks: blockstmp, as_user: true)
160
+ sleep wait
161
+ end
162
+ end
163
+ end
164
+ if config[:testing] and config.on_master_bot and !@buffered
165
+ @buffered = true
166
+ open("#{config.path}/buffer.log", "a") { |f|
167
+ f.puts "|#{@channel_id}|#{config[:nick_id]}|#{config[:nick]}|#{blocks.join}"
168
+ }
169
+ end
170
+ elsif dest[0] == "C" or dest[0] == "G" # channel
171
+ if config[:simulate]
172
+ open("#{config.path}/buffer_complete.log", "a") { |f|
173
+ f.puts "|#{dest}|#{config[:nick_id]}|#{config[:nick]}|#{txt_on_thread}#{blocks.join}~~~"
174
+ }
175
+ else
176
+ if on_thread
177
+ blocks.each_slice(40).to_a.each do |blockstmp|
178
+ resp = client.web_client.chat_postMessage(channel: dest, blocks: blockstmp, as_user: true, thread_ts: thread_ts)
179
+ sleep wait
180
+ end
181
+ else
182
+ blocks.each_slice(40).to_a.each do |blockstmp|
183
+ resp = client.web_client.chat_postMessage(channel: dest, blocks: blockstmp, as_user: true)
184
+ sleep wait
185
+ end
186
+ end
187
+ end
188
+ if config[:testing] and config.on_master_bot and !@buffered
189
+ @buffered = true
190
+ open("#{config.path}/buffer.log", "a") { |f|
191
+ f.puts "|#{dest}|#{config[:nick_id]}|#{config[:nick]}|#{blocks.join}"
192
+ }
193
+ end
194
+ elsif dest[0] == "D" or dest[0] == "U" or dest[0] == "W" # Direct message
195
+ blocks.each_slice(40).to_a.each do |blockstmp|
196
+ send_msg_user(dest, msg, on_thread, unfurl_links: unfurl_links, unfurl_media: unfurl_media, blocks: blockstmp)
197
+ sleep wait
198
+ end
199
+ elsif dest[0] == "@"
200
+ begin
201
+ user_info = @users.select { |u| u.id == dest[1..-1] or (u.key?(:enterprise_user) and u.enterprise_user.id == dest[1..-1]) }[-1]
202
+ blocks.each_slice(40).to_a.each do |blockstmp|
203
+ send_msg_user(user_info.id, msg, on_thread, unfurl_links: unfurl_links, unfurl_media: unfurl_media, blocks: blockstmp)
204
+ sleep wait
205
+ end
206
+ rescue Exception => stack
207
+ @logger.warn("user #{dest} not found.")
208
+ @logger.warn stack
209
+ if Thread.current.key?(:dest)
210
+ respond("User #{dest} not found.")
211
+ end
212
+ result = false
213
+ end
214
+ else
215
+ @logger.warn("method respond not treated correctly: msg:#{msg} dest:#{dest}")
216
+ result = false
217
+ end
34
218
  end
35
- end
36
- if config[:testing] and config.on_master_bot
37
- open("#{config.path}/buffer.log", "a") { |f|
38
- f.puts "|#{dest}|#{config[:nick_id]}|#{msg}"
39
- }
40
- end
41
- elsif dest[0] == "D" or dest[0] == "U" or dest[0] == "W" # Direct message
42
- send_msg_user(dest, msg)
43
- elsif dest[0] == "@"
44
- begin
45
- user_info = client.web_client.users_info(user: dest)
46
- send_msg_user(user_info.user.id, msg)
219
+ @last_respond = Time.now
47
220
  rescue Exception => stack
48
- @logger.warn("user #{dest} not found.")
49
221
  @logger.warn stack
50
- if Thread.current.key?(:dest)
51
- respond("User #{dest} not found.")
52
- end
222
+ result = false
53
223
  end
54
- else
55
- @logger.warn("method respond not treated correctly: msg:#{msg} dest:#{dest}")
56
224
  end
225
+ if Thread.current.key?(:routine) and Thread.current[:routine]
226
+ File.write("#{config.path}/routines/#{@channel_id}/#{Thread.current[:routine_name]}_output.txt", msg, mode: "a+")
227
+ end
228
+ return result
57
229
  end
58
-
59
230
  end
@@ -1,6 +1,5 @@
1
1
  class SlackSmartBot
2
- def respond_direct(msg)
3
- dest = Thread.current[:user].id
4
- respond(msg, dest)
2
+ def respond_direct(msg, unfurl_links: true, unfurl_media: true)
3
+ respond(msg, :direct, unfurl_links: unfurl_links, unfurl_media: unfurl_media)
5
4
  end
6
5
  end
@@ -0,0 +1,5 @@
1
+ class SlackSmartBot
2
+ def respond_thread(msg, unfurl_links: true, unfurl_media: true)
3
+ respond(msg, :on_thread, unfurl_links: unfurl_links, unfurl_media: unfurl_media)
4
+ end
5
+ end