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 | ||
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 == '! | elsif (msg.body[0..0] == '!') | ||
response = "!last => Last 10 metafridge messages\n" | case msg.body | ||
# !help | |||
when '!help' | |||
response = "!last => Last 10 metafridge messages\n" | |||
response += "!last+time => Last 10 metafridge messages + timestamp\n" | |||
begin | response += "!sense => Metasense Status\n" | ||
response += "!events => List the next Metalab Events\n" | |||
response += "!about => About the Metafridge Jabber Bot\n" | |||
jabrespond(client, msg, response, 'Help?') | |||
# !about Show some Info about the bot + fridge | |||
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) | |||
} | } | ||
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 | 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 show error message | |||
else | |||
jabrespond(client, msg, 'Error: command not known - try !help', 'Error') | |||
jabrespond(client, msg, 'Error: | |||
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 " | puts "Not a correct message type" | ||
end | end | ||
end | end | ||
} | } | ||
Thread.stop | Thread.stop |