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:
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 uvozstring 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).
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 sve uvlake.
To je već riješeno ^^
Odličan članak i kako se lako povezati s IRC-om za programiranje bota:) ...
Podsjeća me na ona vremena kada smo se osjećali kao programeri koji pišu skripte za mIRC u MSN ili MSNGroups chatovima
Zanimljivo čuvam je 😀
odlično!
Vrlo korisno, hvala Son_Link!
Pozdrav!
Živjeli…
prateći vaše linije i testirajući jedino što funkcionira je
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% srn"% NICK)
s.send ("KORISNIK% s% s bla:% srn"% (IDENT, HOST, PRAVO IME))
s.send ("PRIDRUŽITE SE:% srn"% CHAN)
promjena kanala i nadimak sada dolje baca mi sintaksu greške
Pitao sam druge poznanike i kažu mi da to ne liči na 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 sa python 2.6 i 2.7, a ne sa 3.x
Izmijenit ću unos kako bi bio jasniji.
Kompletni kod mi ne funkcionira, zadnji paragraf je ono što ne uspije i ne mogu pronaći grešku. Ako izbrišem taj dio, on se povezuje i savršeno funkcionira. Testirano sa Python 2.7.3 na Windows 7.
PS: U mom slučaju povežem se na server lozinkom i dodam ove redove:
PASS = »Passdelbot»
s.send ("PASS% s \ r \ n"% PASS)
Bok, Son Link, hvala vam puno na članku, vrlo je zanimljiv, jednostavno ne mogu odgovoriti na poslane naredbe. Program ne ulazi u posljednje if i ne mogu shvatiti zašto: "if len (line)> 1:"
Čekam vaš 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 pokazati ispravno