Danes vas bom naučil, kako programirati a bot za IRC. Najprej je za tiste, ki ne vedo, bot program, ki se poveže s kanalom IRC in komunicira z njim, tako da lahko na primer moderiramo kanal brez da smo povezani in se tako izognili neželeni pošti ali da prepozna vrsto naročil in izvrši ustrezno kodo.
Čeprav so že pripravljeni roboti, sem iskreno eden tistih, ki radi ustvarjajo lastne programe za učenje in veliko zadovoljstvo, ki nam ga prinese, ko vidi, da deluje ^^
S tem pojdimo na vadnico.
Za programiranje bota potrebujemo urejevalnik navadnega besedila cualquiera (nano, gedit, medit itd.) in python interpreter (Potreben bo 2.6 ali 2.7, ne deluje s python 3.x).
Najprej uvozimo potrebni moduli, v tem primeru bomo potrebovali le dva:
[koda] #! / usr / bin / env python# - * - kodiranje: utf-8 - * -
uvozna vtičnica
uvozni niz
[/ koda]
Zdaj nadaljujemo z postavi bot:
[koda] HOST=»irc.desdelinux.mreža"LUKA = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Domov»
readbuffer = »»
[/ koda]
Razložil bom vsako spremenljivko:
- HOST: URL strežnika, na katerega se bomo povezali
- PRISTANIŠČE: Strežniška vrata. Privzeto je 6667.
- NICK, IDENT in REALNAME: Ustrezajo vzdevku bota, njegovi identifikaciji in pravemu imenu.
- CHAN: Kanal, v katerega bo vstopil bot
- bralnik: V tej spremenljivki bodo shranjeni podatki, ki jih pošlje strežnik.
Ko je naš bot konfiguriran, nadaljujemo z povezavo
[koda] s = socket.socket ()s.connect ((HOST, PORT))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("UPORABNIK% s% s bla:% s \ r \ n"% (IDENT, HOST, REALNAME))
s.send ("PRIDRUŽI SE:% s \ r \ n"% CHAN)
[/ koda]
Prva vrstica nima veliko skrivnosti, druga pa ustvari povezava s strežnikom in zadnji trije pošljejo podatke bota strežniku, da nadaljuje s prijavo.
Ko se povežemo, bomo ustvarili a Neskončna zanka v katero bomo šli sprejemanje in pošiljanje podatkov s / na strežnik:
[koda] medtem ko 1:readbuffer = readbuffer + s.recv (1024)
temp = string.split (bralnik, "\ n")
readbuffer = temp.pop ()
za vrstico v temp:
vrstica = niz.rstrip (vrstica)
line = line.split (CHAN + ':')
če je vrstica [0] .poišči ("PING")! = -1:
pingid = vrstica [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
[/ koda]
Od vseh zgornjih vrstic bom komentiral le pomembne.
z line = line.split (CHAN + ':') to, kar storimo, je razdeliti, kaj nam strežnik pošlje kdaj vzemimo nekaj od kanala.
Na primer naslednja vrstica označuje, da je nekdo kaj napisal na kanalu:
:[email protected] PRIVMSG #Home :Hola ^^
Prvi je uporabnikov vzdevek in podatki o povezavi (ločeni z!), Ukaz (v tem primeru pomeni, da je napisal), kanal in na koncu po dvopičju poslano sporočilo. Še veliko ukazov ne bom razlagal, saj to ne spada v to vadnico.
Druge pomembne vrstice so tiste so po if. Strežnik vsake toliko časa pošlje ukaz PING, da preveri, ali je uporabnik še vedno povezan. V tem primeru bot pošlje ukaz PONG z ID-jem, ki ga je poslal PING, da strežniku sporoči, da je še vedno povezan.
S tem že imamo osnovo bota. Zdaj bom nadaljeval z razlago, kako narediti, da se bot odzove glede na to, kaj želimo na določene ukaze, ne glede na to, ali gre za IRC ali uporabnike.
Odziv na ukaze IRC:
PING in PRIVMSG sta primera ukazov IRC. Ukazov je veliko, toda, kot sem že povedal, se ne bom spuščal v podrobnosti.
Na primer, lahko naredimo bota, da pozdravi uporabnike, ki se povežejo:
name = vrstica [0] .split ('!') [0] .split (':') [1], če ime! = NICK in name.find (HOST) == -1:
s.send ("PRIVMSG% s: Dobrodošli @% s ^^ \ n"% (CHAN, ime))
[/ koda]
Najprej preverimo, ali strežnik pošlje ukaz PRIDRUŽITE kar pomeni, da je nekdo povezan s strežnikom. Nato izvlečemo vzdevek in preverimo, ali vzdevek ni URL IRC (če ne takoj, ko zaženemo bota, bo pozdravil url) in na koncu pošljemo pozdravno sporočilo.
Bot ukazi:
Zdaj pa, kako naredim svojega bota se odzivajte na lastne ukaze? Oglejmo si bolje primer:
[koda] če je vrstica [1] == '$ version':s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ koda]
V tem primeru, če nekdo piše $ različica bot bo prikazal sporočilo z imenom, različico in avtorjem. Popolna koda primera je naslednja:
[koda] uvozna vtičnicauvozni niz
HOST = »localhost»
LUKA = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Domov»
readbuffer = »»
s = socket.socket ()
s.connect ((HOST, PORT))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("UPORABNIK% s% s bla:% s \ r \ n"% (IDENT, HOST, REALNAME))
s.send ("PRIDRUŽI SE:% s \ r \ n"% CHAN)
medtem ko 1:
readbuffer = readbuffer + s.recv (1024)
temp = string.split (bralnik, "\ n")
readbuffer = temp.pop ()
za vrstico v temp:
vrstica za tiskanje
vrstica = niz.rstrip (vrstica)
line = line.split (CHAN + ':')
če je vrstica [0] .poišči ("PING")! = -1:
pingid = vrstica [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
če je vrstica [0] .find ('JOIN')! = -1:
name = vrstica [0] .split ('!') [0] .split (':') [1], če ime! = NICK in name.find (HOST) == -1:
s.send ("PRIVMSG% s: Dobrodošli @% s ^^ \ n"% (CHAN, ime))
če je len (vrstica) <1:
če je vrstica [1] == '$ version':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ koda]
Upam, da vam je bila ta vadnica všeč, in seveda vam zapuščam povezavo do kode mojega bota, da si lahko v celoti ogledate njegovo kodo in bolje vidite, kako deluje (čeprav sem odstranil nekaj ukazov za osebno uporabo).