slack-smart-bot 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/lib/slack-smart-bot.rb +155 -118
- data/lib/slack-smart-bot_rules.rb +3 -3
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 982f9adf5d2a1c795a9d6846565fe81531678c321a80dadfc0ef800ca12beacd
         | 
| 4 | 
            +
              data.tar.gz: 11fc66ba9cddc967dd62b57f5cccc12189afd40358826147fa28a15cc4512aa6
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 437a90a0344764d1cee245a9572dcb4f942996723c6ef8b256e631e9ae989f0db7886d2930e477aae7f0c2dbb24b9a8789e7e8d6f67e0896da5b4d7c7566e62b
         | 
| 7 | 
            +
              data.tar.gz: 3123a0005e8fb4aaa4f30568dc64c4f101b3cf3c9a2848db5d453516ac9b95e6c91865d8f6db3470bf728b71a79a1ef5e20de4465fbfd38a3d3c85519ffdb067
         | 
    
        data/lib/slack-smart-bot.rb
    CHANGED
    
    | @@ -8,7 +8,7 @@ require "open3" | |
| 8 8 |  | 
| 9 9 | 
             
            if ARGV.size == 0
         | 
| 10 10 | 
             
              CHANNEL = MASTER_CHANNEL
         | 
| 11 | 
            -
               | 
| 11 | 
            +
              ON_MASTER_BOT = true
         | 
| 12 12 | 
             
              ADMIN_USERS = MASTER_USERS
         | 
| 13 13 | 
             
              RULES_FILE = "#{$0.gsub(".rb", "_rules.rb")}" unless defined?(RULES_FILE)
         | 
| 14 14 | 
             
              unless File.exist?(RULES_FILE)
         | 
| @@ -17,7 +17,7 @@ if ARGV.size == 0 | |
| 17 17 | 
             
              end
         | 
| 18 18 | 
             
              STATUS_INIT = :on
         | 
| 19 19 | 
             
            else
         | 
| 20 | 
            -
               | 
| 20 | 
            +
              ON_MASTER_BOT = false
         | 
| 21 21 | 
             
              CHANNEL = ARGV[0]
         | 
| 22 22 | 
             
              ADMIN_USERS = ARGV[1].split(",")
         | 
| 23 23 | 
             
              RULES_FILE = ARGV[2]
         | 
| @@ -60,7 +60,7 @@ class SlackSmartBot | |
| 60 60 | 
             
                  end
         | 
| 61 61 | 
             
                end
         | 
| 62 62 |  | 
| 63 | 
            -
                if  | 
| 63 | 
            +
                if ON_MASTER_BOT and File.exist?($0.gsub(".rb", "_bots.rb"))
         | 
| 64 64 | 
             
                  file_conf = IO.readlines($0.gsub(".rb", "_bots.rb")).join
         | 
| 65 65 | 
             
                  unless file_conf.to_s() == ""
         | 
| 66 66 | 
             
                    @bots_created = eval(file_conf)
         | 
| @@ -135,10 +135,13 @@ class SlackSmartBot | |
| 135 135 | 
             
                  else
         | 
| 136 136 | 
             
                    id_user = nil
         | 
| 137 137 | 
             
                  end
         | 
| 138 | 
            -
                   | 
| 139 | 
            -
                  if  | 
| 140 | 
            -
                     | 
| 141 | 
            -
                     | 
| 138 | 
            +
                  # Direct messages are treated only on the master bot
         | 
| 139 | 
            +
                  if id_user.nil? or (!id_user.nil? and ON_MASTER_BOT)
         | 
| 140 | 
            +
                    user_info = wclient.users_info(user: data.user)
         | 
| 141 | 
            +
                    if !id_user.nil? or @channels_id[CHANNEL] == data.channel or user_info.user.name == config[:nick]
         | 
| 142 | 
            +
                      res = process_first(user_info.user.name, data.text, id_user)
         | 
| 143 | 
            +
                      next if res.to_s == "next"
         | 
| 144 | 
            +
                    end
         | 
| 142 145 | 
             
                  end
         | 
| 143 146 | 
             
                end
         | 
| 144 147 |  | 
| @@ -157,6 +160,7 @@ class SlackSmartBot | |
| 157 160 | 
             
                    when /^Changed status on (.+) to :(.+)/i
         | 
| 158 161 | 
             
                      channel = $1
         | 
| 159 162 | 
             
                      status = $2
         | 
| 163 | 
            +
                      #todo: channel should be channel_id
         | 
