slack-smart-bot 1.9.1 → 1.9.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0566062f8e9af6bc724b505bc1ee0821027e93bf5302a36781a0506e66d2cdf7
4
- data.tar.gz: 3d10378e17c6dc94f70784c5a68854fbdac9c4d6e752f5616728f27b7c4ab706
3
+ metadata.gz: 974b9b2da39dd58e4e404572932ace72c5b9d1136956543ac890cf7bc91ab61e
4
+ data.tar.gz: a304bbeeecc5177c5014c86902c20d9682e6addfc00ab3f5ee33aeca4dba2215
5
5
  SHA512:
6
- metadata.gz: 4cc5736de96995f20e0530a54c2f0ddf5fdc8dee3288e6f04bc938ef446b869508fc003f58b8ed030b89bdab37959aff6ca1e0d59e556df581ca0c5a2abc5b01
7
- data.tar.gz: 929465da66b5ca3660b1bad1b360d7badc391d43596fcbe834a8e69f0aca3decd0b970b67dfbb063df8d77cb0c50b47d4b2b4ed84b99663719532406958b6b34
6
+ metadata.gz: 85e6d1e343b0523b25c5c630d37fcda402a8529d2ae8a1f5473694a65e9311293b4d628bc0e9a18e3910bd68123276b30039e1a50115c97bd029db19a2a9738a
7
+ data.tar.gz: 90c2441764b9faceeb74d1281c19fccc84c960d4344f5822c5d50293d1de55d300d10373a60e0cf876270aced23f20686844e2cb0503dfb0a30004adeec8e27c
@@ -61,6 +61,7 @@ class SlackSmartBot
61
61
  Dir.mkdir("#{config.path}/logs") unless Dir.exist?("#{config.path}/logs")
62
62
  Dir.mkdir("#{config.path}/shortcuts") unless Dir.exist?("#{config.path}/shortcuts")
63
63
  Dir.mkdir("#{config.path}/routines") unless Dir.exist?("#{config.path}/routines")
64
+ File.delete("#{config.path}/config_tmp.status") if File.exist?("#{config.path}/config_tmp.status")
64
65
 
65
66
  config.masters = MASTER_USERS if config.masters.to_s=='' and defined?(MASTER_USERS)
66
67
  config.master_channel = MASTER_CHANNEL if config.master_channel.to_s=='' and defined?(MASTER_CHANNEL)
@@ -16,7 +16,7 @@ class SlackSmartBot
16
16
  version_message = ". There is a new available version: #{version_remote}."
17
17
  end
18
18
  if (!config[:silent] or ENV['BOT_SILENT'].to_s == 'false') and !config.simulate
19
- ENV['BOT_SILENT'] = 'true' if config[:silent] == 'true' and ENV['BOT_SILENT'].to_s != 'true'
19
+ ENV['BOT_SILENT'] = 'true' if config[:silent] and ENV['BOT_SILENT'].to_s != 'true'
20
20
  respond "Smart Bot started v#{VERSION}#{version_message}\nIf you want to know what I can do for you: `bot help`.\n`bot rules` if you want to display just the specific rules of this channel.\nYou can talk to me privately if you prefer it."
21
21
  end
22
22
  @routines.each do |ch, rout|
@@ -6,8 +6,11 @@ class SlackSmartBot
6
6
  dest = @channels_id[dest] if @channels_id.key?(dest) #it is a name of channel
7
7
  if !config.simulate #https://api.slack.com/docs/rate-limits
8
8
  msg.to_s.size > 500 ? wait = 0.5 : wait = 0.1
9
- sleep wait if Time.now <= (@last_respond+wait)
9
+ sleep wait if Time.now <= (@last_respond+wait)
10
+ else
11
+ wait = 0
10
12
  end
13
+ msgs = msg.chars.each_slice(4000).map(&:join) # max of 4000 characters per message
11
14
  if dest.nil?
12
15
  if config[:simulate]
13
16
  open("#{config.path}/buffer_complete.log", "a") { |f|
@@ -15,9 +18,15 @@ class SlackSmartBot
15
18
  }
16
19
  else
