Zum Inhalt springen

Metafridge Jabber Support: Unterschied zwischen den Versionen

Consti (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Consti (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
== Ist: ==
Ein Bot in Rails, welcher per Jabber Account neue Messages entgegen nimmt und an den Fridge sendet;
Ein Bot in Rails, welcher per Jabber Account neue Messages entgegen nimmt und an den Fridge sendet;
Sollte eigentlich primär für den Twitterbot sein, damit man auch 'direct' messages an den Twitter Bot schicken kann, die dann angezeigt werden.
Sollte eigentlich primär für den Twitterbot sein, damit man auch 'direct' messages an den Twitter Bot schicken kann, die dann angezeigt werden.
Aber nachdem Twitter im Moment kein Jabber anbietet (Performance Probleme) ists nun mehr 'nur' ein Jabber Bot :)
Aber nachdem Twitter im Moment kein Jabber anbietet (Performance Probleme) ists nun mehr 'nur' ein Jabber Bot :)
Benoetigt 'xmpp4r' gem;
Benoetigt: ruby on rails, 'xmpp4r' gem (alles andere sollte schon da sein :));
 
== Kann: ==
 
!help
!last
!last+time
!events
!sense
!about
 
 
== Will: ==
 
Ideen und Vorschläge was man(n) noch so reinbauen kann :)
 


== Dankt: ==
Overflo, Wizard23, Marius für den Metafridge + Fin für die Twitteranbindung
Sushimako fürs Script-Hosting und seine Geduld, alle paar Stunden ne neue Version drauf zu tun :)
== Diff: ==
:Version 0.5: Added !about (About the Bot) and !events (For the Metalab Event list)
:Version 0.4: /command wurde zu !command; Added !help und !sense
:Version 0.4: /command wurde zu !command; Added !help und !sense
:Version 0.3: Das Command '/last' gibt jetzt die letzten 10 Metafridge Nachrichten aus - '/last+time' ist mit Timestamp;
:Version 0.3: Das Command '/last' gibt jetzt die letzten 10 Metafridge Nachrichten aus - '/last+time' ist mit Timestamp;
:Version 0.2: Bot gibt jetzt ein 'Thanks!' zurueck + ich hab mein privates Jabber Icon raus :)
:Version 0.2: Bot gibt jetzt ein 'Thanks!' zurueck + ich hab mein privates Jabber Icon raus :)
== Source: ==


   #!/usr/bin/env ruby
   #!/usr/bin/env ruby
   # Metafridge Jabber/Twitter Bot - Version 0.4
   version =  "Metafridge Jabber Bot - Version 0.5"
   # Consti AT Consti PUNKT de
   # Consti AT Consti PUNKT de
   require 'xmpp4r'
   require 'xmpp4r'