| 160 164 | 
             
                      @bots_created[channel][:status] = status.to_sym
         | 
| 161 165 | 
             
                      update_bots_file()
         | 
| 162 166 | 
             
                    end
         | 
| @@ -204,18 +208,23 @@ class SlackSmartBot | |
| 204 208 | 
             
                           command.match?(/^<@#{@salutations.join("|")}>\s+(.+)$/i) or
         | 
| 205 209 | 
             
                           command.match?(/^!(.+)$/)))
         | 
| 206 210 | 
             
                        @logger.info "command: #{nick}> #{command}" unless processed
         | 
| 207 | 
            -
                         | 
| 208 | 
            -
             | 
| 209 | 
            -
             | 
| 210 | 
            -
             | 
| 211 | 
            -
                           | 
| 212 | 
            -
             | 
| 213 | 
            -
             | 
| 214 | 
            -
                           | 
| 215 | 
            -
                           | 
| 216 | 
            -
             | 
| 211 | 
            +
                        #todo: verify this
         | 
| 212 | 
            +
                        if id_user.nil? #only for channels, not for DM
         | 
| 213 | 
            +
                          begin
         | 
| 214 | 
            +
                            eval(File.new(RULES_FILE).read) if File.exist?(RULES_FILE)
         | 
| 215 | 
            +
                          rescue Exception => stack
         | 
| 216 | 
            +
                            @logger.fatal "ERROR ON RULES FILE: #{RULES_FILE}"
         | 
| 217 | 
            +
                            @logger.fatal stack
         | 
| 218 | 
            +
                          end
         | 
| 219 | 
            +
                          if defined?(rules)
         | 
| 220 | 
            +
                            command[0] = "" if command[0] == "!"
         | 
| 221 | 
            +
                            command.gsub!(/^@\w+:*\s*/, "")
         | 
| 222 | 
            +
                            rules(nick, command, processed, id_user)
         | 
| 223 | 
            +
                          else
         | 
| 224 | 
            +
                            @logger.warn "It seems like rules method is not defined"
         | 
| 225 | 
            +
                          end
         | 
| 217 226 | 
             
                        else
         | 
| 218 | 
            -
                          @logger. | 
| 227 | 
            +
                          @logger.info "it is a direct message so no rules file executed."
         | 
| 219 228 | 
             
                        end
         | 
| 220 229 | 
             
                      end
         | 
| 221 230 | 
             
                    rescue Exception => stack
         | 
| @@ -227,7 +236,8 @@ class SlackSmartBot | |
| 227 236 | 
             
                end
         | 
| 228 237 | 
             
              end
         | 
| 229 238 |  | 
| 230 | 
            -
              #help: | 
| 239 | 
            +
              #help:
         | 
| 240 | 
            +
              #help: *General commands:*:
         | 
| 231 241 | 
             
              #help:
         | 
| 232 242 | 
             
              def process(from, command, id_user)
         | 
| 233 243 | 
             
                firstname = from.split(/ /).first
         | 
| @@ -261,14 +271,14 @@ class SlackSmartBot | |
| 261 271 | 
             
                    @listening.delete(from)
         | 
| 262 272 | 
             
                  end
         | 
| 263 273 |  | 
| 264 | 
            -
                  # | 
| 265 | 
            -
                  # | 
| 266 | 
            -
                  # | 
| 267 | 
            -
                  # | 
| 268 | 
            -
                  # | 
| 269 | 
            -
                  # | 
| 274 | 
            +
                  #helpadmin: `exit bot`
         | 
| 275 | 
            +
                  #helpadmin: `quit bot`
         | 
| 276 | 
            +
                  #helpadmin: `close bot`
         | 
| 277 | 
            +
                  #helpadmin:    The bot stops running and also stops all the bots created from this master channel
         | 
| 278 | 
            +
                  #helpadmin:    You can use this command only if you are an admin user and you are on the master channel
         | 
| 279 | 
            +
                  #helpadmin:
         | 
| 270 280 | 
             
                when /^exit\sbot/i, /^quit\sbot/i, /^close\sbot/i
         | 
| 271 | 
            -
                  if  | 
| 281 | 
            +
                  if ON_MASTER_BOT
         | 
| 272 282 | 
             
                    if ADMIN_USERS.include?(from) #admin user
         | 
| 273 283 | 
             
                      unless @questions.keys.include?(from)
         | 
| 274 284 | 
             
                        ask("are you sure?", command, from, id_user)
         | 
