Zpět na seznam článků     Číst komentáře (17)     Verze pro tisk

Jednoduchý IRC bot v pythonu

Autor: Patejl   
25.2.2007

Základní popis tvorby bota v jazyce python.


Pokaždé když jsem se začínal učit nějaký nový programovací jazyk jsem se setkával s problémem nedostatku příkladů které si zvládnu vymyslet aby jsem ve svém snažení vydržel a nevzdal se při první neúspěchu. Protože když mě nějaká práce nebaví tak se na ní velice rychle vykašlu. Stejné to bylo i s jazykem Python se kterým jsem začal koketovat někdy koncem loňského roku a který mě svoji jednoduchostí velice zaujal. Vymýšlel jsem si různé příklady na procvičování a napsal dokonce několik z pohledu studenta školy se zaměření na počítačové sítě zajímavých "prográmků". Ovšem postupem mě i tyto příklady omrzely a nastala ona chvíle které jsem se tak bál. Nechtěl jsem ale s Pythonem nadobro seknout (a stále nechci neboť ho zatím neumí zas nikterak zlášť dobře) a tak jsem stále hledal nějakou novou činnost která by mě přinutila přemýšlet.
Když jsem na #SOOM (irc.2600.net) potkal Drekinova bota FOO a zjistil jsem že je napsaný právě v pythonu řekl jsem si že bych mohl zkusit napsat něco podobného. Neumím python tak dobře abych dokázal napsat nějakého "bratříčka" foo ale bral jsem to spíše jako "domací úkol" na procvičení, zejména pak na procvičení práce se sockety kterou jsem si již sice zkusil dříve ale nikdy jsem se neponořil do podrobějšího nastudování. Toto byla vhodná příležitost.
První úkol který jsem si dal za úkol bylo prozkoumaní modulu socket a bližší seznámení s fungování irc. Znalosti se musí holt stále prohlubovat. Bylo potřeba nějak dostat bota na server a do na kanál.


1)sit = 'irc.2600.net'
2)port = 6667
3)pabot = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
4)pabot.connect ( ( sit, port ) )
5)pabot.send ( 'NICK nick_bota \r\n' )
6)pabot.send ( 'USER nick_bota nick_bota nick_bota:nick_bota \r\n' )
7)pabot.send ( 'JOIN #kanal \r\n' )

1)server na které se nachází mimo jiné kanál soom a na kterou se bude připojovat bot
2)port po kterém běží komunikace se serverem
3)vytvoření socketu
4)provede připojení ke vzálenému socketu na adrese (sit,port)
5)odešle řetězec 'NICK nick_bota \r\n' na připojený socket
6)identifikace uživatele
7)odešle řetězec 'JOIN #kanal \r\n' na připojený socket (bot vstupuje na kanál)

A bot může začít "žít" jenže jak na to?
1)while True:
2) data = pabot.recv ( 4096 )
3) print data

1)obyčejná podmnínka
2)přiřazení obdržených dat ze socketu proměné data (tyto data jsou vracena jako string) v závorce udává maximální množství dat které budou přijata
3)vytiskne hodnotu přiřazenou proměné data do konzole (toto se hodí zejména při odhalování chyb)

Teď už je to na schopnostech programátora jaké fuknce a možnosti svému botíkovi napíše. Pokud chcete aby například zdravil stačí opravdu jednoduchá podmínka.
například něco takového:
if data.find ( '*pozdrav' ) != -1:
pabot.send ( 'PRIVMSG #kanal :Ahoj\r\n' )

Nezapomeňte importovat potřebné moduly. Kreativitě se meze nekladou některé funce kterou jdou napsat jsou opravdu pěkné programátorské oříšky a jsou to skvělé výzvy zejména pro začínající programátory. Jenom bych rád podotknul abyste sve botíky zkoušeli pokud možno na svém kanálu a zbytečně tak nesnižovali přehlednost #soom.
Doufám že si vyhrajete stejně jako já :) a nenechte se odradit že něco hned nefunguje. Na google.com najdete spoustu informací které se vám při psaní budou hodit.

Některé pěkné odkazy:
http://www.devshed.com/
http://vik.sh.cvut.cz/~tnt/python/tut/tut.html



Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 0/0

1  2  3  4  5    
(známkování jako ve škole)