HOWTO: Börja skripta för XChat med Python

Här kan du dela med dig av dina bästa tips och knep.
Kategoriregler
Här ligger de utförliga instruktionerna vi kan tänkas behöva. Leta här om du tex behöver installera nåt program eller sätta upp någon funktion. Starta inte trådar utan att ha ett svar.
Användarvisningsbild
DrMegahertz
Inlägg: 296
Blev medlem: 06 maj 2006, 14:37
OS: Ubuntu
Utgåva: 14.04 Trusty Tahr LTS
Ort: Södra Dalarna

HOWTO: Börja skripta för XChat med Python

Inlägg av DrMegahertz »

Jag använder ofta Rhythmbox för att spela och hantera all min musik, men något som jag länge saknat är ett skript till XChat som gör att jag kan visa vilken låt jag spelar för tillfället. Efter en stunds fruktlöst sökande så tänkte jag att lika gärna kunde göra det själv, och lära mig skripta för XChat på samma gång.

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! =)"
Ovanstående kodsnutt demonstrerar ett mycket minimalistiskt skript för XChat, den sätter tre obligatoriska variabler som XChat använder sig av under laddning av skriptet och skriver sedan ut "Hejsan Världen! =)" i XChat's fönster.

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! =)" ut i XChats fönster och du har nu skrivit ditt första XChat-skript! :)

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! =)")
Spara och ladda koden i XChat och du kommer se hur "Hello World! =)" skrivs ut i kanalen du befann dig i under laddningen av skriptet.

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)
Spara, ladda in i XChat, smyg in i en väl utvald kanal, välj ett intet ont anande offer och skriv '/slap offrets_nick', luta dig sedan tillbaka och njut av din seger. Äntligen börjar vi komma någon vart ;)

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."
Hoppas det väckte intresse hos någon iallafall :) Om något är oklart eller om du tycker att något saknas i guiden så säg bara till så ska jag försöka reda upp det så gott jag kan :D

Länkar:
XChat-Python Dokumentation
Nybörjarguide i Python
BildAre you shpongled? Bild
Användarvisningsbild
Louie
Inlägg: 2361
Blev medlem: 15 nov 2006, 10:15
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Ort: Göteborg
Kontakt:

SV: HOWTO: Börja skripta för XChat med Python

Inlägg av Louie »

Underbart! Jag har väntat men nu jeklar ska jag sätta igång ;D;D
Ett väl utfört arbete ger en inre tillfredsställelse och är den grund var på samhället vilar.
Linuxuser - Fri webhosting åt folket!
IRC: Louie` @ #kurbitz freenode - Jabber: PM för jabber
Okänd
Inlägg: 30172
Blev medlem: 03 mar 2008, 01:30
OS: Ubuntu

SV: HOWTO: Börja skripta för XChat med Python

Inlägg av Okänd »

Ojojoj, nu blev jag nyfiken jag med.........
Användarvisningsbild
matti4s
Inlägg: 16
Blev medlem: 14 nov 2006, 11:31
Ort: @home
Kontakt:

SV: HOWTO: Börja skripta för XChat med Python

Inlägg av matti4s »

Varför får jag inte denna kodsnutt att fungera?

Kod: Markera allt

__module_name__ = "Charset"
__module_version__ = "1.0"
__module_description__ = "Change charset to iso-8859-1"

import xchat 

xchat.command("charset iso-8859-1")
Som några kanske vet så kan man ändra charset med att skriva: "/charset iso-8859-1" och jag tänkte göra ett simpelt plugin så man slipper detta  ;)
Det är ganska tråkigt att inte ha någon signatur. Därför kan det ibland vara lite roligare att fylla ut det här tomrummet efter posten med lite text. Man kan skriva lite om sig själv: Hej, jag heter Mattias och har inte använt ubuntu så länge, men jag är inte dålig för det! Jag behärskar: XHTML,CSS,PHP,Javascript,C++ och det är dags för python.
Skriv svar

Återgå till "Guider"