| @@ -300,16 +310,16 @@ class SlackSmartBot | |
| 300 310 | 
             
                    respond "To do this you need to be an admin user in the master channel", id_user
         | 
| 301 311 | 
             
                  end
         | 
| 302 312 |  | 
| 303 | 
            -
                  # | 
| 304 | 
            -
                  # | 
| 305 | 
            -
                  # | 
| 306 | 
            -
                  # | 
| 307 | 
            -
                  # | 
| 313 | 
            +
                  #helpadmin: `start bot`
         | 
| 314 | 
            +
                  #helpadmin: `start this bot`
         | 
| 315 | 
            +
                  #helpadmin:    the bot will start to listen
         | 
| 316 | 
            +
                  #helpadmin:    You can use this command only if you are an admin user
         | 
| 317 | 
            +
                  #helpadmin:
         | 
| 308 318 | 
             
                when /^start\s(this\s)?bot$/i
         | 
| 309 319 | 
             
                  if ADMIN_USERS.include?(from) #admin user
         | 
| 310 320 | 
             
                    respond "This bot is running and listening from now on. You can pause again: pause this bot", id_user
         | 
| 311 321 | 
             
                    @status = :on
         | 
| 312 | 
            -
                    unless  | 
| 322 | 
            +
                    unless ON_MASTER_BOT
         | 
| 313 323 | 
             
                      get_channels_name_and_id() unless @channels_name.keys.include?(MASTER_CHANNEL) and @channels_name.keys.include?(CHANNEL)
         | 
| 314 324 | 
             
                      send_msg_channel @channels_name[MASTER_CHANNEL], "Changed status on #{@channels_name[CHANNEL]} to :on"
         | 
| 315 325 | 
             
                    end
         | 
| @@ -317,17 +327,17 @@ class SlackSmartBot | |
| 317 327 | 
             
                    respond "Only admin users can change my status", id_user
         | 
| 318 328 | 
             
                  end
         | 
| 319 329 |  | 
| 320 | 
            -
                  # | 
| 321 | 
            -
                  # | 
| 322 | 
            -
                  # | 
| 323 | 
            -
                  # | 
| 324 | 
            -
                  # | 
| 330 | 
            +
                  #helpadmin: `pause bot`
         | 
| 331 | 
            +
                  #helpadmin: `pause this bot`
         | 
| 332 | 
            +
                  #helpadmin:    the bot will pause so it will listen only to admin commands
         | 
| 333 | 
            +
                  #helpadmin:    You can use this command only if you are an admin user
         | 
| 334 | 
            +
                  #helpadmin:
         | 
| 325 335 | 
             
                when /^pause\s(this\s)?bot$/i
         | 
| 326 336 | 
             
                  if ADMIN_USERS.include?(from) #admin user
         | 
| 327 337 | 
             
                    respond "This bot is paused from now on. You can start it again: start this bot", id_user
         | 
| 328 338 | 
             
                    respond "zZzzzzZzzzzZZZZZZzzzzzzzz", id_user
         | 
| 329 339 | 
             
                    @status = :paused
         | 
| 330 | 
            -
                    unless  | 
| 340 | 
            +
                    unless ON_MASTER_BOT
         | 
| 331 341 | 
             
                      get_channels_name_and_id() unless @channels_name.keys.include?(MASTER_CHANNEL) and @channels_name.keys.include?(CHANNEL)
         | 
| 332 342 | 
             
                      send_msg_channel @channels_name[MASTER_CHANNEL], "Changed status on #{@channels_name[CHANNEL]} to :paused"
         | 
| 333 343 | 
             
                    end
         | 
| @@ -335,102 +345,115 @@ class SlackSmartBot | |
| 335 345 | 
             
                    respond "Only admin users can put me on pause", id_user
         | 
| 336 346 | 
             
                  end
         | 
| 337 347 |  | 
| 338 | 
            -
                  # | 
| 339 | 
            -
                  # | 
| 340 | 
            -
                  # | 
| 341 | 
            -
                  # | 
| 348 | 
            +
                  #helpadmin: `bot status`
         | 
| 349 | 
            +
                  #helpadmin:    Displays the status of the bot
         | 
| 350 | 
            +
                  #helpadmin:    If on master channel and admin user also it will display info about bots created
         | 
| 351 | 
            +
                  #helpadmin:
         | 
| 342 352 | 
             
                when /^bot\sstatus/i
         | 
| 343 353 | 
             
                  respond "Status: #{@status}. Rules file: #{File.basename RULES_FILE} ", id_user
         | 
| 344 354 | 
             
                  if @status == :on
         | 