17
20
  if Thread.current[:on_thread]
18
- client.message(channel: @channel_id, text: msg, as_user: true, thread_ts: Thread.current[:thread_ts])
21
+ msgs.each do |msg|
22
+ client.message(channel: @channel_id, text: msg, as_user: true, thread_ts: Thread.current[:thread_ts])
23
+ sleep wait
24
+ end
19
25
  else
20
- client.message(channel: @channel_id, text: msg, as_user: true)
26
+ msgs.each do |msg|
27
+ client.message(channel: @channel_id, text: msg, as_user: true)
28
+ sleep wait
29
+ end
21
30
  end
22
31
  end
23
32
  if config[:testing] and config.on_master_bot
@@ -32,9 +41,15 @@ class SlackSmartBot
32
41
  }
33
42
  else
34
43
  if Thread.current[:on_thread]
35
- client.message(channel: dest, text: msg, as_user: true, thread_ts: Thread.current[:thread_ts])
44
+ msgs.each do |msg|
45
+ client.message(channel: dest, text: msg, as_user: true, thread_ts: Thread.current[:thread_ts])
46
+ sleep wait
47
+ end
36
48
  else
37
- client.message(channel: dest, text: msg, as_user: true)
49
+ msgs.each do |msg|
50
+ client.message(channel: dest, text: msg, as_user: true)
51
+ sleep wait
52
+ end
38
53
  end
39
54
  end
40
55
  if config[:testing] and config.on_master_bot
@@ -43,11 +58,17 @@ class SlackSmartBot
43
58
  }
44
59
  end
45
60
  elsif dest[0] == "D" or dest[0] == "U" or dest[0] == "W" # Direct message
46
- send_msg_user(dest, msg)
61
+ msgs.each do |msg|
62
+ send_msg_user(dest, msg)
63
+ sleep wait
64
+ end
47
65
  elsif dest[0] == "@"
48
66
  begin
49
67
  user_info = get_user_info(dest)
50
- send_msg_user(user_info.user.id, msg)
68
+ msgs.each do |msg|
69
+ send_msg_user(user_info.user.id, msg)
70
+ sleep wait
71
+ end
51
72
  rescue Exception => stack
52
73
  @logger.warn("user #{dest} not found.")
53
74
  @logger.warn stack
@@ -16,12 +16,13 @@ class SlackSmartBot
16
16
  else
17
17
  #todo: add pagination for case more than 1000 channels on the workspace
18
18
  channels = get_channels()
19
-
19
+ channel.gsub!('#','') # for the case the channel name is in plain text including #
20
20
  channel_found = channels.detect { |c| c.name == channel }
21
- members = get_channel_members(@channels_id[channel]) unless channel_found.nil?
21
+ get_channels_name_and_id() unless @channels_id.key?(channel)
22
+ members = get_channel_members(@channels_id[channel]) unless channel_found.nil? or !@channels_id.key?(channel)
22
23
 
23
- if channel_found.nil?
24
- respond "The channel you are trying to use doesn't exist", dest
24
+ if channel_found.nil? or !@channels_id.key?(channel)
25
+ respond "The channel you are trying to use doesn't exist or cannot be found.", dest
25
26
  elsif channel_found.name == config.master_channel
26
27
  respond "You cannot use the rules from Master Channel on any other channel.", dest
27
28
  elsif !@bots_created.key?(@channels_id[channel])
@@ -99,12 +99,21 @@ class SlackSmartBot
99
99
  http.get(files[0].url_private_download, save_data: file_path)
100
100
  system("chmod +x #{file_path}")
101
101
  end
102
- channel = dest if channel.to_s == ''
102
+ get_channels_name_and_id() unless @channels_name.keys.include?(channel) or @channels_id.keys.include?(channel)
103
+ channel_id = nil
104
+ if @channels_name.key?(channel) #it is an id
105
+ channel_id = channel
106
+ channel = @channels_name[channel_id]
107
+ elsif @channels_id.key?(channel) #it is a channel name
108
+ channel_id = @channels_id[channel]
109
+ end
110
+
111
+ channel_id = dest if channel_id.to_s == ''
103
112
  @routines[@channel_id] = {} unless @routines.key?(@channel_id)
