Danas ću vas naučiti kako programirati a bot za IRC. Prije svega, za one koji ne znaju, bot je program koji se povezuje s IRC kanalom i komunicira s njim, što nam omogućuje, na primjer, moderiranje kanala bez da smo povezani i na taj način izbjeći neželjenu poštu ili da prepozna niz naloga i izvrši odgovarajući kod.
Iako već postoje botovi, iskreno sam jedan od onih koji vole stvarati vlastite programe za učenje i veliko zadovoljstvo koje nam pruža nakon što vidi da to radi ^^
Uz to, prijeđimo na tutorial.
Za programiranje bota trebat će nam urednik običnog teksta cualquiera (nano, gedit, medit, itd.) i tumač pythona (Bit će potrebno 2.6 ili 2.7, ne radi s pythonom 3.x).
Prvo uvozimo potrebni moduli, u ovom slučaju trebat će nam samo dva:
[kod] #! / usr / bin / env python# - * - kodiranje: utf-8 - * -
uvozna utičnica
uvozni niz
[/ code]
Sada nastavljamo do postaviti bot:
[kod] HOST=»irc.desdelinux.neto"LUKA = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Početna»
readbuffer = »»
[/ code]
Objasnit ću svaku varijablu:
- DOMAĆIN: URL poslužitelja na koji ćemo se povezati
- LUKA: Port poslužitelja. Po defaultu je 6667.
- NIK, IDENTITET I PRAVO IME: Odgovaraju nadimku bota, njegovoj identifikaciji i pravom imenu.
- CHAN: Kanal u koji će bot ući
- čitač: U ovoj će se varijabli podaci koje šalje poslužitelj spremiti.
Jednom kada je naš bot konfiguriran, nastavljamo s vezu
[kod] s = socket.socket ()s.povezati ((HOST, LUKA))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("KORISNIK% s% s bla:% s \ r \ n"% (IDENT, HOST, REALNAME))
s.send ("PRIDRUŽITE SE:% s \ r \ n"% CHAN)
[/ code]
Prvi redak nema puno tajne, drugi stvara veza s poslužiteljem a posljednja tri šalju podatke bota na poslužitelj kako bi nastavili s prijavom.
Jednom kad se povežemo, stvorit ćemo Beskonačna petlja u koju ćemo ići primanje i slanje podataka s / na poslužitelj:
[kod] dok 1:readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
za liniju u temp:
linija = string.rstrip (linija)
linija = line.split (CHAN + ':')
ako je linija [0] .nađi ("PING")! = -1:
pingid = linija [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
[/ code]
Od svih gore napisanih redaka, komentirat ću samo one važne.
s linija = linija.split (CHAN + ':') ono što radimo je podijeliti ono što nam poslužitelj šalje kada uzmimo nešto s kanala.
Na primjer, sljedeći redak označava da je netko napisao nešto na kanalu:
:son_link!sonlink@127.0.0.1 PRIVMSG #Home :Hola ^^
Prvi je korisnikov nadimak i podaci o vezi (odvojeni znakom!), Naredba (u ovom slučaju to znači da je napisao), kanal i na kraju, nakon dvotačke, poruka poslana. Neću objašnjavati još puno naredbi jer to ne spada u ovaj vodič.
Ostale su važne crte one su nakon if. Poslužitelj svako toliko šalje naredbu PING da provjeri je li korisnik još uvijek povezan. U tom slučaju, bot šalje naredbu PONG s ID-om koji je PING poslao da naznači poslužitelju da je još uvijek povezan.
S ovim već imamo bazu bota. Sada ću nastaviti objašnjavati kako natjerati bota da odgovara prema onome što želimo na određene naredbe, bilo da su od samog IRC-a ili od korisnika.
Odgovor na IRC naredbe:
PING i PRIVMSG primjeri su IRC naredbi. Postoji mnogo naredbi, ali kao što sam već rekao, to je nešto o čemu neću ulaziti u detalje.
Na primjer, možemo natjerati bota da pozdravi korisnike koji se povezuju:
name = line [0] .split ('!') [0] .split (':') [1] if name! = NICK i name.find (HOST) == -1:
s.send ("PRIVMSG% s: Dobrodošli @% s ^^ \ n"% (CHAN, ime))
[/ code]
Prvo provjeravamo šalje li poslužitelj naredbu PRIDRUŽITE što znači da se netko povezao s poslužiteljem. Zatim izvadimo nadimak, provjeravamo da nadimak nije IRC URL (ako ne čim pokrenemo bota, pozdravit će url) i na kraju šaljemo pozdravnu poruku.
Naredbe bota:
Sad kako mogu napraviti svog bota odgovoriti na moje vlastite naredbe? Pogledajmo bolje primjer:
[code] if line [1] == '$ version':s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Sin Link \ n»% CHAN)
[/ code]
U ovom primjeru ako netko piše $ verzija bot će prikazati poruku koja navodi njegovo ime, verziju i autora. Kompletni kod primjera je sljedeći:
[kod] utičnica za uvozuvozni niz
HOST = »localhost»
LUKA = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Početna»
readbuffer = »»
s = socket.socket ()
s.povezati ((HOST, LUKA))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("KORISNIK% s% s bla:% s \ r \ n"% (IDENT, HOST, REALNAME))
s.send ("PRIDRUŽITE SE:% s \ r \ n"% CHAN)
dok 1:
readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
za liniju u temp:
linija za ispis
linija = string.rstrip (linija)
linija = line.split (CHAN + ':')
ako je linija [0] .nađi ("PING")! = -1:
pingid = linija [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
ako je linija [0] .nađi ('PRIDRUŽI SE')! = -1:
name = line [0] .split ('!') [0] .split (':') [1] if name! = NICK i name.find (HOST) == -1:
s.send ("PRIVMSG% s: Dobrodošli @% s ^^ \ n"% (CHAN, ime))
ako je len (linija) <1:
ako je linija [1] == '$ version':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Sin Link \ n»% CHAN)
[/ code]
Nadam se da vam se svidio ovaj tutorial, i naravno, ostavljam vam vezu do koda mog bota kako biste mogli vidjeti njegov kôd u cijelosti i kako biste mogli bolje vidjeti kako to radi (iako sam uklonio neke naredbe za osobnu upotrebu).
Heh, nisam mogao propustiti Bota sranja kojim se voziš na IRC-u 😛 Vrlo zanimljiv članak.
Vrlo jednostavno i jasno objašnjenje.
Što ako, python kodu nedostaju sva udubljenja.
To je već riješeno ^^
Izvrstan članak i kako se lako povezati s IRC-om za programiranje bota:) ...
Podsjeća me na ona vremena kad smo se osjećali kao programeri koji u chatovima na MSN-u ili MSNGroupama pišu skripte za mIRC.
Zanimljivo čuvam ga 😀
izvrsna!
Vrlo korisno, hvala Son_Link!
Pozdrav!
Živjeli…
slijedeći vaše linije i testirajući jedino što djeluje je
uvozna utičnica
uvozni niz
HOST = »localhost»
LUKA = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Početna»
readbuffer = »»
s = socket.socket ()
s.povezati ((HOST, LUKA))
s.send ("NICK% srn"% NICK)
s.send ("KORISNIK% s% s bla:% srn"% (IDENT, HOST, PRAVO IME))
s.send ("PRIDRUŽI SE:% srn"% CHAN)
promjena kanala i nadimak sada dolje baca mi sintaksu pogreške
Pitao sam druge poznanike i oni mi kažu da to ne izgleda kao python
Ne znam u čemu griješim ili zašto sve kopiram i zalijepim u python i dam da uđe i poveže se s kanalom, ali nakon 250 sekundi kanal ga uklanja jer nije bilo odgovora od pong-a ...
Koju verziju Pythona koristite?
Radi samo s pythonom 2.6 i 2.7, a ne s 3.x
Izmijenit ću unos kako bi bio jasniji.
Kompletni kod mi ne radi, zadnji odlomak je ono što ne uspije i ne mogu pronaći pogrešku. Ako izbrišem taj dio, on se povezuje i savršeno funkcionira. Testirano s Pythonom 2.7.3 na sustavu Windows 7.
PS: U mom slučaju povezujem se s poslužiteljem lozinkom i dodajem ove retke:
PASS = »Passdelbot»
s.send ("PASS% s \ r \ n"% PASS)
Bok, Son Link, hvala ti puno na članku, vrlo je zanimljiv, jednostavno ne mogu odgovoriti na poslane naredbe. Program ne ulazi u posljednje ako i ne mogu shvatiti zašto: "if len (line)> 1:"
Čekam tvoj odgovor.
hvala
Upravo sam dodao vezu na puni kôd bota jer pretvara neke simbole, a kôd prikazuje njegov html kôd.
U svakom slučaju pokušat ću pokušati sve ispravno pokazati