| 345 355 | 
             
                    respond "I'm listening to [#{@listening.join(", ")}]", id_user
         | 
| 346 | 
            -
                    if  | 
| 356 | 
            +
                    if ON_MASTER_BOT and ADMIN_USERS.include?(from)
         | 
| 347 357 | 
             
                      @bots_created.each { |key, value|
         | 
| 348 358 | 
             
                        respond "#{key}: #{value}", id_user
         | 
| 349 359 | 
             
                      }
         | 
| 350 360 | 
             
                    end
         | 
| 351 361 | 
             
                  end
         | 
| 352 362 |  | 
| 353 | 
            -
                  # | 
| 354 | 
            -
                  # | 
| 355 | 
            -
                  # | 
| 356 | 
            -
                  # | 
| 357 | 
            -
                when /^create\sbot\son\s(.+)\s*/i
         | 
| 358 | 
            -
                  if  | 
| 363 | 
            +
                  #helpmaster: `create bot on CHANNEL_NAME`
         | 
| 364 | 
            +
                  #helpmaster:    creates a new bot on the channel specified
         | 
| 365 | 
            +
                  #helpmaster:    it will work only if you are on Master channel
         | 
| 366 | 
            +
                  #helpmaster:
         | 
| 367 | 
            +
                when /^create\sbot\son\s<#C\w+\|(.+)>\s*/i, /^create\sbot\son\s(.+)\s*/i#jal9
         | 
| 368 | 
            +
                  if ON_MASTER_BOT
         | 
| 359 369 | 
             
                    channel = $1
         | 
| 360 | 
            -
             | 
| 370 | 
            +
             | 
| 371 | 
            +
                    get_channels_name_and_id() unless @channels_name.keys.include?(channel) or @channels_id.keys.include?(channel)
         | 
| 372 | 
            +
                    channel_id = nil
         | 
| 373 | 
            +
                    if @channels_name.key?(channel) #it is an id
         | 
| 374 | 
            +
                      channel_id = channel
         | 
| 375 | 
            +
                      channel = @channels_name[channel_id]
         | 
| 376 | 
            +
                    elsif @channels_id.key?(channel) #it is a channel name
         | 
| 377 | 
            +
                      channel_id = @channels_id[channel]
         | 
| 378 | 
            +
                    end
         | 
| 379 | 
            +
                    if channel_id.nil?
         | 
| 380 | 
            +
                      respond "There is no channel with that name: #{channel}, please be sure is written exactly the same", id_user
         | 
| 381 | 
            +
                    elsif channel == MASTER_CHANNEL
         | 
| 382 | 
            +
                      respond "There is already a bot in this channel: #{channel}", id_user
         | 
| 383 | 
            +
                    elsif @bots_created.keys.include?(channel_id) #jal9
         | 
| 361 384 | 
             
                      respond "There is already a bot in this channel: #{channel}, kill it before", id_user
         | 
| 362 385 | 
             
                    else
         | 
| 363 | 
            -
                       | 
| 364 | 
            -
             | 
| 365 | 
            -
             | 
| 366 | 
            -
             | 
| 367 | 
            -
             | 
| 368 | 
            -
             | 
| 369 | 
            -
             | 
| 370 | 
            -
             | 
| 371 | 
            -
             | 
| 372 | 
            -
                        if channel_id != config[:channel]
         | 
| 373 | 
            -
                          begin
         | 
| 374 | 
            -
                            rules_file = "slack-smart-bot_rules_#{channel_id}_#{from.gsub(" ", "_")}.rb"
         | 
| 375 | 
            -
                            if defined?(RULES_FOLDER)
         | 
| 376 | 
            -
                              rules_file = RULES_FOLDER + rules_file
         | 
| 377 | 
            -
                            else
         | 
| 378 | 
            -
                              Dir.mkdir("rules") unless Dir.exist?("rules")
         | 
| 379 | 
            -
                              Dir.mkdir("rules/#{channel_id}") unless Dir.exist?("rules/#{channel_id}")
         | 
| 380 | 
            -
                              rules_file = "./rules/#{channel_id}/" + rules_file
         | 
| 381 | 
            -
                            end
         | 
| 382 | 
            -
                            default_rules = (__FILE__).gsub(/\.rb$/, "_rules.rb")
         | 
| 383 | 
            -
                            File.delete(rules_file) if File.exist?(rules_file)
         | 
| 384 | 
            -
                            FileUtils.copy_file(default_rules, rules_file) unless File.exist?(rules_file)
         | 