104
113
  @routines[@channel_id][name] = { channel_name: config.channel, creator: from, creator_id: user.id, status: :on,
105
114
  every: every, every_in_seconds: every_in_seconds, at: at, dayweek: dayweek, file_path: file_path,
106
115
  command: command_to_run.to_s.strip, silent: silent,
107
- next_run: next_run.to_s, dest: channel, last_run: "", last_elapsed: "",
116
+ next_run: next_run.to_s, dest: channel_id, last_run: "", last_elapsed: "",
108
117
  running: false }
109
118
  update_routines
110
119
  respond "Added routine *`#{name}`* to the channel", dest
@@ -27,7 +27,7 @@ class SlackSmartBot
27
27
  command = command2
28
28
  on_demand = true
29
29
  end
30
- if (on_demand or
30
+ if (on_demand or typem == :on_dm or
31
31
  (@listening.key?(from) and (@listening[from].key?(dest) or @listening[from].key?(Thread.current[:thread_ts])) )) and
32
32
  config.on_maintenance and !command.match?(/\A(set|turn)\s+maintenance\s+off\s*\z/)
33
33
  respond config.on_maintenance_message, dest
@@ -83,8 +83,11 @@ class SlackSmartBot
83
83
  when /^\s*kill\s+bot\s+on\s+<#C\w+\|(.+)>\s*$/i, /^kill\s+bot\s+on\s+(.+)\s*$/i
84
84
  channel = $1
85
85
  kill_bot_on_channel(dest, from, channel)
86
- when /^\s*(add|create)\s+(silent\s+)?routine\s+(\w+)\s+(every)\s+(\d+)\s*(days|hours|minutes|seconds|mins|min|secs|sec|d|h|m|s)\s*(\s<#(C\w+)\|.+>\s*)?(\s.+)?\s*$/i,
86
+ when /^\s*(add|create)\s+(silent\s+)?routine\s+(\w+)\s+(every)\s+(\d+)\s*(days|hours|minutes|seconds|mins|min|secs|sec|d|h|m|s)\s*(\s#(\w+)\s*)(\s.+)?\s*$/i,
87
+ /^\s*(add|create)\s+(silent\s+)?routine\s+(\w+)\s+(every)\s+(\d+)\s*(days|hours|minutes|seconds|mins|min|secs|sec|d|h|m|s)\s*(\s<#(C\w+)\|.+>\s*)?(\s.+)?\s*$/i,
88
+ /^\s*(add|create)\s+(silent\s+)?routine\s+(\w+)\s+on\s+(monday|tuesday|wednesday|thursday|friday|saturday|sunday)s?\s+at\s+(\d+:\d+:?\d+?)\s*()(\s#(\w+)\s*)(\s.+)?\s*$/i,
87
89
  /^\s*(add|create)\s+(silent\s+)?routine\s+(\w+)\s+on\s+(monday|tuesday|wednesday|thursday|friday|saturday|sunday)s?\s+at\s+(\d+:\d+:?\d+?)\s*()(\s<#(C\w+)\|.+>\s*)?(\s.+)?\s*$/i,
90
+ /^\s*(add|create)\s+(silent\s+)?routine\s+(\w+)\s+(at)\s+(\d+:\d+:?\d+?)\s*()(\s#(\w+)\s*)(\s.+)?\s*$/i,
88
91
  /^\s*(add|create)\s+(silent\s+)?routine\s+(\w+)\s+(at)\s+(\d+:\d+:?\d+?)\s*()(\s<#(C\w+)\|.+>\s*)?(\s.+)?\s*$/i
89
92
  silent = $2.to_s!=''
90
93
  name = $3.downcase
@@ -69,14 +69,24 @@ class SlackSmartBot
69
69
  end
70
70
  typem = :dont_treat
71
71
  if !dest.nil? and !data.text.nil? and !data.text.to_s.match?(/\A\s*\z/)
72
- #if data.text.match(/^\s*<@#{config[:nick_id]}>\s+(on\s+)?<#(\w+)\|([^>]+)>\s*:?\s*(.*)/im)
73
- if data.text.match(/^\s*<@#{config[:nick_id]}>\s+(on\s+)?((<#\w+\|[^>]+>\s*)+)\s*:?\s*(.*)/im)
72
+ #todo: we need to add mixed channels: @smart-bot on private1 #bot1cm <#CXDDFRDDF|bot2cu>: echo A
73
+ if data.text.match(/^\s*<@#{config[:nick_id]}>\s+(on\s+)?((<#\w+\|[^>]+>\s*)+)\s*:?\s*(.*)/im) or
74
+ data.text.match(/^\s*<@#{config[:nick_id]}>\s+(on\s+)?((#[a-zA-Z0-9]+\s*)+)\s*:?\s*(.*)/im) or
75
+ data.text.match(/^\s*<@#{config[:nick_id]}>\s+(on\s+)?(([a-zA-Z0-9]+\s*)+)\s*:\s*(.*)/im)
74
76
  channels_rules = $2 #multiple channels @smart-bot on #channel1 #channel2 echo AAA
75
77
  data_text = $4
76
78
  channel_rules_name = ''
77
79
  channel_rules = ''
80
+ channels_arr = channels_rules.scan(/<#(\w+)\|([^>]+)>/)
81
+ if channels_arr.size == 0
82
+ channels_arr = []
83
+ channels_rules.scan(/([^\s]+)/).each do |cn|
84
+ cna = cn.join.gsub('#','')
85
+ channels_arr << [@channels_id[cna], cna]
86
+ end
87
+ end
78
88
  # to be treated only on the bots of the requested channels
79
- channels_rules.scan(/<#(\w+)\|([^>]+)>/).each do |tcid, tcname|
89
+ channels_arr.each do |tcid, tcname|
80
90
  if @channel_id == tcid
81
91
  data.text = data_text
82
92
  typem = :on_call
@@ -234,6 +244,7 @@ class SlackSmartBot
234
244
  file_cts = eval(file_cts)
235
245
  if file_cts.is_a?(Hash) and file_cts.key?(:on_maintenance)
236
246
  config.on_maintenance = file_cts.on_maintenance
247
+ config.on_maintenance_message = file_cts.on_maintenance_message
237
248
  end
238
249
  end
239
250
  end
@@ -245,6 +256,7 @@ class SlackSmartBot
245
256
  file_cts = eval(file_cts)
246
257
  if file_cts.is_a?(Hash) and file_cts.key?(:on_maintenance)
247
258
  config.on_maintenance = file_cts.on_maintenance
259
+ config.on_maintenance_message = file_cts.on_maintenance_message
248
260
  end
249
261
  end
250
262
  end
data/whats_new.txt CHANGED
@@ -1,4 +1,10 @@
1
- *Version 1.9.1* Released 2021-Mar-18
1
+ *Version 1.9.2* Released 2021-Apr-27
2
+
3
+ - Bugfixing and small improvements
4
+
5
+ ------------------------------
6
+
7
+ *Version 1.9.0* Released 2021-Mar-18
2
8
 
3
9
  *For General users*
4
10
  - Added command `what's new` that will show this.
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.9.1
4
+ version: 1.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mario Ruiz
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-18 00:00:00.000000000 Z
11
+ date: 2021-04-27 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.17'
20
17
  - - ">="
21
18
  - !ruby/object:Gem::Version
22
19
  version: 0.17.0
20
+ - - "~>"
21
+ - !ruby/object:Gem::Version
22
+ version: '0.17'
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.17'
30
27
  - - ">="
31
28
  - !ruby/object:Gem::Version
32
29
  version: 0.17.0
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '0.17'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: nice_http
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -218,8 +218,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
218
218
  - !ruby/object:Gem::Version
219
219
  version: '0'
220
220
  requirements: []
221
- rubygems_version: 3.2.3
222
- signing_key:
221
+ rubygems_version: 3.0.3
222
+ signing_key:
223
223
  specification_version: 4
224
224
  summary: Create a Slack bot that is smart and so easy to expand, create new bots on
225
225
  demand, run ruby code on chat, create shortcuts...