erste Schritte in Ruby

Posted by Hendrik Sollich on April 1, 2011

Da ich in den letzten Wochen sehr viel Zeit in Zügen verbracht habe, hatte ich sehr viel Gelegenheit, mir sehr viele ausgaben von Pentacast und Chaos Radio Express anzuhören.

Besonders Pentacast Nº1 über jabber war sehr aufschlussreich, zumal ich mich schon seit längerem für dieses Protokoll sehr interessiere. Ursprünglich wollte ich etwas in python machen, doch nachdem ich mal einen Nachmittag lang in xmpppy, pyxmpp und twisted reingeschaut hatte — und keines davon wirklich geeignet schien entschied ich mich für xmpp4r.

So lernte ich also mal eben etwas Ruby. Das Projekt was aus meinen ersten Versuchen mit Ruby entstand war ein kleiner Jabberbot namens xxrb (extensible XMPP ruby bot). Teile davon entstanden im Zug :D

Der bot selbst kann in seiner Standardausführung nicht viel, er bietet ein Commandline interface und kann sich mit einem xmpp Server verbinden. Was macht ihn nun so extensible?

# Original greeting function
xmpp_hello = RbCmd.new(:hello, .xmpp)
def xmpp_hello.action
	if @args
		result = "I'm not actually " + @args + " but his evil twin"
	else
		result = "hello yourself"
	end
end
def xmpp_hello.help
	result = '"hello" is only the first of many cool features'
end

bot = Xxrb.new
bot.add_cmd(xmpp_hello)

Nachdem man den Bot initialisiert hat kann man ihm neue Commands beibringen indem man ihm RbCmd Objekte übergibt. Diese enthalten zwei Methoden: action und help. Action wird ausgeführt wenn man wie hier im Beispiel “hello” eingibt und Help wenn man “help hello” eingibt. Das zweite Symbol im Konstruktor bezeichnet ob der Befehl über Comandline oder Xmpp erwartet wird. Innerhalb der action stehen zudem @args, @jid des Benutzers (in cli des Bots selbst) und @bot zur Verfügung.

Bislang kann mein Bot nur Haltestelleninfos zu Dresdner Straßenbahnen und Bussen zurück geben. Eine Testversion läuft auf dvb(ät)hoodie.de .

Da ich bereits etwas Erfahrung mit pyGTK sammeln konnte und die RubyGTK Schnittstelle sich nicht viel anders verhält, habe ich nun mit den Arbeiten an einem grafischen Tool begonnen. Da ich mit dem Funktionsumfang von Pidgin in Puncto Jabber noch nie zu Frieden war und bei Psi leider auch nicht viel passiert, habe ich mich daher entschlossen an einem eigenen Jabberclient zu arbeiten. Er wird wohl nach irgendwas zwischen Pidgin und Psi aussehen und in Ruby geschrieben sein. Da man mit Ruby ja auch in einem gewissem Rahmen Funktional programmieren kann dachte ich an ein Scripting interface. Benutzer können bestimmten events (zB ein Kontakt kommt online) eigene Aktionen in Form von Ruby hinzufügen und ausführen. Interessant ist auch Konversationen die man mit zwei Personen Parallel führt automatisch zu einem MUC zusammen zu fassen.

Jabber ist ja auch das Standard ChatProtokoll von facebook, daher würde ich auch einen bestimmten “Stalkermode” einbauen, mit dem man immer sofort die Statusupdates einer bestimmter Person “like”t oder sich für seine Exfreunding unsichtbar macht und deren gespräche mitliest.

Wie ihr seht steckt noch viel Potential in der Materie, ich habe also viel zu tun. Wenn ich mit etwas ranhalte sollte ich allerdings schon in etwa einer Woche den ersten Milestone vorstellen können, also seid gespannt.