| 385 | 
            -
                            admin_users = Array.new()
         | 
| 386 | 
            -
                            admin_users = [from] + MASTER_USERS
         | 
| 387 | 
            -
                            admin_users.uniq!
         | 
| 388 | 
            -
                            @logger.info "ruby #{$0} \"#{channel}\" \"#{admin_users.join(",")}\" \"#{rules_file}\" on"
         | 
| 389 | 
            -
                            t = Thread.new do
         | 
| 390 | 
            -
                              `ruby #{$0} \"#{channel}\" \"#{admin_users.join(",")}\" \"#{rules_file}\" on`
         | 
| 391 | 
            -
                            end
         | 
| 392 | 
            -
                            @bots_created[channel] = {
         | 
| 393 | 
            -
                              creator_name: from,
         | 
| 394 | 
            -
                              channel_id: channel_id,
         | 
| 395 | 
            -
                              channel_name: @channels_name[channel_id],
         | 
| 396 | 
            -
                              status: :on,
         | 
| 397 | 
            -
                              created: Time.now.strftime("%Y-%m-%dT%H:%M:%S.000Z")[0..18],
         | 
| 398 | 
            -
                              rules_file: rules_file,
         | 
| 399 | 
            -
                              admins: admin_users.join(","),
         | 
| 400 | 
            -
                              thread: t,
         | 
| 401 | 
            -
                            }
         | 
| 402 | 
            -
                            respond "The bot has been created on channel: #{channel}. Rules file: #{File.basename rules_file}", id_user
         | 
| 403 | 
            -
                            update_bots_file()
         | 
| 404 | 
            -
                          rescue Exception => stack
         | 
| 405 | 
            -
                            @logger.fatal stack
         | 
| 406 | 
            -
                            message = "Problem creating the bot on channel #{channel}. Error: <#{stack}>."
         | 
| 407 | 
            -
                            @logger.error message
         | 
| 408 | 
            -
                            respond message, id_user
         | 
| 386 | 
            +
                      if channel_id != config[:channel]
         | 
| 387 | 
            +
                        begin
         | 
| 388 | 
            +
                          rules_file = "slack-smart-bot_rules_#{channel_id}_#{from.gsub(" ", "_")}.rb"
         | 
| 389 | 
            +
                          if defined?(RULES_FOLDER)
         | 
| 390 | 
            +
                            rules_file = RULES_FOLDER + rules_file
         | 
| 391 | 
            +
                          else
         | 
| 392 | 
            +
                            Dir.mkdir("rules") unless Dir.exist?("rules")
         | 
| 393 | 
            +
                            Dir.mkdir("rules/#{channel_id}") unless Dir.exist?("rules/#{channel_id}")
         | 
| 394 | 
            +
                            rules_file = "./rules/#{channel_id}/" + rules_file
         | 
| 409 395 | 
             
                          end
         | 
| 410 | 
            -
             | 
| 411 | 
            -
                           | 
| 396 | 
            +
                          default_rules = (__FILE__).gsub(/\.rb$/, "_rules.rb")
         | 
| 397 | 
            +
                          File.delete(rules_file) if File.exist?(rules_file)
         | 
| 398 | 
            +
                          FileUtils.copy_file(default_rules, rules_file) unless File.exist?(rules_file)
         | 
| 399 | 
            +
                          admin_users = Array.new()
         | 
| 400 | 
            +
                          admin_users = [from] + MASTER_USERS
         | 
| 401 | 
            +
                          admin_users.uniq!
         | 
| 402 | 
            +
                          @logger.info "ruby #{$0} \"#{channel}\" \"#{admin_users.join(",")}\" \"#{rules_file}\" on"
         | 
| 403 | 
            +
                          t = Thread.new do
         | 
| 404 | 
            +
                            `ruby #{$0} \"#{channel}\" \"#{admin_users.join(",")}\" \"#{rules_file}\" on`
         | 
| 405 | 
            +
                          end
         | 
| 406 | 
            +
                          @bots_created[channel_id] = {
         | 
| 407 | 
            +
                            creator_name: from,
         | 
| 408 | 
            +
                            channel_id: channel_id,
         | 
| 409 | 
            +
                            channel_name: @channels_name[channel_id],
         | 
| 410 | 
            +
                            status: :on,
         | 
| 411 | 
            +
                            created: Time.now.strftime("%Y-%m-%dT%H:%M:%S.000Z")[0..18],
         | 
| 412 | 
            +
                            rules_file: rules_file,
         | 
| 413 | 
            +
                            admins: admin_users.join(","),
         | 
| 414 | 
            +
                            thread: t,
         | 
| 415 | 
            +
                          }
         | 
