[Python] Programmeerige IRC jaoks bot

Täna õpetan teile, kuidas programmeerida a bot para IRC. Esiteks, neile, kes ei tea, on bot programm, mis ühendub IRC kanaliga ja suhtleb sellega, mis võimaldab meil näiteks kanalit modereerida ilma et me oleme ühendatud ja seega vältida rämpsposti või et see tuvastab rea tellimusi ja täidab vastava koodi.
Kuigi robotid on juba valmis, olen ausalt üks neist, kellele meeldib ise õppimiseks programme teha ja see pakub meile suurt rahulolu pärast seda, kui näeme, et see töötab ^^

Seda öeldes liigume õpetuse juurde.

Boti programmeerimiseks vajame a lihttekstiredaktor cualquiera (nano, gedit, mediteerimine jne) ja pythoni tõlk (Vajalik on 2.6 või 2.7, ei tööta Python 3.x-ga).

Kõigepealt impordime vajalikud moodulid, sel juhul vajame ainult kahte:

[kood] #! / usr / bin / env python
# - * - kodeerimine: utf-8 - * -

impordipesa
impordistring
[/ kood]

Nüüd jätkame üles seadma bot:

[kood] HOST=»irc.desdelinux.net»
SADAM = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Avaleht»
readbuffer = »»
[/ kood]

Seletan iga muutujat:

  • HOST: Serveri URL, millega me ühenduse loome
  • SADAM: Serveri port. Vaikimisi on see 6667.
  • NICK, IDENT ja REALNAME: Need vastavad roboti hüüdnimele, selle identifitseerimisele ja tegelikule nimele.
  • VAHETA: Kanal, kuhu robot siseneb
  • lugeja: Sellesse muutujasse salvestatakse serveri saadetud andmed.

Kui meie bot on konfigureeritud, jätkame ühendus

[kood] s = pesa.pesa ()
s.connect ((HOST, PORT))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("USER% s% s bla:% s \ r \ n"% (IDENT, HOST, REALNAME))
s.send ("LIITU:% s \ r \ n"% CHAN)
[/ kood]

Esimesel real pole palju saladust, teisel tekib serveri ühendus ja viimased kolm saadavad sisselogimise jätkamiseks roboti andmed serverisse.

Kui ühendus on loodud, loome a Lõputu silmus milles me läheme andmete vastuvõtmine ja serverist saatmine:

[kood] samas 1:
readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
temperatuuri rea jaoks:
rida = string.rstrip (rida)
rida = line.split (CHAN + ':')

kui rida [0] .find ("PING")! = -1:
pingid = rida [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
[/ kood]

Kõigist ülal kirjutatud ridadest kommenteerin ainult olulisi.
koos line = line.split (CHAN + ':') jagame selle, mida server meile saadab saame kanalilt midagi.
Näiteks järgmine rida näitab, et keegi kirjutas kanalile midagi:

:[email protected] PRIVMSG #Home :Hola ^^

Esimene asi on kasutaja hüüdnimi ja tema ühenduse andmed (eraldatud tähega!), Käsk (antud juhul näitab see, et ta kirjutas), kanal ja lõpuks pärast koolonit saadetud sõnum. Ma ei selgita palju rohkem käske, kuna see ei kuulu selle õpetuse alla.

Teised olulised jooned on need on pärast if. Server saadab nii sageli PING-käsu, et kontrollida, kas kasutaja on endiselt ühendatud. Sellisel juhul saadab bot käsu PONG ID-ga, mille PING saatis serverile, et see on endiselt ühendatud.

Sellega on meil juba botipõhi olemas. Nüüd hakkan selgitama, kuidas panna robot reageerima vastavalt sellele, mida me soovime teatud käskudele, olgu need siis IRC enda või kasutajate käest.

IRC käskudele reageerimine:

IRC käskude näited on PING ja PRIVMSG. Käske on palju, kuid nagu ma varem ütlesin, on see midagi, mida ma ei hakka üksikasjalikumalt käsitlema.
Näiteks võime panna bot ütlema kasutajatele, kes ühendavad, tere öelda:

[kood] kui rida [0] .find ('LIITU')! = -1:
nimi = rida [0] .split ('!') [0] .split (':') [1] kui nimi! = NICK ja nimi.leidke (HOST) == -1:
s.send ("PRIVMSG% s: Tere tulemast @% s ^^ \ n"% (CHAN, nimi))
[/ kood]

Kõigepealt kontrollime, kas server saadab käsu LIITU mis näitab, et keegi on serveriga ühendatud. Seejärel eraldame hüüdnime, kontrollime, kas hüüdnimi ei ole IRC URL (kui mitte niipea, kui bot käivitame, tervitab see URL-i) ja lõpuks saadame tervitussõnumi.

Boti käsud:

Kuidas ma nüüd oma roboti valmistan vasta minu enda käskudele? Vaatame parem näidet:

[kood], kui rida [1] == '$ version':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ kood]

Selles näites, kui keegi kirjutab $ versioon robot kuvab sõnumi, mis näitab tema nime, versiooni ja autorit. Näite täielik kood on järgmine:

[kood] impordipesa
impordistring

HOST = »kohalik host»
SADAM = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Avaleht»
readbuffer = »»
s = pistikupesa.pesa ()
s.connect ((HOST, PORT))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("USER% s% s bla:% s \ r \ n"% (IDENT, HOST, REALNAME))
s.send ("LIITU:% s \ r \ n"% CHAN)

samas 1:

readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
temperatuuri rea jaoks:
trükirida
rida = string.rstrip (rida)
rida = line.split (CHAN + ':')

kui rida [0] .find ("PING")! = -1:
pingid = rida [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)

kui rida [0] .find ('LIITU')! = -1:
nimi = rida [0] .split ('!') [0] .split (':') [1] kui nimi! = NICK ja nimi.leidke (HOST) == -1:
s.send ("PRIVMSG% s: Tere tulemast @% s ^^ \ n"% (CHAN, nimi))

kui len (rida) <1:
kui rida [1] == '$ versioon':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ kood]

Loodan, et teile meeldis see õpetus ja loomulikult jätan teile lingi oma roboti koodile, et näeksite selle koodi täielikult ja näeksite paremini, kuidas see töötab (kuigi olen mõned käsud isiklikuks kasutamiseks eemaldanud).

CalicoBot