Den här guiden förutsätter att du har grundläggande kunskaper i skriptspråket Python, samt att du har XChat och Rhythmbox installerat.
Sedan XChat 2.0 har det funnits inbyggt stöd för att utvidga XChat med egna funktioner i Python. Detta är en stor fördel för den genomsnittlige användaren, just för att han själv kan skriva små tillägg efter sina egna behov utan att behöva sätta sig in i hela XChat's källkod.
Python är också mycket enklare att läsa och förstå än programspråket C som XChat är skrivet i, och på så sätt kan en mycket bredare grupp människor bidra med skript.
Låt oss nu skriva ditt första XChat-skript;
Kod: Markera allt
__module_name__ = "Hello World"
__module_version__ = "1.0"
__module_description__ = "Första scriptet i Python!"
print "Hejsan Världen! =)"

Prova att spara ner koden i en fil som du döper till "helloworld.py" och sedan öppnar du XChat, klickar i menyraden på "Xchat" och sedan "Läs in insticksmodul eller skript...", leta fram filen "helloworld.py" och klicka på "Ok".
Nu skrivs "Hejsan Världen!


Tråkigt nog, så fyller detta script knappast någon funktion och vi kan inte skicka kommandon till det från XChat. För att kunna kommunicera med XChat's funktioner måste vi använda oss av XChat's python-modul "xchat". Där finns en rad funktioner som låter oss skicka och ta emot all möjlig information från och till XChat. Vi testar med ett nytt stycke kod;
Kod: Markera allt
__module_name__ = "XchatCommandExample"
__module_version__ = "1.0"
__module_description__ = "Skriv ut ett meddelande i den nuvarande kanalen"
# Ladda in xchat-modulen så vi kan använda XChat's funktioner
import xchat
# Skriv ut ett meddelande i den nuvarande kanalen som användaren befinner sig i
xchat.command("say Hello World! =)")

Okej, nu kan vi kommunicera med XChat från vår skript. Men hur gör vi för att komma åt vårt script från XChat? Som i de flesta plugin-system så måste vi skapa funktioner som vi sedan binder till önskvärda händelser hos värdprogrammet, i det här fallet XChat. En av de enklaste funktionerna att använda är xchat.hook_command(), som låter oss binda kommandon som användaren utför i xchats inmatningsfält till de funktioner som vi anger.
Vi tar ett exempel;
Kod: Markera allt
__module_name__ = "HookCommandExample"
__module_version__ = "1.0"
__module_description__ = "Exempel på hur man binder sina funktioner till kommandon i XChat"
# Importera xchat's funktioner
import xchat
# Deklarera vår funktion som vi vill binda till ett XChat-kommando
def cbSlap(word, word_eol, userdata):
xchat.command("me slaps %s around a bit with a large trout" % word[1])
return xchat.EAT_ALL
# Bind kommandot '/slap' till vår funktion cbSlap
xchat.hook_command("slap", cbSlap)

Variabeln 'word' innehåller en lista med dom parametrar vi gav vårt kommando. Till exempel, om du skulle utföra följande kommando: "/kommando hej kanalen"
word[0] skulle vara "/kommando"
word[1] skulle vara "hej"
word[2] skulle vara "kanalen"
Vad word_eol och userdata innehåller kan du se här!
xchat.EAT_ALL, betyder att vi vill att XChat ska "svälja" funktionen med hull och hår, testa att byta ut xchat.EAT_ALL till xchat.EAT_NONE och du kommer få "Okänt kommando. Prova /help" i statusfönstret(läs mer om olika returkonstanter här).
Nu vet vi faktiskt allt vi behöver för att kunna skriva små funktionella skript. För att lära dig lite om de andra funktionerna XChat har att erbjuda så ska du ta en titt på den här sidan. Och för att avsluta den här guiden så bifogar jag det första skriptet som jag skrev för Xchat, nämligen mitt Rhytmbox-skript;
Kod: Markera allt
__module_name__ = "X-Chat Rhythmbox Script"
__module_version__ = "1.0"
__module_description__ = "Prints Rhythmbox info"
__module_author__ = "Marcus Fredrikson <drmegahertz@gmail.com>"
import xchat
import commands
def cb_rbx_help(word, word_eol, userdata):
print "----------------------------------------------------------"
print "/rbx Shows the current song being played in Rhythmbox"
print "/rbx_help Prints a list of available commands"
print "/rbx_next Jumps to the next track in the Rhythmbox playlist"
print "/rbx_play Play/Pause Rhytmbox"
print "/rbx_prev Jumps to the previous track in the Rhythmbox playlist"
return xchat.EAT_ALL
# Print info about the current track
def cb_rbx_info(word, word_eol, userdata):
artist = commands.getoutput("rhythmbox-client --print-playing-format %ta")
album = commands.getoutput("rhythmbox-client --print-playing-format %at")
track = commands.getoutput("rhythmbox-client --print-playing-format %tt")
elapsed_time = commands.getoutput("rhythmbox-client --print-playing-format %te")
total_time = commands.getoutput("rhythmbox-client --print-playing-format %td")
xchat.command("say \002Mp3:\002 %s - %s - %s [%s/%s]" % (artist, album, track, elapsed_time, total_time))
return xchat.EAT_ALL
def cb_rbx_next(word, word_eol, userdata):
commands.getoutput("rhythmbox-client --next")
return xchat.EAT_ALL
def cb_rbx_prev(word, word_eol, userdata):
commands.getoutput("rhythmbox-client --previous")
return xchat.EAT_ALL
def cb_rbx_pause(word, word_eol, userdata):
commands.getoutput("rhythmbox-client --play-pause")
return xchat.EAT_ALL
# Hook callbacks
xchat.hook_command("rbx", cb_rbx_info, help="Prints Rhythmbox Info")
xchat.hook_command("rbx_next", cb_rbx_next, help="Jumps to the next song")
xchat.hook_command("rbx_prev", cb_rbx_prev, help="Jumps to the previous song")
xchat.hook_command("rbx_play", cb_rbx_pause, help="Play/Pause Rhythmbox playback")
xchat.hook_command("rbx_help", cb_rbx_help, help="Show list of commands")
# Print nag
print "%s %s by %s Successfully loaded!" % (__module_name__, __module_version__, __module_author__)
print "Type /rbx_help for a list of available commands."


Länkar:
XChat-Python Dokumentation
Nybörjarguide i Python