| 416 | 
            +
                          respond "The bot has been created on channel: #{channel}. Rules file: #{File.basename rules_file}", id_user
         | 
| 417 | 
            +
                          update_bots_file()
         | 
| 418 | 
            +
                        rescue Exception => stack
         | 
| 419 | 
            +
                          @logger.fatal stack
         | 
| 420 | 
            +
                          message = "Problem creating the bot on channel #{channel}. Error: <#{stack}>."
         | 
| 421 | 
            +
                          @logger.error message
         | 
| 422 | 
            +
                          respond message, id_user
         | 
| 412 423 | 
             
                        end
         | 
| 413 424 | 
             
                      else
         | 
| 414 | 
            -
                        respond "There is  | 
| 425 | 
            +
                        respond "There is already a bot in this channel: #{channel}, and it is the Master Channel!", id_user
         | 
| 415 426 | 
             
                      end
         | 
| 427 | 
            +
             | 
| 416 428 | 
             
                    end
         | 
| 417 429 | 
             
                  else
         | 
| 418 430 | 
             
                    respond "Sorry I cannot create bots from this channel, please visit the master channel", id_user
         | 
| 419 431 | 
             
                  end
         | 
| 420 432 |  | 
| 421 | 
            -
                  # | 
| 422 | 
            -
                  # | 
| 423 | 
            -
                  # | 
| 424 | 
            -
                  # | 
| 425 | 
            -
                when /^kill\sbot\son\s(.+)\s*/i
         | 
| 426 | 
            -
                  if  | 
| 433 | 
            +
                  #helpmaster: `kill bot on CHANNEL_NAME`
         | 
| 434 | 
            +
                  #helpmaster:    kills the bot on the specified channel
         | 
| 435 | 
            +
                  #helpmaster:    Only works if you are on Master channel and you created that bot or you are an admin user
         | 
| 436 | 
            +
                  #helpmaster:
         | 
| 437 | 
            +
                when /^kill\sbot\son\s<#C\w+\|(.+)>\s*/i,/^kill\sbot\son\s(.+)\s*/i
         | 
| 438 | 
            +
                  if ON_MASTER_BOT
         | 
| 427 439 | 
             
                    channel = $1
         | 
| 428 | 
            -
             | 
| 429 | 
            -
             | 
| 430 | 
            -
             | 
| 431 | 
            -
             | 
| 440 | 
            +
             | 
| 441 | 
            +
                    get_channels_name_and_id() unless @channels_name.keys.include?(channel) or @channels_id.keys.include?(channel)
         | 
| 442 | 
            +
                    channel_id = nil
         | 
| 443 | 
            +
                    if @channels_name.key?(channel) #it is an id
         | 
| 444 | 
            +
                      channel_id = channel
         | 
| 445 | 
            +
                      channel = @channels_name[channel_id]
         | 
| 446 | 
            +
                    elsif @channels_id.key?(channel) #it is a channel name
         | 
| 447 | 
            +
                      channel_id = @channels_id[channel]
         | 
| 448 | 
            +
                    end
         | 
| 449 | 
            +
                    if channel_id.nil?
         | 
| 450 | 
            +
                      respond "There is no channel with that name: #{channel}, please be sure is written exactly the same", id_user
         | 
| 451 | 
            +
                    elsif @bots_created.keys.include?(channel_id)
         | 
| 452 | 
            +
                      if @bots_created[channel_id][:admins].split(",").include?(from)
         | 
| 453 | 
            +
                        if @bots_created[channel_id][:thread].kind_of?(Thread) and @bots_created[channel_id][:thread].alive?
         | 
| 454 | 
            +
                          @bots_created[channel_id][:thread].kill
         | 
| 432 455 | 
             
                        end
         | 
