Zum Inhalt springen

Metafridge Jabber Support: Unterschied zwischen den Versionen

Consti (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Consti (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Zeile 4: Zeile 4:
Benoetigt 'xmpp4r' gem;
Benoetigt 'xmpp4r' gem;


: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 :)


#!/usr/bin/env ruby
  #!/usr/bin/env ruby
# Metafridge Jabber/Twitter Bot - Version 0.3
  # Metafridge Jabber/Twitter Bot - Version 0.4
# Consti AT Consti PUNKT de
  # Consti AT Consti PUNKT de
require 'xmpp4r'
  require 'xmpp4r'
require 'net/http'
  require 'net/http'
require 'cgi'
  require 'cgi'
require 'iconv'
  require 'iconv'
require 'uri'
  require 'uri'
require 'open-uri'
  require 'open-uri'
  def jabrespond client, msg_in, msg_out, subj
client = Jabber::Client.new(Jabber::JID.new('metafridge@jabber.metalab.at/metalab'))
    m = Jabber::Message.new(msg_in.from, msg_out).set_type(:normal).set_id('1').set_subject(subj)
client.connect
    client.send m
client.auth('PASSWORT')
  end
  client = Jabber::Client.new(Jabber::JID.new('metafridge@jabber.metalab.at/metalab'))
client.send(Jabber::Presence.new.set_show(:chat).set_status('Feed me.'))
  client.connect
  client.auth('PASSWORT')
client.add_message_callback { |msg|
  client.send(Jabber::Presence.new.set_show(:chat).set_status('Send: !help for help :)'))
  if msg.type == :chat
  client.add_message_callback { |msg|
    puts "\n------INCOMING-------\nFrom: #{msg.from}\nMessage:#{msg.body}\n--------------------\n"
    if msg.type == :chat
    begin
    puts "\n------INCOMING-------\nFrom: #{msg.from}\nMessage:#{msg.body}\n--------------------\n"
      incoming = URI.encode(msg.body)
    begin
      if (msg.body == '/last' || msg.body == '/last+time')
      incoming = URI.encode(msg.body)
        begin
      if (msg.body == '/last' || msg.body == '/last+time')
        Net::HTTP.start('twitter.com') {|http|
        jabrespond(client, msg, "Error: The '/command' is deprecated. Please use '!command'.", '/commands are deprecated, use !command')
          req = Net::HTTP::Get.new('/statuses/user_timeline.xml')
      elsif (msg.body == '!help')
          req.basic_auth 'metafridge', 'metafoo'
        response  = "!last => Last 10 metafridge messages\n"
          response = http.request(req)
        response += "!last+time => Last 10 metafridge messages + timestamp\n"
          resp = response.body.to_s
        response += "!sense => Metasense Status"
          lastmsgs = resp.scan(/<text>(.*)<\/text>$/)
        jabrespond(client, msg, response, 'Help?')
          lasttime = resp.scan(/<created_at>(.*)<\/created_at>$/)
      elsif (msg.body == '!sense')
          jabresponse = "The last 10 Metafridge messages:\n---------------------\n"
        begin
          for i in 0...10
            #http_header = nil
            j = i+1
            http_request = nil
            jabresponse += "#{j}: '#{lastmsgs[i]}'\n"
            Net::HTTP.start('metalab.at', 80) {|http|
            if (msg.body == '/last+time')
            #http_header = http.head('/metasense/status_lock.txt')
              jabresponse += "(#{lasttime[i]})\n"
            http_request = http.get('/metasense/status_lock.txt')   
              jabresponse += "---------------------\n"
            }
            end
            #puts http_header['content-type']
          end
            sense = http_request.body.to_s
          m = Jabber::Message.new(msg.from, jabresponse).set_type(:normal).set_id('1').set_subject('last 10 metafridge messages')
            if (sense == '1')
           client.send m
              jabrespond(client, msg, 'metalab is OPEN', 'Metasense') 
        }
            elsif (sense == '0')
        rescue
              jabrespond(client, msg, 'metalab is CLOSED', 'Metasense') 
          puts "timeout"
            else
        end
              jabrespond(client, msg, 'metasense if turned off', 'Metasense') 
      else
            end
        if (msg.from == 'twitter@twitter.com')
        rescue
          @spl = incoming.split(/:%20/)     
          jabrespond(client, msg, 'Error: sorry. metalab.at seems to be down. try again later.', 'Error')
          if (@spl.length == 2)
          puts "timeout"
            puts "\n------SENDING TO FRIDGE-------\nUsername: #{@spl[0]}\nMessage:#{@spl[1]}\n--------------------\n"
        end   
            open("http://fridge.metalab.at:1337/cgi-bin/post_text.cgi?lauftext=#{@spl[1]}&playfunction=1").read
      elsif (msg.body == '!last' || msg.body == '!last+time')
            puts "\n-----SENT-----\n"
        begin
          end   
        res =Net::HTTP.start('twitter.com') {|http|
        else
            req = Net::HTTP::Get.new('/statuses/user_timeline.xml')
          puts "\n------SENDING TO FRIDGE-------\nMessage:#{incoming}\n--------------------\n"   
            req.basic_auth 'metafridge', 'metafoo'
          open("http://fridge.metalab.at:1337/cgi-bin/post_text.cgi?lauftext=#{incoming}&playfunction=1").read
            http.request(req)  
          puts "\n-----SENT-----\n"
          }
          puts "\n------SENDING RESPONSE-------\nTo:#{msg.from}\nMessage: Thanks!\n--------------------\n"
          resp = res.body.to_s
          m = Jabber::Message.new(msg.from, 'Thanks!').set_type(:normal).set_id('1').set_subject('Thanks!')
          lastmsgs = resp.scan(/<text>(.*)<\/text>$/)
          client.send m
          lasttime = resp.scan(/<created_at>(.*)<\/created_at>$/)
        end
          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
      else
        if (msg.from == 'twitter@twitter.com')
          @spl = incoming.split(/:%20/)     
            if (@spl.length == 2)
            puts "\n------SENDING TO FRIDGE-------\nUsername: #{@spl[0]}\nMessage:#{@spl[1]}\n--------------------\n"
            open("http://fridge.metalab.at:1337/cgi-bin/post_text.cgi?lauftext=#{@spl[1]}&playfunction=1").read
            puts "\n-----SENT-----\n"
          end   
        else
          puts "\n------SENDING TO FRIDGE-------\nMessage:#{incoming}\n--------------------\n"   
          open("http://fridge.metalab.at:1337/cgi-bin/post_text.cgi?lauftext=#{incoming}&playfunction=1").read
          puts "\n-----SENT-----\n"
          puts "\n------SENDING RESPONSE-------\nTo:#{msg.from}\nMessage: Thanks!\n--------------------\n"
          jabrespond(client, msg, 'Thanks!', 'Thanks!')  
        end
      end
    rescue
      puts "Keine Korrekte Message  "
     end
     end
    rescue
      puts "Keine Korrekte Message  "
     end
     end
  end
  }
}
  Thread.stop
Thread.stop