hipchat_smart 1.0.2 → 1.1.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/README.md +2 -0
 - data/lib/hipchat_smart.rb +182 -136
 - data/lib/hipchat_smart_rules.rb +11 -11
 - 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: c3e585b909e8904d242c669afb747002c50d72a1101ba5277fba3f486c61f4f6
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: d57b2218f543ff1aa916b57f91bba57c82a37bfe12521f9da1e0d45102e28aa2
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: edfceedc17b581e3be9b6a219ad1927faa073d6a94d11e1c5600635a6980f087140a47fef4d773306c76dc33ebb5388ddb63db7bbec5a503658669cee398dcc7
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: cd2f376978be01e117f610f04ded45075fa1c59be60ce51400e89033be6b4685f0fd0e423e64bd9d743ceccc3049ddad788d7adf66f46dcaa2b36bc71b829073
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -101,6 +101,8 @@ def rules(from, command, processed) 
     | 
|
| 
       101 
101 
     | 
    
         
             
            end
         
     | 
| 
       102 
102 
     | 
    
         | 
| 
       103 
103 
     | 
    
         
             
            ```
         
     | 
| 
      
 104 
     | 
    
         
            +
            ### How to access the bot
         
     | 
| 
      
 105 
     | 
    
         
            +
            You can access the bot directly on the MASTER ROOM, on a secondary room where the bot is running and directly by opening a private chat with the bot, in this case the conversation will be just between you and the bot.
         
     | 
| 
       104 
106 
     | 
    
         | 
| 
       105 
107 
     | 
    
         
             
            ### Available commands even when the bot is not listening to you
         
     | 
| 
       106 
108 
     | 
    
         
             
            Some of the commands are available always even when the bot is not listening to you but it is running
         
     | 
    
        data/lib/hipchat_smart.rb
    CHANGED
    
    | 
         @@ -1,11 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'xmpp4r'
         
     | 
| 
       2 
2 
     | 
    
         
             
            require 'xmpp4r/muc/helper/simplemucclient'
         
     | 
| 
       3 
3 
     | 
    
         
             
            require 'xmpp4r/muc/helper/mucbrowser'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'xmpp4r/roster'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'hipchat'
         
     | 
| 
       4 
6 
     | 
    
         
             
            require 'open-uri'
         
     | 
| 
       5 
7 
     | 
    
         
             
            require 'cgi'
         
     | 
| 
       6 
8 
     | 
    
         
             
            require 'json'
         
     | 
| 
       7 
     | 
    
         
            -
            require 'hipchat'
         
     | 
| 
       8 
9 
     | 
    
         
             
            require 'logger'
         
     | 
| 
      
 10 
     | 
    
         
            +
            require 'fileutils'
         
     | 
| 
      
 11 
     | 
    
         
            +
            require 'open3'
         
     | 
| 
       9 
12 
     | 
    
         | 
| 
       10 
13 
     | 
    
         
             
            if ARGV.size==0
         
     | 
| 
       11 
14 
     | 
    
         
             
              ROOM = MASTER_ROOM
         
     | 
| 
         @@ -13,9 +16,8 @@ if ARGV.size==0 
     | 
|
| 
       13 
16 
     | 
    
         
             
              ADMIN_USERS = MASTER_USERS
         
     | 
| 
       14 
17 
     | 
    
         
             
              RULES_FILE = "#{$0.gsub('.rb', '_rules.rb')}" unless defined?(RULES_FILE)
         
     | 
| 
       15 
18 
     | 
    
         
             
              unless File.exist?(RULES_FILE)
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
            	FileUtils.copy_file(default_rules, RULES_FILE)
         
     | 
| 
      
 19 
     | 
    
         
            +
                default_rules=(__FILE__).gsub(".rb", "_rules.rb")
         
     | 
| 
      
 20 
     | 
    
         
            +
                FileUtils.copy_file(default_rules, RULES_FILE)
         
     | 
| 
       19 
21 
     | 
    
         
             
              end
         
     | 
| 
       20 
22 
     | 
    
         
             
              STATUS_INIT = :on
         
     | 
| 
       21 
23 
     | 
    
         
             
            else
         
     | 
| 
         @@ -30,7 +32,7 @@ SHORTCUTS_FILE = "hipchat_smart_shortcuts_#{ROOM}.rb".gsub(" ", "_") 
     | 
|
| 
       30 
32 
     | 
    
         | 
| 
       31 
33 
     | 
    
         
             
            class Bot
         
     | 
| 
       32 
34 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
              attr_accessor :config, :client, :muc, :muc_browser
         
     | 
| 
      
 35 
     | 
    
         
            +
              attr_accessor :config, :client, :muc, :muc_browser, :roster
         
     | 
| 
       34 
36 
     | 
    
         | 
| 
       35 
37 
     | 
    
         
             
              def initialize(config)
         
     | 
| 
       36 
38 
     | 
    
         
             
                Dir.mkdir("./logs") unless Dir.exist?("./logs")
         
     | 
| 
         @@ -98,6 +100,9 @@ class Bot 
     | 
|
| 
       98 
100 
     | 
    
         
             
                end
         
     | 
| 
       99 
101 
     | 
    
         
             
                config.delete(:password)
         
     | 
| 
       100 
102 
     | 
    
         
             
                client.send(Jabber::Presence.new.set_type(:available))
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                self.roster = Jabber::Roster::Helper.new(client)
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
       101 
106 
     | 
    
         
             
                @status = STATUS_INIT
         
     | 
| 
       102 
107 
     | 
    
         
             
                @questions = Hash.new()
         
     | 
| 
       103 
108 
     | 
    
         
             
                @rooms_jid=Hash.new()
         
     | 
| 
         @@ -129,95 +134,119 @@ class Bot 
     | 
|
| 
       129 
134 
     | 
    
         
             
                }
         
     | 
| 
       130 
135 
     | 
    
         
             
              end
         
     | 
| 
       131 
136 
     | 
    
         | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
       132 
138 
     | 
    
         
             
              def listen
         
     | 
| 
       133 
139 
     | 
    
         
             
                @salutations = [config[:nick].split(/\s+/).first, "bot"]
         
     | 
| 
       134 
140 
     | 
    
         | 
| 
       135 
141 
     | 
    
         
             
                muc.on_message do |time, nick, text|
         
     | 
| 
       136 
     | 
    
         
            -
                   
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
       139 
     | 
    
         
            -
             
     | 
| 
       140 
     | 
    
         
            -
                        when /^Bot has been killed by/
         
     | 
| 
       141 
     | 
    
         
            -
                          exit!
         
     | 
| 
       142 
     | 
    
         
            -
                        when /^Changed status on (.+) to :(.+)/i
         
     | 
| 
       143 
     | 
    
         
            -
                          room=$1
         
     | 
| 
       144 
     | 
    
         
            -
                          status=$2
         
     | 
| 
       145 
     | 
    
         
            -
                          @bots_created[room][:status]=status.to_sym
         
     | 
| 
       146 
     | 
    
         
            -
                          update_bots_file()
         
     | 
| 
       147 
     | 
    
         
            -
                      end
         
     | 
| 
       148 
     | 
    
         
            -
                      next #don't continue analyzing
         
     | 
| 
       149 
     | 
    
         
            -
                    rescue Exception => stack
         
     | 
| 
       150 
     | 
    
         
            -
                      @logger.fatal stack
         
     | 
| 
       151 
     | 
    
         
            -
                      next
         
     | 
| 
       152 
     | 
    
         
            -
                    end
         
     | 
| 
      
 142 
     | 
    
         
            +
                  jid_user = nil
         
     | 
| 
      
 143 
     | 
    
         
            +
                  res = process_first(time, nick, text, jid_user)
         
     | 
| 
      
 144 
     | 
    
         
            +
                  next if res.to_s=="next"
         
     | 
| 
      
 145 
     | 
    
         
            +
                end
         
     | 
| 
       153 
146 
     | 
    
         | 
| 
       154 
     | 
    
         
            -
             
     | 
| 
      
 147 
     | 
    
         
            +
                muc.join(config[:room] + '/' + config[:nick])
         
     | 
| 
      
 148 
     | 
    
         
            +
                respond "Bot started"
         
     | 
| 
       155 
149 
     | 
    
         | 
| 
       156 
     | 
    
         
            -
             
     | 
| 
       157 
     | 
    
         
            -
             
     | 
| 
       158 
     | 
    
         
            -
             
     | 
| 
       159 
     | 
    
         
            -
             
     | 
| 
       160 
     | 
    
         
            -
             
     | 
| 
       161 
     | 
    
         
            -
             
     | 
| 
       162 
     | 
    
         
            -
             
     | 
| 
       163 
     | 
    
         
            -
             
     | 
| 
       164 
     | 
    
         
            -
             
     | 
| 
      
 150 
     | 
    
         
            +
                #accept subscriptions from everyone
         
     | 
| 
      
 151 
     | 
    
         
            +
                roster.add_subscription_request_callback do |item, pres|
         
     | 
| 
      
 152 
     | 
    
         
            +
                  roster.accept_subscription(pres.from)
         
     | 
| 
      
 153 
     | 
    
         
            +
                end
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
                client.add_message_callback do |m|
         
     | 
| 
      
 156 
     | 
    
         
            +
                  unless m.body.to_s==""
         
     | 
| 
      
 157 
     | 
    
         
            +
                    jid_user=m.from.node+"@"+m.from.domain
         
     | 
| 
      
 158 
     | 
    
         
            +
                    user=roster[jid_user]
         
     | 
| 
      
 159 
     | 
    
         
            +
                    unless user.nil?
         
     | 
| 
      
 160 
     | 
    
         
            +
                      res = process_first("", user.attributes["name"], m.body, jid_user)
         
     | 
| 
      
 161 
     | 
    
         
            +
                      next if res.to_s=="next"
         
     | 
| 
       165 
162 
     | 
    
         
             
                    end
         
     | 
| 
      
 163 
     | 
    
         
            +
                  end
         
     | 
| 
      
 164 
     | 
    
         
            +
                end
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
                @logger.info "Bot listening"
         
     | 
| 
      
 167 
     | 
    
         
            +
                self
         
     | 
| 
      
 168 
     | 
    
         
            +
              end
         
     | 
| 
       166 
169 
     | 
    
         | 
| 
      
 170 
     | 
    
         
            +
              def process_first(time, nick, text, jid_user)
         
     | 
| 
      
 171 
     | 
    
         
            +
                if nick==config[:nick] or nick==(config[:nick] + " · Bot") #if message is coming from the bot
         
     | 
| 
      
 172 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 173 
     | 
    
         
            +
                    @logger.info "#{nick}: #{text}"
         
     | 
| 
      
 174 
     | 
    
         
            +
                    case text
         
     | 
| 
      
 175 
     | 
    
         
            +
                      when /^Bot has been killed by/
         
     | 
| 
      
 176 
     | 
    
         
            +
                        exit!
         
     | 
| 
      
 177 
     | 
    
         
            +
                      when /^Changed status on (.+) to :(.+)/i
         
     | 
| 
      
 178 
     | 
    
         
            +
                        room=$1
         
     | 
| 
      
 179 
     | 
    
         
            +
                        status=$2
         
     | 
| 
      
 180 
     | 
    
         
            +
                        @bots_created[room][:status]=status.to_sym
         
     | 
| 
      
 181 
     | 
    
         
            +
                        update_bots_file()
         
     | 
| 
      
 182 
     | 
    
         
            +
                    end
         
     | 
| 
      
 183 
     | 
    
         
            +
                    return :next #don't continue analyzing
         
     | 
| 
      
 184 
     | 
    
         
            +
                  rescue Exception => stack
         
     | 
| 
      
 185 
     | 
    
         
            +
                    @logger.fatal stack
         
     | 
| 
      
 186 
     | 
    
         
            +
                    return :next
         
     | 
| 
       167 
187 
     | 
    
         
             
                  end
         
     | 
| 
       168 
188 
     | 
    
         | 
| 
       169 
     | 
    
         
            -
             
     | 
| 
       170 
     | 
    
         
            -
             
     | 
| 
       171 
     | 
    
         
            -
             
     | 
| 
      
 189 
     | 
    
         
            +
                end
         
     | 
| 
      
 190 
     | 
    
         
            +
             
     | 
| 
      
 191 
     | 
    
         
            +
                if text.match?(/^\/(shortcut|sc)\s(.+)/i)
         
     | 
| 
      
 192 
     | 
    
         
            +
                  shortcut=text.scan(/\/\w+\s*(.+)\s*/i).join.downcase
         
     | 
| 
      
 193 
     | 
    
         
            +
                  if @shortcuts.keys.include?(nick) and @shortcuts[nick].keys.include?(shortcut)
         
     | 
| 
      
 194 
     | 
    
         
            +
                    text=@shortcuts[nick][shortcut]
         
     | 
| 
      
 195 
     | 
    
         
            +
                  elsif @shortcuts.keys.include?(:all) and @shortcuts[:all].keys.include?(shortcut)
         
     | 
| 
      
 196 
     | 
    
         
            +
                    text=@shortcuts[:all][shortcut]
         
     | 
| 
       172 
197 
     | 
    
         
             
                  else
         
     | 
| 
       173 
     | 
    
         
            -
                     
     | 
| 
      
 198 
     | 
    
         
            +
                    respond "Shortcut not found", jid_user
         
     | 
| 
      
 199 
     | 
    
         
            +
                    return :next
         
     | 
| 
       174 
200 
     | 
    
         
             
                  end
         
     | 
| 
       175 
201 
     | 
    
         | 
| 
       176 
     | 
    
         
            -
             
     | 
| 
       177 
     | 
    
         
            -
             
     | 
| 
       178 
     | 
    
         
            -
             
     | 
| 
       179 
     | 
    
         
            -
             
     | 
| 
       180 
     | 
    
         
            -
             
     | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
       182 
     | 
    
         
            -
             
     | 
| 
       183 
     | 
    
         
            -
             
     | 
| 
       184 
     | 
    
         
            -
             
     | 
| 
       185 
     | 
    
         
            -
             
     | 
| 
       186 
     | 
    
         
            -
             
     | 
| 
       187 
     | 
    
         
            -
             
     | 
| 
       188 
     | 
    
         
            -
             
     | 
| 
       189 
     | 
    
         
            -
             
     | 
| 
       190 
     | 
    
         
            -
             
     | 
| 
       191 
     | 
    
         
            -
             
     | 
| 
       192 
     | 
    
         
            -
             
     | 
| 
       193 
     | 
    
         
            -
             
     | 
| 
       194 
     | 
    
         
            -
             
     | 
| 
       195 
     | 
    
         
            -
             
     | 
| 
       196 
     | 
    
         
            -
             
     | 
| 
       197 
     | 
    
         
            -
                           
     | 
| 
       198 
     | 
    
         
            -
             
     | 
| 
       199 
     | 
    
         
            -
                           
     | 
| 
      
 202 
     | 
    
         
            +
                end
         
     | 
| 
      
 203 
     | 
    
         
            +
             
     | 
| 
      
 204 
     | 
    
         
            +
                if @questions.keys.include?(nick)
         
     | 
| 
      
 205 
     | 
    
         
            +
                  command=@questions[nick]
         
     | 
| 
      
 206 
     | 
    
         
            +
                  @questions[nick]=text
         
     | 
| 
      
 207 
     | 
    
         
            +
                else
         
     | 
| 
      
 208 
     | 
    
         
            +
                  command=text
         
     | 
| 
      
 209 
     | 
    
         
            +
                end
         
     | 
| 
      
 210 
     | 
    
         
            +
             
     | 
| 
      
 211 
     | 
    
         
            +
                begin
         
     | 
| 
      
 212 
     | 
    
         
            +
                  t = Thread.new do
         
     | 
| 
      
 213 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 214 
     | 
    
         
            +
                      processed = process(nick, command, jid_user)
         
     | 
| 
      
 215 
     | 
    
         
            +
                      @logger.info "command: #{nick}> #{command}" if processed
         
     | 
| 
      
 216 
     | 
    
         
            +
                      if @status==:on and
         
     | 
| 
      
 217 
     | 
    
         
            +
                          ((@questions.keys.include?(nick) or
         
     | 
| 
      
 218 
     | 
    
         
            +
                              @listening.include?(nick) or
         
     | 
| 
      
 219 
     | 
    
         
            +
                              command.match?(/^@?#{@salutations.join("|")}:*\s+(.+)$/i) or
         
     | 
| 
      
 220 
     | 
    
         
            +
                              command.match?(/^!(.+)$/)))
         
     | 
| 
      
 221 
     | 
    
         
            +
                        @logger.info "command: #{nick}> #{command}" unless processed
         
     | 
| 
      
 222 
     | 
    
         
            +
                        begin
         
     | 
| 
      
 223 
     | 
    
         
            +
                          eval(File.new(RULES_FILE).read) if File.exist?(RULES_FILE)
         
     | 
| 
      
 224 
     | 
    
         
            +
                        rescue Exception => stack
         
     | 
| 
      
 225 
     | 
    
         
            +
                          @logger.fatal "ERROR ON RULES FILE: #{RULES_FILE}"
         
     | 
| 
      
 226 
     | 
    
         
            +
                          @logger.fatal stack
         
     | 
| 
      
 227 
     | 
    
         
            +
                        end
         
     | 
| 
      
 228 
     | 
    
         
            +
                        if defined?(rules)
         
     | 
| 
      
 229 
     | 
    
         
            +
                          command[0]="" if command[0]=="!"
         
     | 
| 
      
 230 
     | 
    
         
            +
                          command.gsub!(/^@\w+:*\s*/, "")
         
     | 
| 
      
 231 
     | 
    
         
            +
                          rules(nick, command, processed, jid_user)
         
     | 
| 
      
 232 
     | 
    
         
            +
                        else
         
     | 
| 
      
 233 
     | 
    
         
            +
                          @logger.warn "It seems like rules method is not defined"
         
     | 
| 
       200 
234 
     | 
    
         
             
                        end
         
     | 
| 
       201 
     | 
    
         
            -
                      rescue Exception => stack
         
     | 
| 
       202 
     | 
    
         
            -
                        @logger.fatal stack
         
     | 
| 
       203 
235 
     | 
    
         
             
                      end
         
     | 
| 
       204 
     | 
    
         
            -
             
     | 
| 
      
 236 
     | 
    
         
            +
                    rescue Exception => stack
         
     | 
| 
      
 237 
     | 
    
         
            +
                      @logger.fatal stack
         
     | 
| 
       205 
238 
     | 
    
         
             
                    end
         
     | 
| 
       206 
239 
     | 
    
         | 
| 
       207 
     | 
    
         
            -
                  rescue => e
         
     | 
| 
       208 
     | 
    
         
            -
                    @logger.error "exception: #{e.inspect}"
         
     | 
| 
       209 
240 
     | 
    
         
             
                  end
         
     | 
| 
       210 
     | 
    
         
            -
                end
         
     | 
| 
       211 
241 
     | 
    
         | 
| 
       212 
     | 
    
         
            -
                 
     | 
| 
       213 
     | 
    
         
            -
             
     | 
| 
       214 
     | 
    
         
            -
                 
     | 
| 
       215 
     | 
    
         
            -
                self
         
     | 
| 
      
 242 
     | 
    
         
            +
                rescue => e
         
     | 
| 
      
 243 
     | 
    
         
            +
                  @logger.error "exception: #{e.inspect}"
         
     | 
| 
      
 244 
     | 
    
         
            +
                end
         
     | 
| 
       216 
245 
     | 
    
         
             
              end
         
     | 
| 
       217 
246 
     | 
    
         | 
| 
       218 
247 
     | 
    
         
             
              #help: Commands you can use:
         
     | 
| 
       219 
248 
     | 
    
         
             
              #help:
         
     | 
| 
       220 
     | 
    
         
            -
              def process(from, command)
         
     | 
| 
      
 249 
     | 
    
         
            +
              def process(from, command, jid_user)
         
     | 
| 
       221 
250 
     | 
    
         
             
                firstname = from.split(/ /).first
         
     | 
| 
       222 
251 
     | 
    
         
             
                processed=true
         
     | 
| 
       223 
252 
     | 
    
         | 
| 
         @@ -231,7 +260,7 @@ class Bot 
     | 
|
| 
       231 
260 
     | 
    
         
             
                  when /^(Hello|Hallo|Hi|Hola|What's\sup|Hey|Zdravo|Molim|Hæ)\s(#{@salutations.join("|")})\s*$/i
         
     | 
| 
       232 
261 
     | 
    
         
             
                    if @status==:on
         
     | 
| 
       233 
262 
     | 
    
         
             
                      greetings=['Hello', 'Hallo', 'Hi', 'Hola', "What's up", "Hey", "Zdravo", "Molim", "Hæ"].sample
         
     | 
| 
       234 
     | 
    
         
            -
                      respond "#{greetings} #{firstname}"
         
     | 
| 
      
 263 
     | 
    
         
            +
                      respond "#{greetings} #{firstname}", jid_user
         
     | 
| 
       235 
264 
     | 
    
         
             
                      @listening<<from unless @listening.include?(from)
         
     | 
| 
       236 
265 
     | 
    
         
             
                    end
         
     | 
| 
       237 
266 
     | 
    
         | 
| 
         @@ -243,7 +272,7 @@ class Bot 
     | 
|
| 
       243 
272 
     | 
    
         
             
                  when /^(Bye|Bæ|Good\sBye|Adiós|Ciao|Bless|Bless\sBless|Zbogom|Adeu)\s(#{@salutations.join("|")})\s*$/i
         
     | 
| 
       244 
273 
     | 
    
         
             
                    if @status==:on
         
     | 
| 
       245 
274 
     | 
    
         
             
                      bye=['Bye', 'Bæ', 'Good Bye', 'Adiós', "Ciao", "Bless", "Bless bless", "Zbogom", "Adeu"].sample
         
     | 
| 
       246 
     | 
    
         
            -
                      respond "#{bye} #{firstname}"
         
     | 
| 
      
 275 
     | 
    
         
            +
                      respond "#{bye} #{firstname}", jid_user
         
     | 
| 
       247 
276 
     | 
    
         
             
                      @listening.delete(from)
         
     | 
| 
       248 
277 
     | 
    
         
             
                    end
         
     | 
| 
       249 
278 
     | 
    
         | 
| 
         @@ -257,15 +286,15 @@ class Bot 
     | 
|
| 
       257 
286 
     | 
    
         
             
                    if ON_MASTER_ROOM
         
     | 
| 
       258 
287 
     | 
    
         
             
                      if ADMIN_USERS.include?(from) #admin user
         
     | 
| 
       259 
288 
     | 
    
         
             
                        unless @questions.keys.include?(from)
         
     | 
| 
       260 
     | 
    
         
            -
                          ask("are you sure?", command, from)
         
     | 
| 
      
 289 
     | 
    
         
            +
                          ask("are you sure?", command, from, jid_user)
         
     | 
| 
       261 
290 
     | 
    
         
             
                        else
         
     | 
| 
       262 
291 
     | 
    
         
             
                          case @questions[from]
         
     | 
| 
       263 
292 
     | 
    
         
             
                            when /yes/i, /yep/i, /sure/i
         
     | 
| 
       264 
     | 
    
         
            -
                              respond "Game over!"
         
     | 
| 
       265 
     | 
    
         
            -
                              respond "Ciao #{firstname}!"
         
     | 
| 
      
 293 
     | 
    
         
            +
                              respond "Game over!", jid_user
         
     | 
| 
      
 294 
     | 
    
         
            +
                              respond "Ciao #{firstname}!", jid_user
         
     | 
| 
       266 
295 
     | 
    
         
             
                              @bots_created.each {|key, value|
         
     | 
| 
       267 
296 
     | 
    
         
             
                                value[:thread]=""
         
     | 
| 
       268 
     | 
    
         
            -
                                 
     | 
| 
      
 297 
     | 
    
         
            +
                                send_msg_room(key, "Bot has been killed by #{from}")
         
     | 
| 
       269 
298 
     | 
    
         
             
                                sleep 0.5
         
     | 
| 
       270 
299 
     | 
    
         
             
                              }
         
     | 
| 
       271 
300 
     | 
    
         
             
                              update_bots_file()
         
     | 
| 
         @@ -273,18 +302,18 @@ class Bot 
     | 
|
| 
       273 
302 
     | 
    
         
             
                              exit!
         
     | 
| 
       274 
303 
     | 
    
         
             
                            when /no/i, /nope/i, /cancel/i
         
     | 
| 
       275 
304 
     | 
    
         
             
                              @questions.delete(from)
         
     | 
| 
       276 
     | 
    
         
            -
                              respond "Thanks, I'm happy to be alive"
         
     | 
| 
      
 305 
     | 
    
         
            +
                              respond "Thanks, I'm happy to be alive", jid_user
         
     | 
| 
       277 
306 
     | 
    
         
             
                            else
         
     | 
| 
       278 
     | 
    
         
            -
                              respond "I don't understand"
         
     | 
| 
       279 
     | 
    
         
            -
                              ask("are you sure do you want me to close? (yes or no)", "quit bot", from)
         
     | 
| 
      
 307 
     | 
    
         
            +
                              respond "I don't understand", jid_user
         
     | 
| 
      
 308 
     | 
    
         
            +
                              ask("are you sure do you want me to close? (yes or no)", "quit bot", from, jid_user)
         
     | 
| 
       280 
309 
     | 
    
         
             
                          end
         
     | 
| 
       281 
310 
     | 
    
         
             
                        end
         
     | 
| 
       282 
311 
     | 
    
         
             
                      else
         
     | 
| 
       283 
     | 
    
         
            -
                        respond "Only admin users can kill me"
         
     | 
| 
      
 312 
     | 
    
         
            +
                        respond "Only admin users can kill me", jid_user
         
     | 
| 
       284 
313 
     | 
    
         
             
                      end
         
     | 
| 
       285 
314 
     | 
    
         | 
| 
       286 
315 
     | 
    
         
             
                    else
         
     | 
| 
       287 
     | 
    
         
            -
                      respond "To do this you need to be an admin user in the master room"
         
     | 
| 
      
 316 
     | 
    
         
            +
                      respond "To do this you need to be an admin user in the master room", jid_user
         
     | 
| 
       288 
317 
     | 
    
         
             
                    end
         
     | 
| 
       289 
318 
     | 
    
         | 
| 
       290 
319 
     | 
    
         
             
                  #help: start bot
         
     | 
| 
         @@ -294,14 +323,14 @@ class Bot 
     | 
|
| 
       294 
323 
     | 
    
         
             
                  #help:
         
     | 
| 
       295 
324 
     | 
    
         
             
                  when /^start\s(this\s)?bot$/i
         
     | 
| 
       296 
325 
     | 
    
         
             
                    if ADMIN_USERS.include?(from) #admin user
         
     | 
| 
       297 
     | 
    
         
            -
                      respond "This bot is running and listening from now on. You can pause again: pause this bot"
         
     | 
| 
      
 326 
     | 
    
         
            +
                      respond "This bot is running and listening from now on. You can pause again: pause this bot", jid_user
         
     | 
| 
       298 
327 
     | 
    
         
             
                      @status=:on
         
     | 
| 
       299 
328 
     | 
    
         
             
                      unless ON_MASTER_ROOM
         
     | 
| 
       300 
329 
     | 
    
         
             
                        get_rooms_name_and_jid() unless @rooms_name.keys.include?(MASTER_ROOM) and @rooms_name.keys.include?(ROOM)
         
     | 
| 
       301 
     | 
    
         
            -
                         
     | 
| 
      
 330 
     | 
    
         
            +
                        send_msg_room @rooms_name[MASTER_ROOM], "Changed status on #{@rooms_name[ROOM]} to :on"
         
     | 
| 
       302 
331 
     | 
    
         
             
                      end
         
     | 
| 
       303 
332 
     | 
    
         
             
                    else
         
     | 
| 
       304 
     | 
    
         
            -
                      respond "Only admin users can change my status"
         
     | 
| 
      
 333 
     | 
    
         
            +
                      respond "Only admin users can change my status", jid_user
         
     | 
| 
       305 
334 
     | 
    
         
             
                    end
         
     | 
| 
       306 
335 
     | 
    
         | 
| 
       307 
336 
     | 
    
         | 
| 
         @@ -312,15 +341,15 @@ class Bot 
     | 
|
| 
       312 
341 
     | 
    
         
             
                  #help:
         
     | 
| 
       313 
342 
     | 
    
         
             
                  when /^pause\s(this\s)?bot$/i
         
     | 
| 
       314 
343 
     | 
    
         
             
                    if ADMIN_USERS.include?(from) #admin user
         
     | 
| 
       315 
     | 
    
         
            -
                      respond "This bot is paused from now on. You can start it again: start this bot"
         
     | 
| 
       316 
     | 
    
         
            -
                      respond "zZzzzzZzzzzZZZZZZzzzzzzzz"
         
     | 
| 
      
 344 
     | 
    
         
            +
                      respond "This bot is paused from now on. You can start it again: start this bot", jid_user
         
     | 
| 
      
 345 
     | 
    
         
            +
                      respond "zZzzzzZzzzzZZZZZZzzzzzzzz", jid_user
         
     | 
| 
       317 
346 
     | 
    
         
             
                      @status=:paused
         
     | 
| 
       318 
347 
     | 
    
         
             
                      unless ON_MASTER_ROOM
         
     | 
| 
       319 
348 
     | 
    
         
             
                        get_rooms_name_and_jid() unless @rooms_name.keys.include?(MASTER_ROOM) and @rooms_name.keys.include?(ROOM)
         
     | 
| 
       320 
     | 
    
         
            -
                         
     | 
| 
      
 349 
     | 
    
         
            +
                        send_msg_room @rooms_name[MASTER_ROOM], "Changed status on #{@rooms_name[ROOM]} to :paused"
         
     | 
| 
       321 
350 
     | 
    
         
             
                      end
         
     | 
| 
       322 
351 
     | 
    
         
             
                    else
         
     | 
| 
       323 
     | 
    
         
            -
                      respond "Only admin users can put me on pause"
         
     | 
| 
      
 352 
     | 
    
         
            +
                      respond "Only admin users can put me on pause", jid_user
         
     | 
| 
       324 
353 
     | 
    
         
             
                    end
         
     | 
| 
       325 
354 
     | 
    
         | 
| 
       326 
355 
     | 
    
         | 
| 
         @@ -329,12 +358,12 @@ class Bot 
     | 
|
| 
       329 
358 
     | 
    
         
             
                  #help:    If on master room and admin user also it will display info about bots created
         
     | 
| 
       330 
359 
     | 
    
         
             
                  #help:
         
     | 
| 
       331 
360 
     | 
    
         
             
                  when /^bot\sstatus/i
         
     | 
| 
       332 
     | 
    
         
            -
                    respond "Status: #{@status}. Rules file: #{File.basename RULES_FILE} "
         
     | 
| 
      
 361 
     | 
    
         
            +
                    respond "Status: #{@status}. Rules file: #{File.basename RULES_FILE} ", jid_user
         
     | 
| 
       333 
362 
     | 
    
         
             
                    if @status==:on
         
     | 
| 
       334 
     | 
    
         
            -
                      respond "I'm listening to [#{@listening.join(", ")}]"
         
     | 
| 
      
 363 
     | 
    
         
            +
                      respond "I'm listening to [#{@listening.join(", ")}]", jid_user
         
     | 
| 
       335 
364 
     | 
    
         
             
                      if ON_MASTER_ROOM and ADMIN_USERS.include?(from)
         
     | 
| 
       336 
365 
     | 
    
         
             
                        @bots_created.each {|key, value|
         
     | 
| 
       337 
     | 
    
         
            -
                          respond "#{key}: #{value}"
         
     | 
| 
      
 366 
     | 
    
         
            +
                          respond "#{key}: #{value}", jid_user
         
     | 
| 
       338 
367 
     | 
    
         
             
                        }
         
     | 
| 
       339 
368 
     | 
    
         
             
                      end
         
     | 
| 
       340 
369 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -347,7 +376,7 @@ class Bot 
     | 
|
| 
       347 
376 
     | 
    
         
             
                    if ON_MASTER_ROOM
         
     | 
| 
       348 
377 
     | 
    
         
             
                      room=$1
         
     | 
| 
       349 
378 
     | 
    
         
             
                      if @bots_created.keys.include?(room)
         
     | 
| 
       350 
     | 
    
         
            -
                        respond "There is already a bot in this room: #{room}, kill it before"
         
     | 
| 
      
 379 
     | 
    
         
            +
                        respond "There is already a bot in this room: #{room}, kill it before", jid_user
         
     | 
| 
       351 
380 
     | 
    
         
             
                      else
         
     | 
| 
       352 
381 
     | 
    
         
             
                        rooms=Hash.new()
         
     | 
| 
       353 
382 
     | 
    
         
             
                        muc_browser.muc_rooms(@xmpp_namespace).each {|jid, name|
         
     | 
| 
         @@ -355,6 +384,7 @@ class Bot 
     | 
|
| 
       355 
384 
     | 
    
         
             
                        }
         
     | 
| 
       356 
385 
     | 
    
         
             
                        if rooms.keys.include?(room)
         
     | 
| 
       357 
386 
     | 
    
         
             
                          jid=rooms[room]
         
     | 
| 
      
 387 
     | 
    
         
            +
                          @rooms_jid[room]=jid
         
     | 
| 
       358 
388 
     | 
    
         
             
                          if jid!=config[:room]
         
     | 
| 
       359 
389 
     | 
    
         
             
                            jid=jid.to_s.gsub(/@.+/, '')
         
     | 
| 
       360 
390 
     | 
    
         
             
                            begin
         
     | 
| 
         @@ -366,7 +396,6 @@ class Bot 
     | 
|
| 
       366 
396 
     | 
    
         
             
                                Dir.mkdir("rules/#{jid}") unless Dir.exist?("rules/#{jid}")
         
     | 
| 
       367 
397 
     | 
    
         
             
                                rules_file="./rules/#{jid}/" + rules_file
         
     | 
| 
       368 
398 
     | 
    
         
             
                              end
         
     | 
| 
       369 
     | 
    
         
            -
                              require 'fileutils'
         
     | 
| 
       370 
399 
     | 
    
         
             
                              default_rules=(__FILE__).gsub(".rb", "_rules.rb")
         
     | 
| 
       371 
400 
     | 
    
         
             
                              File.delete(rules_file) if File.exist?(rules_file)
         
     | 
| 
       372 
401 
     | 
    
         
             
                              FileUtils.copy_file(default_rules, rules_file) unless File.exist?(rules_file)
         
     | 
| 
         @@ -386,24 +415,24 @@ class Bot 
     | 
|
| 
       386 
415 
     | 
    
         
             
                                  admins: admin_users.join(","),
         
     | 
| 
       387 
416 
     | 
    
         
             
                                  thread: t
         
     | 
| 
       388 
417 
     | 
    
         
             
                              }
         
     | 
| 
       389 
     | 
    
         
            -
                              respond "The bot has been created on room: #{room}. Rules file: #{File.basename rules_file}"
         
     | 
| 
      
 418 
     | 
    
         
            +
                              respond "The bot has been created on room: #{room}. Rules file: #{File.basename rules_file}", jid_user
         
     | 
| 
       390 
419 
     | 
    
         
             
                              update_bots_file()
         
     | 
| 
       391 
420 
     | 
    
         
             
                            rescue Exception => stack
         
     | 
| 
       392 
421 
     | 
    
         
             
                              @logger.fatal stack
         
     | 
| 
       393 
422 
     | 
    
         
             
                              message="Problem creating the bot on room #{room}. Error: <#{stack}>."
         
     | 
| 
       394 
423 
     | 
    
         
             
                              @logger.error message
         
     | 
| 
       395 
     | 
    
         
            -
                              respond message
         
     | 
| 
      
 424 
     | 
    
         
            +
                              respond message, jid_user
         
     | 
| 
       396 
425 
     | 
    
         
             
                            end
         
     | 
| 
       397 
426 
     | 
    
         
             
                          else
         
     | 
| 
       398 
     | 
    
         
            -
                            respond "There is already a bot in this room: #{room}, and it is the Master Room!"
         
     | 
| 
      
 427 
     | 
    
         
            +
                            respond "There is already a bot in this room: #{room}, and it is the Master Room!", jid_user
         
     | 
| 
       399 
428 
     | 
    
         
             
                          end
         
     | 
| 
       400 
429 
     | 
    
         | 
| 
       401 
430 
     | 
    
         
             
                        else
         
     | 
| 
       402 
     | 
    
         
            -
                          respond "There is no room with that name: #{room}, please be sure is written exactly the same"
         
     | 
| 
      
 431 
     | 
    
         
            +
                          respond "There is no room with that name: #{room}, please be sure is written exactly the same", jid_user
         
     | 
| 
       403 
432 
     | 
    
         
             
                        end
         
     | 
| 
       404 
433 
     | 
    
         
             
                      end
         
     | 
| 
       405 
434 
     | 
    
         
             
                    else
         
     | 
| 
       406 
     | 
    
         
            -
                      respond "Sorry I cannot create bots from this room, please visit the master room"
         
     | 
| 
      
 435 
     | 
    
         
            +
                      respond "Sorry I cannot create bots from this room, please visit the master room", jid_user
         
     | 
| 
       407 
436 
     | 
    
         
             
                    end
         
     | 
| 
       408 
437 
     | 
    
         | 
| 
       409 
438 
     | 
    
         
             
                  #help: kill bot on ROOM_NAME
         
     | 
| 
         @@ -420,16 +449,16 @@ class Bot 
     | 
|
| 
       420 
449 
     | 
    
         
             
                          end
         
     | 
| 
       421 
450 
     | 
    
         
             
                          @bots_created.delete(room)
         
     | 
| 
       422 
451 
     | 
    
         
             
                          update_bots_file()
         
     | 
| 
       423 
     | 
    
         
            -
                          respond "Bot on room: #{room}, has been killed and deleted."
         
     | 
| 
       424 
     | 
    
         
            -
                           
     | 
| 
      
 452 
     | 
    
         
            +
                          respond "Bot on room: #{room}, has been killed and deleted.", jid_user
         
     | 
| 
      
 453 
     | 
    
         
            +
                          send_msg_room(room, "Bot has been killed by #{from}")
         
     | 
| 
       425 
454 
     | 
    
         
             
                        else
         
     | 
| 
       426 
     | 
    
         
            -
                          respond "You need to be the creator or an admin of that room"
         
     | 
| 
      
 455 
     | 
    
         
            +
                          respond "You need to be the creator or an admin of that room", jid_user
         
     | 
| 
       427 
456 
     | 
    
         
             
                        end
         
     | 
| 
       428 
457 
     | 
    
         
             
                      else
         
     | 
| 
       429 
     | 
    
         
            -
                        respond "There is no bot in this room: #{room}"
         
     | 
| 
      
 458 
     | 
    
         
            +
                        respond "There is no bot in this room: #{room}", jid_user
         
     | 
| 
       430 
459 
     | 
    
         
             
                      end
         
     | 
| 
       431 
460 
     | 
    
         
             
                    else
         
     | 
| 
       432 
     | 
    
         
            -
                      respond "Sorry I cannot kill bots from this room, please visit the master room"
         
     | 
| 
      
 461 
     | 
    
         
            +
                      respond "Sorry I cannot kill bots from this room, please visit the master room", jid_user
         
     | 
| 
       433 
462 
     | 
    
         
             
                    end
         
     | 
| 
       434 
463 
     | 
    
         | 
| 
       435 
464 
     | 
    
         
             
                  #help: bot help
         
     | 
| 
         @@ -439,8 +468,8 @@ class Bot 
     | 
|
| 
       439 
468 
     | 
    
         
             
                  when /^bot help/i, /^bot,? what can I do/i
         
     | 
| 
       440 
469 
     | 
    
         
             
                    help_message = IO.readlines(__FILE__).join
         
     | 
| 
       441 
470 
     | 
    
         
             
                    help_message_rules = IO.readlines(RULES_FILE).join
         
     | 
| 
       442 
     | 
    
         
            -
                    respond "/quote " + help_message.scan(/#\s*help\s*:(.*)/).join("\n")
         
     | 
| 
       443 
     | 
    
         
            -
                    respond "/quote " + help_message_rules.scan(/#\s*help\s*:(.*)/).join("\n")
         
     | 
| 
      
 471 
     | 
    
         
            +
                    respond "/quote " + help_message.scan(/#\s*help\s*:(.*)/).join("\n"), jid_user
         
     | 
| 
      
 472 
     | 
    
         
            +
                    respond "/quote " + help_message_rules.scan(/#\s*help\s*:(.*)/).join("\n"), jid_user
         
     | 
| 
       444 
473 
     | 
    
         | 
| 
       445 
474 
     | 
    
         
             
                  else
         
     | 
| 
       446 
475 
     | 
    
         
             
                    processed = false
         
     | 
| 
         @@ -482,31 +511,31 @@ class Bot 
     | 
|
| 
       482 
511 
     | 
    
         
             
                      @shortcuts[from]=Hash.new() unless @shortcuts.keys.include?(from)
         
     | 
| 
       483 
512 
     | 
    
         | 
| 
       484 
513 
     | 
    
         
             
                      if !ADMIN_USERS.include?(from) and @shortcuts[:all].include?(shortcut_name) and !@shortcuts[from].include?(shortcut_name)
         
     | 
| 
       485 
     | 
    
         
            -
                        respond "Only the creator of the shortcut or an admin user can modify it"
         
     | 
| 
      
 514 
     | 
    
         
            +
                        respond "Only the creator of the shortcut or an admin user can modify it", jid_user
         
     | 
| 
       486 
515 
     | 
    
         
             
                      elsif !@shortcuts[from].include?(shortcut_name)
         
     | 
| 
       487 
516 
     | 
    
         
             
                        #new shortcut
         
     | 
| 
       488 
517 
     | 
    
         
             
                        @shortcuts[from][shortcut_name]=command_to_run
         
     | 
| 
       489 
518 
     | 
    
         
             
                        @shortcuts[:all][shortcut_name]=command_to_run if for_all.to_s!=""
         
     | 
| 
       490 
519 
     | 
    
         
             
                        update_shortcuts_file()
         
     | 
| 
       491 
     | 
    
         
            -
                        respond "shortcut added"
         
     | 
| 
      
 520 
     | 
    
         
            +
                        respond "shortcut added", jid_user
         
     | 
| 
       492 
521 
     | 
    
         
             
                      else
         
     | 
| 
       493 
522 
     | 
    
         | 
| 
       494 
523 
     | 
    
         
             
                        #are you sure? to avoid overwriting existing
         
     | 
| 
       495 
524 
     | 
    
         
             
                        unless @questions.keys.include?(from)
         
     | 
| 
       496 
     | 
    
         
            -
                          ask("The shortcut already exists, are you sure you want to overwrite it?", command, from)
         
     | 
| 
      
 525 
     | 
    
         
            +
                          ask("The shortcut already exists, are you sure you want to overwrite it?", command, from, jid_user)
         
     | 
| 
       497 
526 
     | 
    
         
             
                        else
         
     | 
| 
       498 
527 
     | 
    
         
             
                          case @questions[from]
         
     | 
| 
       499 
528 
     | 
    
         
             
                            when /^(yes|yep)/i
         
     | 
| 
       500 
529 
     | 
    
         
             
                              @shortcuts[from][shortcut_name]=command_to_run
         
     | 
| 
       501 
530 
     | 
    
         
             
                              @shortcuts[:all][shortcut_name]=command_to_run if for_all.to_s!=""
         
     | 
| 
       502 
531 
     | 
    
         
             
                              update_shortcuts_file()
         
     | 
| 
       503 
     | 
    
         
            -
                              respond "shortcut added"
         
     | 
| 
      
 532 
     | 
    
         
            +
                              respond "shortcut added", jid_user
         
     | 
| 
       504 
533 
     | 
    
         
             
                              @questions.delete(from)
         
     | 
| 
       505 
534 
     | 
    
         
             
                            when /^no/i
         
     | 
| 
       506 
     | 
    
         
            -
                              respond "ok, I won't add it"
         
     | 
| 
      
 535 
     | 
    
         
            +
                              respond "ok, I won't add it", jid_user
         
     | 
| 
       507 
536 
     | 
    
         
             
                              @questions.delete(from)
         
     | 
| 
       508 
537 
     | 
    
         
             
                            else
         
     | 
| 
       509 
     | 
    
         
            -
                              respond "I don't understand, yes or no?"
         
     | 
| 
      
 538 
     | 
    
         
            +
                              respond "I don't understand, yes or no?", jid_user
         
     | 
| 
       510 
539 
     | 
    
         
             
                          end
         
     | 
| 
       511 
540 
     | 
    
         
             
                        end
         
     | 
| 
       512 
541 
     | 
    
         | 
| 
         @@ -520,30 +549,30 @@ class Bot 
     | 
|
| 
       520 
549 
     | 
    
         
             
                      deleted=false
         
     | 
| 
       521 
550 
     | 
    
         | 
| 
       522 
551 
     | 
    
         
             
                      if !ADMIN_USERS.include?(from) and @shortcuts[:all].include?(shortcut) and !@shortcuts[from].include?(shortcut)
         
     | 
| 
       523 
     | 
    
         
            -
                        respond "Only the creator of the shortcut or an admin user can delete it"
         
     | 
| 
      
 552 
     | 
    
         
            +
                        respond "Only the creator of the shortcut or an admin user can delete it", jid_user
         
     | 
| 
       524 
553 
     | 
    
         
             
                      elsif (@shortcuts.keys.include?(from) and @shortcuts[from].keys.include?(shortcut)) or
         
     | 
| 
       525 
554 
     | 
    
         
             
                          (ADMIN_USERS.include?(from) and @shortcuts[:all].include?(shortcut))
         
     | 
| 
       526 
555 
     | 
    
         
             
                        #are you sure? to avoid deleting by mistake
         
     | 
| 
       527 
556 
     | 
    
         
             
                        unless @questions.keys.include?(from)
         
     | 
| 
       528 
     | 
    
         
            -
                          ask("are you sure you want to delete it?", command, from)
         
     | 
| 
      
 557 
     | 
    
         
            +
                          ask("are you sure you want to delete it?", command, from, jid_user)
         
     | 
| 
       529 
558 
     | 
    
         
             
                        else
         
     | 
| 
       530 
559 
     | 
    
         
             
                          case @questions[from]
         
     | 
| 
       531 
560 
     | 
    
         
             
                            when /^(yes|yep)/i
         
     | 
| 
       532 
     | 
    
         
            -
                              respond "shortcut deleted!"
         
     | 
| 
       533 
     | 
    
         
            -
                              respond "#{shortcut}: #{@shortcuts[from][shortcut]}"
         
     | 
| 
      
 561 
     | 
    
         
            +
                              respond "shortcut deleted!", jid_user
         
     | 
| 
      
 562 
     | 
    
         
            +
                              respond "#{shortcut}: #{@shortcuts[from][shortcut]}", jid_user
         
     | 
| 
       534 
563 
     | 
    
         
             
                              @shortcuts[from].delete(shortcut)
         
     | 
| 
       535 
564 
     | 
    
         
             
                              @shortcuts[:all].delete(shortcut)
         
     | 
| 
       536 
565 
     | 
    
         
             
                              @questions.delete(from)
         
     | 
| 
       537 
566 
     | 
    
         
             
                              update_shortcuts_file()
         
     | 
| 
       538 
567 
     | 
    
         
             
                            when /^no/i
         
     | 
| 
       539 
     | 
    
         
            -
                              respond "ok, I won't delete it"
         
     | 
| 
      
 568 
     | 
    
         
            +
                              respond "ok, I won't delete it", jid_user
         
     | 
| 
       540 
569 
     | 
    
         
             
                              @questions.delete(from)
         
     | 
| 
       541 
570 
     | 
    
         
             
                            else
         
     | 
| 
       542 
     | 
    
         
            -
                              respond "I don't understand, yes or no?"
         
     | 
| 
      
 571 
     | 
    
         
            +
                              respond "I don't understand, yes or no?", jid_user
         
     | 
| 
       543 
572 
     | 
    
         
             
                          end
         
     | 
| 
       544 
573 
     | 
    
         
             
                        end
         
     | 
| 
       545 
574 
     | 
    
         
             
                      else
         
     | 
| 
       546 
     | 
    
         
            -
                        respond "shortcut not found"
         
     | 
| 
      
 575 
     | 
    
         
            +
                        respond "shortcut not found", jid_user
         
     | 
| 
       547 
576 
     | 
    
         
             
                      end
         
     | 
| 
       548 
577 
     | 
    
         | 
| 
       549 
578 
     | 
    
         
             
                    #help: see shortcuts
         
     | 
| 
         @@ -556,7 +585,7 @@ class Bot 
     | 
|
| 
       556 
585 
     | 
    
         
             
                        @shortcuts[:all].each {|name, value|
         
     | 
| 
       557 
586 
     | 
    
         
             
                          msg+="#{name}: #{value}\n"
         
     | 
| 
       558 
587 
     | 
    
         
             
                        }
         
     | 
| 
       559 
     | 
    
         
            -
                        respond msg
         
     | 
| 
      
 588 
     | 
    
         
            +
                        respond msg, jid_user
         
     | 
| 
       560 
589 
     | 
    
         
             
                      end
         
     | 
| 
       561 
590 
     | 
    
         | 
| 
       562 
591 
     | 
    
         
             
                      if @shortcuts.keys.include?(from) and @shortcuts[from].keys.size>0
         
     | 
| 
         @@ -567,10 +596,10 @@ class Bot 
     | 
|
| 
       567 
596 
     | 
    
         
             
                          new_hash.each {|name, value|
         
     | 
| 
       568 
597 
     | 
    
         
             
                            msg+="#{name}: #{value}\n"
         
     | 
| 
       569 
598 
     | 
    
         
             
                          }
         
     | 
| 
       570 
     | 
    
         
            -
                          respond msg
         
     | 
| 
      
 599 
     | 
    
         
            +
                          respond msg, jid_user
         
     | 
| 
       571 
600 
     | 
    
         
             
                        end
         
     | 
| 
       572 
601 
     | 
    
         
             
                      end
         
     | 
| 
       573 
     | 
    
         
            -
                      respond "No shortcuts found" if msg==""
         
     | 
| 
      
 602 
     | 
    
         
            +
                      respond "No shortcuts found", jid_user if msg==""
         
     | 
| 
       574 
603 
     | 
    
         | 
| 
       575 
604 
     | 
    
         
             
                    #help: jid room ROOM_NAME
         
     | 
| 
       576 
605 
     | 
    
         
             
                    #help:    shows the jid of a room name
         
     | 
| 
         @@ -579,9 +608,9 @@ class Bot 
     | 
|
| 
       579 
608 
     | 
    
         
             
                      room_name=$1
         
     | 
| 
       580 
609 
     | 
    
         
             
                      get_rooms_name_and_jid()
         
     | 
| 
       581 
610 
     | 
    
         
             
                      if @rooms_jid.keys.include?(room_name)
         
     | 
| 
       582 
     | 
    
         
            -
                        respond "the jid of #{room_name} is #{@rooms_jid[room_name]}"
         
     | 
| 
      
 611 
     | 
    
         
            +
                        respond "the jid of #{room_name} is #{@rooms_jid[room_name]}", jid_user
         
     | 
| 
       583 
612 
     | 
    
         
             
                      else
         
     | 
| 
       584 
     | 
    
         
            -
                        respond "room: #{room_name} not found"
         
     | 
| 
      
 613 
     | 
    
         
            +
                        respond "room: #{room_name} not found", jid_user
         
     | 
| 
       585 
614 
     | 
    
         
             
                      end
         
     | 
| 
       586 
615 
     | 
    
         | 
| 
       587 
616 
     | 
    
         
             
                    # help: ruby RUBY_CODE
         
     | 
| 
         @@ -598,22 +627,21 @@ class Bot 
     | 
|
| 
       598 
627 
     | 
    
         
             
                          code.match?(/open3/i) or code.match?(/bundle/i) or code.match?(/gemfile/i) or code.include?("%x") or
         
     | 
| 
       599 
628 
     | 
    
         
             
                          code.include?("ENV")
         
     | 
| 
       600 
629 
     | 
    
         
             
                        begin
         
     | 
| 
       601 
     | 
    
         
            -
                          require 'open3'
         
     | 
| 
       602 
630 
     | 
    
         
             
                          stdout, stderr, status = Open3.capture3("ruby -e \"#{code.gsub('"', '\"')}\"")
         
     | 
| 
       603 
631 
     | 
    
         
             
                          if stderr==""
         
     | 
| 
       604 
632 
     | 
    
         
             
                            if stdout==""
         
     | 
| 
       605 
     | 
    
         
            -
                              respond "Nothing returned. Remember you need to use p or puts to print"
         
     | 
| 
      
 633 
     | 
    
         
            +
                              respond "Nothing returned. Remember you need to use p or puts to print", jid_user
         
     | 
| 
       606 
634 
     | 
    
         
             
                            else
         
     | 
| 
       607 
     | 
    
         
            -
                              respond stdout
         
     | 
| 
      
 635 
     | 
    
         
            +
                              respond stdout, jid_user
         
     | 
| 
       608 
636 
     | 
    
         
             
                            end
         
     | 
| 
       609 
637 
     | 
    
         
             
                          else
         
     | 
| 
       610 
     | 
    
         
            -
                            respond stderr
         
     | 
| 
      
 638 
     | 
    
         
            +
                            respond stderr, jid_user
         
     | 
| 
       611 
639 
     | 
    
         
             
                          end
         
     | 
| 
       612 
640 
     | 
    
         
             
                        rescue Exception => exc
         
     | 
| 
       613 
     | 
    
         
            -
                          respond exc
         
     | 
| 
      
 641 
     | 
    
         
            +
                          respond exc, jid_user
         
     | 
| 
       614 
642 
     | 
    
         
             
                        end
         
     | 
| 
       615 
643 
     | 
    
         
             
                      else
         
     | 
| 
       616 
     | 
    
         
            -
                        respond "Sorry I cannot run this due security issues"
         
     | 
| 
      
 644 
     | 
    
         
            +
                        respond "Sorry I cannot run this due security issues", jid_user
         
     | 
| 
       617 
645 
     | 
    
         
             
                      end
         
     | 
| 
       618 
646 
     | 
    
         | 
| 
       619 
647 
     | 
    
         
             
                    else
         
     | 
| 
         @@ -625,28 +653,46 @@ class Bot 
     | 
|
| 
       625 
653 
     | 
    
         
             
                return processed
         
     | 
| 
       626 
654 
     | 
    
         
             
              end
         
     | 
| 
       627 
655 
     | 
    
         | 
| 
       628 
     | 
    
         
            -
              def respond(msg)
         
     | 
| 
       629 
     | 
    
         
            -
                 
     | 
| 
      
 656 
     | 
    
         
            +
              def respond(msg,jid_user=nil)
         
     | 
| 
      
 657 
     | 
    
         
            +
                if jid_user.nil?
         
     | 
| 
      
 658 
     | 
    
         
            +
                  muc.send Jabber::Message.new(muc.room, msg)
         
     | 
| 
      
 659 
     | 
    
         
            +
                else #private message
         
     | 
| 
      
 660 
     | 
    
         
            +
                  send_msg_user(jid_user, msg)
         
     | 
| 
      
 661 
     | 
    
         
            +
                end
         
     | 
| 
       630 
662 
     | 
    
         
             
              end
         
     | 
| 
       631 
663 
     | 
    
         | 
| 
       632 
664 
     | 
    
         
             
              #context: previous message
         
     | 
| 
       633 
665 
     | 
    
         
             
              #to: user that should answer
         
     | 
| 
       634 
     | 
    
         
            -
              def ask(question, context, to)
         
     | 
| 
       635 
     | 
    
         
            -
                 
     | 
| 
      
 666 
     | 
    
         
            +
              def ask(question, context, to, jid_user=nil)
         
     | 
| 
      
 667 
     | 
    
         
            +
                if jid_user.nil?
         
     | 
| 
      
 668 
     | 
    
         
            +
                  muc.send Jabber::Message.new(muc.room, "#{to}: #{question}")
         
     | 
| 
      
 669 
     | 
    
         
            +
                else #private message
         
     | 
| 
      
 670 
     | 
    
         
            +
                  send_msg_user(jid_user, "#{to}: #{question}")
         
     | 
| 
      
 671 
     | 
    
         
            +
                end
         
     | 
| 
       636 
672 
     | 
    
         
             
                @questions[to]=context
         
     | 
| 
       637 
673 
     | 
    
         
             
              end
         
     | 
| 
       638 
674 
     | 
    
         | 
| 
      
 675 
     | 
    
         
            +
             
     | 
| 
       639 
676 
     | 
    
         
             
              # Uses the hipchat gem (REST)
         
     | 
| 
       640 
677 
     | 
    
         
             
              # to: (String) Room name
         
     | 
| 
       641 
678 
     | 
    
         
             
              # msg: (String) message to send
         
     | 
| 
       642 
     | 
    
         
            -
              def  
     | 
| 
      
 679 
     | 
    
         
            +
              def send_msg_room(to, msg)
         
     | 
| 
       643 
680 
     | 
    
         
             
                unless msg==""
         
     | 
| 
       644 
681 
     | 
    
         
             
                  hc_client=HipChat::Client.new(config[:token], :server_url => config[:jid].to_s.scan(/.+@(.+)\/.+/).join)
         
     | 
| 
       645 
682 
     | 
    
         
             
                  hc_client[to].send("Bot", msg)
         
     | 
| 
       646 
683 
     | 
    
         
             
                end
         
     | 
| 
       647 
     | 
    
         
            -
             
     | 
| 
       648 
684 
     | 
    
         
             
              end
         
     | 
| 
       649 
685 
     | 
    
         | 
| 
      
 686 
     | 
    
         
            +
              #to send messages without listening for a response to users
         
     | 
| 
      
 687 
     | 
    
         
            +
              #to: jid
         
     | 
| 
      
 688 
     | 
    
         
            +
              def send_msg_user(to, msg)
         
     | 
| 
      
 689 
     | 
    
         
            +
                unless msg==""
         
     | 
| 
      
 690 
     | 
    
         
            +
                  to=to+"@chat."+@xmpp_namespace.scan(/\w+\.(.+)/).join unless to.include?("@")
         
     | 
| 
      
 691 
     | 
    
         
            +
                  message = Jabber::Message::new(to, msg)
         
     | 
| 
      
 692 
     | 
    
         
            +
                  message.type=:chat
         
     | 
| 
      
 693 
     | 
    
         
            +
                  client.send message
         
     | 
| 
      
 694 
     | 
    
         
            +
                end
         
     | 
| 
      
 695 
     | 
    
         
            +
              end
         
     | 
| 
       650 
696 
     | 
    
         | 
| 
       651 
697 
     | 
    
         
             
              def always
         
     | 
| 
       652 
698 
     | 
    
         
             
                loop {sleep 1}
         
     | 
    
        data/lib/hipchat_smart_rules.rb
    CHANGED
    
    | 
         @@ -5,13 +5,13 @@ else 
     | 
|
| 
       5 
5 
     | 
    
         
             
              @testing = true
         
     | 
| 
       6 
6 
     | 
    
         
             
              @questions = Hash.new()
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
              def respond(message)
         
     | 
| 
      
 8 
     | 
    
         
            +
              def respond(message, jid_user)
         
     | 
| 
       9 
9 
     | 
    
         
             
                puts message
         
     | 
| 
       10 
10 
     | 
    
         
             
              end
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
              #context: previous message
         
     | 
| 
       13 
13 
     | 
    
         
             
              #to: user that should answer
         
     | 
| 
       14 
     | 
    
         
            -
              def ask(question, context, to)
         
     | 
| 
      
 14 
     | 
    
         
            +
              def ask(question, context, to, jid_user)
         
     | 
| 
       15 
15 
     | 
    
         
             
                puts "Bot: #{question}"
         
     | 
| 
       16 
16 
     | 
    
         
             
                @questions[to]=context
         
     | 
| 
       17 
17 
     | 
    
         
             
              end
         
     | 
| 
         @@ -28,7 +28,7 @@ end 
     | 
|
| 
       28 
28 
     | 
    
         
             
            # help:       @FIRST_NAME_BOT THE_COMMAND
         
     | 
| 
       29 
29 
     | 
    
         
             
            # help:       FIRST_NAME_BOT THE_COMMAND
         
     | 
| 
       30 
30 
     | 
    
         
             
            # help:
         
     | 
| 
       31 
     | 
    
         
            -
            def rules(from, command, processed)
         
     | 
| 
      
 31 
     | 
    
         
            +
            def rules(from, command, processed, jid_user)
         
     | 
| 
       32 
32 
     | 
    
         
             
              if @testing
         
     | 
| 
       33 
33 
     | 
    
         
             
                puts "#{from}: #{command}"
         
     | 
| 
       34 
34 
     | 
    
         
             
                if @questions.keys.include?(from)
         
     | 
| 
         @@ -44,32 +44,32 @@ def rules(from, command, processed) 
     | 
|
| 
       44 
44 
     | 
    
         
             
                # help:     repeats SOMETHING
         
     | 
| 
       45 
45 
     | 
    
         
             
                # help:
         
     | 
| 
       46 
46 
     | 
    
         
             
                when /echo\s(.+)/i
         
     | 
| 
       47 
     | 
    
         
            -
                  respond $1
         
     | 
| 
      
 47 
     | 
    
         
            +
                  respond $1, jid_user
         
     | 
| 
       48 
48 
     | 
    
         | 
| 
       49 
49 
     | 
    
         
             
                # help: go to sleep
         
     | 
| 
       50 
50 
     | 
    
         
             
                # help:   it will sleep the bot for 10 seconds
         
     | 
| 
       51 
51 
     | 
    
         
             
                # help:
         
     | 
| 
       52 
52 
     | 
    
         
             
                when /go\sto\ssleep/i
         
     | 
| 
       53 
53 
     | 
    
         
             
                  unless @questions.keys.include?(from)
         
     | 
| 
       54 
     | 
    
         
            -
                    ask("do you want me to take a siesta?", command, from)
         
     | 
| 
      
 54 
     | 
    
         
            +
                    ask("do you want me to take a siesta?", command, from, jid_user)
         
     | 
| 
       55 
55 
     | 
    
         
             
                  else
         
     | 
| 
       56 
56 
     | 
    
         
             
                    case @questions[from]
         
     | 
| 
       57 
57 
     | 
    
         
             
                      when /yes/i, /yep/i, /sure/i
         
     | 
| 
       58 
     | 
    
         
            -
                        respond "zZzzzzzZZZZZZzzzzzzz!"
         
     | 
| 
       59 
     | 
    
         
            -
                        respond "I'll be sleeping for 10 secs... just for you"
         
     | 
| 
      
 58 
     | 
    
         
            +
                        respond "zZzzzzzZZZZZZzzzzzzz!", jid_user
         
     | 
| 
      
 59 
     | 
    
         
            +
                        respond "I'll be sleeping for 10 secs... just for you", jid_user
         
     | 
| 
       60 
60 
     | 
    
         
             
                        sleep 10
         
     | 
| 
       61 
61 
     | 
    
         
             
                      when /no/i, /nope/i, /cancel/i
         
     | 
| 
       62 
62 
     | 
    
         
             
                        @questions.delete(from)
         
     | 
| 
       63 
     | 
    
         
            -
                        respond "Thanks, I'm happy to be awake"
         
     | 
| 
      
 63 
     | 
    
         
            +
                        respond "Thanks, I'm happy to be awake", jid_user
         
     | 
| 
       64 
64 
     | 
    
         
             
                      else
         
     | 
| 
       65 
     | 
    
         
            -
                        respond "I don't understand"
         
     | 
| 
       66 
     | 
    
         
            -
                        ask("are you sure do you want me to sleep? (yes or no)", "go to sleep", from)
         
     | 
| 
      
 65 
     | 
    
         
            +
                        respond "I don't understand", jid_user
         
     | 
| 
      
 66 
     | 
    
         
            +
                        ask("are you sure do you want me to sleep? (yes or no)", "go to sleep", from, jid_user)
         
     | 
| 
       67 
67 
     | 
    
         
             
                    end
         
     | 
| 
       68 
68 
     | 
    
         
             
                  end
         
     | 
| 
       69 
69 
     | 
    
         
             
                else
         
     | 
| 
       70 
70 
     | 
    
         
             
                  unless processed
         
     | 
| 
       71 
71 
     | 
    
         
             
                    resp = %w{ what huh sorry }.sample
         
     | 
| 
       72 
     | 
    
         
            -
                    respond "#{firstname}: #{resp}?"
         
     | 
| 
      
 72 
     | 
    
         
            +
                    respond "#{firstname}: #{resp}?", jid_user
         
     | 
| 
       73 
73 
     | 
    
         
             
                  end
         
     | 
| 
       74 
74 
     | 
    
         
             
              end
         
     | 
| 
       75 
75 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: hipchat_smart
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.0 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.1.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: 2018- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2018-04-09 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: xmpp4r
         
     |