[Python] Programirajte bota za IRC

Danas ću vas naučiti kako programirati a Bot para irc. Prije svega, za one koji ne znaju, bot je program koji se povezuje na IRC kanal i komunicira s njim, što nam omogućava, na primjer, moderiranje kanala bez da smo povezani i na taj način izbjeći neželjenu poštu ili prepoznati niz naloga i izvršiti odgovarajući kod.
Iako već postoje botovi, iskreno, jedan sam od onih koji vole stvarati vlastite programe za učenje i veliko zadovoljstvo koje nam pruža nakon što vidimo da to funkcionira ^^

Uz to, prijeđimo na tutorial.

Za programiranje bota trebat će nam urednik običnog teksta cualquiera (nano, gedit, medit, itd.) y el python interpreter (Bit će potrebno 2.6 ili 2.7, ne radi s python 3.x).

Prvo uvozimo potrebni moduli, u ovom slučaju trebat će nam samo dva:

[kod] #! / usr / bin / env python
# - * - kodiranje: utf-8 - * -

utičnica za uvoz
string za uvoz
[/ kod]

Sada nastavljamo sa postaviti bot:

[code] HOST=»irc.desdelinux.net»
LUKA = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Početna»
readbuffer = »»
[/ kod]

Objasnit ću svaku varijablu:

  • HOST: URL servera na koji ćemo se povezati
  • LUKA: Port poslužitelja. Po defaultu je 6667.
  • NIK, IDENTITET I PRAVO IME: Oni odgovaraju nadimku bota, njegovoj identifikaciji i pravom imenu.
  • CHAN: Kanal u koji će bot ući
  • međuspremnik za čitanje: U ovoj varijabli podaci koji ih šalje poslužitelj bit će spremljeni.

Jednom kada je naš bot konfiguriran, nastavljamo vezu

[kod] s = socket.socket ()
s.connect ((HOST, LUKA))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("KORISNIK% s% s bla:% s \ r \ n"% (IDENT, HOST, PRAVO IME))
s.send ("PRIDRUŽITE SE:% s \ r \ n"% CHAN)
[/ kod]

Prvi redak nema puno misterije, drugi stvara veza sa serverom a posljednja tri šalju podatke bota na server kako bi nastavili s prijavom.

Jednom kad se povežemo, kreiraćemo a Beskonačna petlja u koji ćemo ići primanje i slanje podataka sa / na server:

[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)
[/ kod]

Od svih gore napisanih redova, komentirat ću samo važne.
con linija = line.split (CHAN + ':') ono što radimo je podijeliti ono što nam server š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 ^^

Prva 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 linije oni 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 serveru da je i dalje povezan.

Ovim već imamo bazu bota. Sada ću nastaviti objašnjavati kako natjerati bota da reaguje kako želimo na određene naredbe, bilo od samog IRC-a ili od korisnika.

Odgovor na IRC naredbe:

PING i PRIVMSG su primjeri 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:

[kod] ako je linija [0]. pronađ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))
[/ kod]

Prvo provjeravamo šalje li server naredbu JOIN što ukazuje da se neko povezao sa serverom. Zatim izvadimo nadimak, provjeravamo da nadimak nije IRC URL (ako ne čim pokrenemo bota, pozdravit će url) i na kraju šaljemo pozdravnu poruku.

Bot naredbe:

Sada kako mogu napraviti svog bota odgovoriti na moje vlastite naredbe? Pogledajmo bolje primjer:

[kod] ako je linija [1] == '$ verzija':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Sin Link \ n»% CHAN)
[/ kod]

U ovom primjeru ako neko piše $ verzija bot će prikazati poruku koja navodi njegovo ime, verziju i autora. Kompletni kod primjera je sljedeći:

[kod] utičnica za uvoz
string za uvoz

HOST = »localhost»
LUKA = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Početna»
readbuffer = »»
s = socket.socket ()
s.connect ((HOST, LUKA))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("KORISNIK% s% s bla:% s \ r \ n"% (IDENT, HOST, PRAVO IME))
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:
if line [1] == '$ verzija':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Sin Link \ n»% CHAN)
[/ kod]

Nadam se da vam se svidio ovaj vodič, i naravno, ostavljam vam vezu do koda mog bota kako biste mogli vidjeti njegov kôd u potpunosti i kako biste mogli bolje vidjeti kako to funkcionira (iako sam uklonio neke naredbe za ličnu upotrebu).

CalicoBot