| 433 | 
            -
                        @bots_created.delete( | 
| 456 | 
            +
                        @bots_created.delete(channel_id)
         | 
| 434 457 | 
             
                        update_bots_file()
         | 
| 435 458 | 
             
                        respond "Bot on channel: #{channel}, has been killed and deleted.", id_user
         | 
| 436 459 | 
             
                        send_msg_channel(channel, "Bot has been killed by #{from}")
         | 
| @@ -450,9 +473,19 @@ class SlackSmartBot | |
| 450 473 | 
             
                  #help:
         | 
| 451 474 | 
             
                when /^bot help/i, /^bot,? what can I do/i
         | 
| 452 475 | 
             
                  help_message = IO.readlines(__FILE__).join
         | 
| 453 | 
            -
                   | 
| 476 | 
            +
                  if ADMIN_USERS.include?(from) #admin user
         | 
| 477 | 
            +
                    respond "*Commands for administrators:*\n#{help_message.scan(/#\s*help\s*admin:(.*)/).join("\n")}", id_user
         | 
| 478 | 
            +
                  end
         | 
| 479 | 
            +
                  if ON_MASTER_BOT and id_user.nil?
         | 
| 480 | 
            +
                    respond "*Commands only on Master Channel:*\n#{help_message.scan(/#\s*help\s*master:(.*)/).join("\n")}", id_user
         | 
| 481 | 
            +
                  end
         | 
| 482 | 
            +
                  #jal9
         | 
| 454 483 | 
             
                  respond help_message.scan(/#\s*help\s*:(.*)/).join("\n"), id_user
         | 
| 455 | 
            -
                   | 
| 484 | 
            +
                  if id_user.nil? # on a channel
         | 
| 485 | 
            +
                    help_message_rules = IO.readlines(RULES_FILE).join
         | 
| 486 | 
            +
                    respond help_message_rules.scan(/#\s*help\s*:(.*)/).join("\n"), id_user
         | 
| 487 | 
            +
                  end      
         | 
| 488 | 
            +
                  respond "Github project: https://github.com/MarioRuiz/slack-smart-bot", id_user
         | 
| 456 489 | 
             
                else
         | 
| 457 490 | 
             
                  processed = false
         | 
| 458 491 | 
             
                end
         | 
| @@ -467,7 +500,7 @@ class SlackSmartBot | |
| 467 500 | 
             
                  processed2 = true
         | 
| 468 501 |  | 
| 469 502 | 
             
                  # help:
         | 
| 470 | 
            -
                  # help: *These commands will run only when the smart bot is listening to you or on demand | 
| 503 | 
            +
                  # help: *These commands will run only when the smart bot is listening to you or on demand*. On demand examples:
         | 
| 471 504 | 
             
                  # help:       `!THE_COMMAND`
         | 
| 472 505 | 
             
                  # help:       `@bot THE_COMMAND`
         | 
| 473 506 | 
             
                  # help:       `@NAME_OF_BOT THE_COMMAND`
         | 
| @@ -476,7 +509,9 @@ class SlackSmartBot | |
| 476 509 | 
             
                  case command
         | 
| 477 510 |  | 
| 478 511 | 
             
                  #help: `add shortcut NAME: COMMAND`
         | 
| 512 | 
            +
                  #help: `add sc NAME: COMMAND`
         | 
| 479 513 | 
             
                  #help: `add shortcut for all NAME: COMMAND`
         | 
| 514 | 
            +
                  #help: `add sc for all NAME: COMMAND`
         | 
| 480 515 | 
             
                  #help: `shortchut NAME: COMMAND`
         | 
| 481 516 | 
             
                  #help: `shortchut for all NAME: COMMAND`
         | 
| 482 517 | 
             
                  #help:    It will add a shortcut that will execute the command we supply.
         | 
| @@ -487,7 +522,7 @@ class SlackSmartBot | |
| 487 522 | 
             
                  #help:        `sc spanish account`
         | 
| 488 523 | 
             
                  #help:        `shortcut Spanish Account`
         | 
| 489 524 | 
             
                  #help:
         | 
| 490 | 
            -
                  when  | 
| 525 | 
            +
                  when /^(add\s)?shortcut\s(for\sall)?\s*(.+):\s(.+)/i, /^(add\s)sc\s(for\sall)?\s*(.+):\s(.+)/i
         | 
| 491 526 | 
             
                    for_all = $2
         | 
| 492 527 | 
             
                    shortcut_name = $3.to_s.downcase
         | 
| 493 528 | 
             
                    command_to_run = $4
         | 
| @@ -524,9 +559,10 @@ class SlackSmartBot | |
| 524 559 | 
             
                    end
         | 
| 525 560 |  | 
| 526 561 | 
             
                    #help: `delete shortcut NAME`
         | 
| 562 | 
            +
                    #help: `delete sc NAME`
         | 
| 527 563 | 
             
                    #help:    It will delete the shortcut with the supplied name
         | 
| 528 564 | 
             
                    #help:
         | 
| 529 | 
            -
                  when  | 
| 565 | 
            +
                  when /^delete\sshortcut\s(.+)/i, /^delete\ssc\s(.+)/i
         | 
| 530 566 | 
             
                    shortcut = $1.to_s.downcase
         | 
| 531 567 | 
             
                    deleted = false
         | 
| 532 568 |  | 
| @@ -558,9 +594,10 @@ class SlackSmartBot | |
| 558 594 | 
             
                    end
         | 
| 559 595 |  | 
| 560 596 | 
             
                    #help: `see shortcuts`
         | 
| 597 | 
            +
                    #help: `see sc`
         | 
| 561 598 | 
             
                    #help:    It will display the shortcuts stored for the user and for :all
         | 
| 562 599 | 
             
                    #help:
         | 
| 563 | 
            -
                  when  | 
| 600 | 
            +
                  when /^see\sshortcuts/i, /^see\ssc/i
         | 
| 564 601 | 
             
                    msg = ""
         | 
| 565 602 | 
             
                    if @shortcuts[:all].keys.size > 0
         | 
| 566 603 | 
             
                      msg = "*Available shortcuts for all:*\n"
         | 
| @@ -586,7 +623,7 @@ class SlackSmartBot | |
| 586 623 | 
             
                    #help: `id channel CHANNEL_NAME`
         | 
| 587 624 | 
             
                    #help:    shows the id of a channel name
         | 
| 588 625 | 
             
                    #help:
         | 
| 589 | 
            -
                  when  | 
| 626 | 
            +
                  when /^id\schannel\s<#C\w+\|(.+)>\s*/i, /^id channel (.+)/
         | 
| 590 627 | 
             
                    channel_name = $1
         | 
| 591 628 | 
             
                    get_channels_name_and_id()
         | 
| 592 629 | 
             
                    if @channels_id.keys.include?(channel_name)
         | 
| @@ -601,7 +638,7 @@ class SlackSmartBot | |
| 601 638 | 
             
                    # help:       `code puts (34344/99)*(34+14)`
         | 
| 602 639 | 
             
                    # help:       `ruby require 'json'; res=[]; 20.times {res<<rand(100)}; my_json={result: res}; puts my_json.to_json`
         | 
| 603 640 | 
             
                    # help:
         | 
| 604 | 
            -
                  when  | 
| 641 | 
            +
                  when /^ruby\s(.+)/im, /code\s(.+)/im
         | 
| 605 642 | 
             
                    code = $1
         | 
| 606 643 | 
             
                    code.gsub!("\\n", "\n")
         | 
| 607 644 | 
             
                    unless code.match?(/System/i) or code.match?(/Kernel/i) or code.include?("File") or
         | 
| @@ -21,7 +21,7 @@ end | |
| 21 21 | 
             
            # command: command to run
         | 
| 22 22 | 
             
            # processed: in case the command has been already processed on Bot class, by default false
         | 
| 23 23 | 
             
            # help:
         | 
| 24 | 
            -
            # help: *These are specific commands on this  | 
| 24 | 
            +
            # help: *These are specific commands for this bot on this Channel.*
         | 
| 25 25 | 
             
            # help:     They will be accessible only when the bot is listening to you just writing the command
         | 
| 26 26 | 
             
            # help:     or the bot is not listening to you but requested on demand, for example:
         | 
| 27 27 | 
             
            # help:       `!THE_COMMAND`
         | 
| @@ -44,13 +44,13 @@ def rules(from, command, processed, id_user) | |
| 44 44 | 
             
              # help: `echo SOMETHING`
         | 
| 45 45 | 
             
              # help:     repeats SOMETHING
         | 
| 46 46 | 
             
              # help:
         | 
| 47 | 
            -
              when  | 
| 47 | 
            +
              when /^echo\s(.+)/i
         | 
| 48 48 | 
             
                respond $1, id_user
         | 
| 49 49 |  | 
| 50 50 | 
             
                # help: `go to sleep`
         | 
| 51 51 | 
             
                # help:   it will sleep the bot for 10 seconds
         | 
| 52 52 | 
             
                # help:
         | 
| 53 | 
            -
              when  | 
| 53 | 
            +
              when /^go\sto\ssleep/i
         | 
| 54 54 | 
             
                unless @questions.keys.include?(from)
         | 
| 55 55 | 
             
                  ask("do you want me to take a siesta?", command, from, id_user)
         | 
| 56 56 | 
             
                else
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: slack-smart-bot
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.2.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Mario Ruiz
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2019-05- | 
| 11 | 
            +
            date: 2019-05-20 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: slack-ruby-client
         |