Zeile 30: Zeile 59:
     begin
     begin
       incoming = URI.encode(msg.body)
       incoming = URI.encode(msg.body)
       if (msg.body == '/last' || msg.body == '/last+time')
       if (msg.body == '/last' || msg.body == '/last+time') # Backwards 'compatibility'
         jabrespond(client, msg, "Error: The '/command' is deprecated. Please use '!command'.", '/commands are deprecated, use !command')  
         jabrespond(client, msg, "Error: The '/command' is deprecated. Please use '!command'.", '/commands are deprecated, use !command')
       elsif (msg.body == '!help')
       elsif (msg.body[0..0] == '!')
         response  = "!last => Last 10 metafridge messages\n"
         case msg.body
        response += "!last+time => Last 10 metafridge messages + timestamp\n"
        # !help
        response += "!sense => Metasense Status"
        when '!help'
        jabrespond(client, msg, response, 'Help?')  
          response  = "!last => Last 10 metafridge messages\n"
      elsif (msg.body == '!sense')
          response += "!last+time => Last 10 metafridge messages + timestamp\n"
         begin
          response += "!sense => Metasense Status\n"
            #http_header = nil
          response += "!events => List the next Metalab Events\n"
            http_request = nil
          response += "!about => About the Metafridge Jabber Bot\n"
            Net::HTTP.start('metalab.at', 80) {|http|
          jabrespond(client, msg, response, 'Help?')
            #http_header = http.head('/metasense/status_lock.txt')
        # !about Show some Info about the bot + fridge
            http_request = http.get('/metasense/status_lock.txt')     
        when '!about'
          response  = "This is " + version +"\n"
          response += "By: Constantin -> Consti AT Consti PUNKT de\n"
          response += "For: Metafridge (TM)\n\n"
          response += "Project: http://metalab.at/wiki/Fridge\n"
          response += "Webinterface: http://fridge.metalab.at:1337\n"
          response += "On Twitter: http://twitter.com/metafridge\n"
          jabrespond(client, msg, response, 'About?')
        # !events (Metalab Events)
        when '!events', '!event'
          begin
            http_request = nil
            Net::HTTP.start('metalab.at', 80) {|http|
              http_request = http.get('/feeds/events/')   
            }
            events = http_request.body.to_s
            events = events.gsub(/<\/title>/,"\n")
            puts events
            titles = events.scan(/<title>(.*)$/)
            response = "The next #{titles.length-1} Events in the Metalab:\n---------------------\n"
              for i in 1...titles.length
                response += "'#{titles[i]}'\n"
              end
            jabrespond(client, msg, response, 'metalab events')
          rescue
            jabrespond(client, msg, "Error: Either metalab.at is down, or the feed is broken. try again later. Don't kill me brother!", 'Error')
            puts "timeout - feeds/events"
          end
        # !sense (Metasense)
         when '!sense'
          begin
              #http_header = nil
              http_request = nil
              Net::HTTP.start('metalab.at', 80) {|http|
              #http_header = http.head('/metasense/status_lock.txt')
              http_request = http.get('/metasense/status_lock.txt')     
              }
              #puts http_header['content-type']
              sense = http_request.body.to_s
              if (sense == '1')
                jabrespond(client, msg, 'metalab is OPEN', 'Metasense') 
              elsif (sense == '0')
                jabrespond(client, msg, 'metalab is CLOSED', 'Metasense') 
              else
                jabrespond(client, msg, 'metasense if turned off', 'Metasense') 
              end
          rescue
            jabrespond(client, msg, 'Error: sorry. metalab.at seems to be down. try again later.', 'Error')
            puts "timeout metasense/status_lock.txt"
          end
        # !last and !last+time, last 10 messages on the fridge     
        when '!last', '!last+time'
          begin
          res =Net::HTTP.start('twitter.com') {|http|
              req = Net::HTTP::Get.new('/statuses/user_timeline.xml')
              req.basic_auth 'metafridge', 'metafoo'
              http.request(req)
             }
             }
             #puts http_header['content-type']
             resp = res.body.to_s
             sense = http_request.body.to_s
             lastmsgs = resp.scan(/<text>(.*)<\/text>$/)
             if (sense == '1')
             lasttime = resp.scan(/<created_at>(.*)<\/created_at>$/)
               jabrespond(client, msg, 'metalab is OPEN', 'Metasense') 
            response = "The last 10 Metafridge messages:\n---------------------\n"
            elsif (sense == '0')
            for i in 0...10
              jabrespond(client, msg, 'metalab is CLOSED', 'Metasense')  
              j = i+1
            else
               response += "#{j}: '#{lastmsgs[i]}'\n"
               jabrespond(client, msg, 'metasense if turned off', 'Metasense') 
              if (msg.body == '!last+time')
              response += "(#{lasttime[i]})\n"
              response += "---------------------\n"
               end
             end
             end
        rescue
            jabrespond(client, msg, response, 'last 10 metafridge messages')
          jabrespond(client, msg, 'Error: sorry. metalab.at seems to be down. try again later.', 'Error')  
          rescue
          puts "timeout"
            jabrespond(client, msg, 'Error: sorry. twitter seems to be down. try again later.', 'Error')  
        end  
            puts "timeout"
      elsif (msg.body == '!last' || msg.body == '!last+time')
          end
        begin
         # Else show error message 
         res =Net::HTTP.start('twitter.com') {|http|
         else
            req = Net::HTTP::Get.new('/statuses/user_timeline.xml')
           jabrespond(client, msg, 'Error: command not known - try !help', 'Error')
            req.basic_auth 'metafridge', 'metafoo'
            http.request(req)
          }
          resp = res.body.to_s
          lastmsgs = resp.scan(/<text>(.*)<\/text>$/)
          lasttime = resp.scan(/<created_at>(.*)<\/created_at>$/)
          response = "The last 10 Metafridge messages:\n---------------------\n"
          for i in 0...10
            j = i+1
            response += "#{j}: '#{lastmsgs[i]}'\n"
            if (msg.body == '!last+time')
            response += "(#{lasttime[i]})\n"
            response += "---------------------\n"
            end
          end
          jabrespond(client, msg, response, 'last 10 metafridge messages')
         rescue
           jabrespond(client, msg, 'Error: sorry. twitter seems to be down. try again later.', 'Error')  
          puts "timeout"
         end
         end
      # Check if its a direct message from twitter, if yes: split and send to fridge; if no: send directly   
       else
       else
         if (msg.from == 'twitter@twitter.com')
         if (msg.from == 'twitter@twitter.com')
Zeile 98: Zeile 168:
         end
         end
       end
       end
    # Rescue method for all kind of jabber msg crap coming in
     rescue
     rescue
       puts "Keine Korrekte Message  "
       puts "Not a correct message type"
     end
     end
     end
     end
   }
   }
   Thread.stop
   Thread.stop