Šodien es iemācīšu jums programmēt a cērme par IRC. Pirmkārt, tiem, kas nezina, robots ir programma, kas izveido savienojumu ar IRC kanālu un mijiedarbojas ar to, kas ļauj mums, piemēram, moderēt kanālu bez ka mēs esam saistīti tādējādi izvairoties no surogātpasta vai ka tas atpazīst pasūtījumu sēriju un izpilda atbilstošo kodu.
Lai gan jau ir gatavi roboti, es patiesi esmu viens no tiem, kuriem patīk pašiem veidot savas programmas, un lielais gandarījums, ko tas mums dod, redzot, ka tas darbojas
Pateicoties tam, pārejam uz apmācību.
Lai programmētu robotu, mums būs nepieciešams teksta redaktors cualquiera (nano, gedit, meditēt utt.) un pitona tulks (Būs nepieciešama 2.6 vai 2.7, nedarbojas ar Python 3.x).
Vispirms mēs importējam nepieciešamie moduļi, šajā gadījumā mums būs nepieciešami tikai divi:
[kods] #! / usr / bin / env python# - * - kodēšana: utf-8 - * -
importa ligzda
importa virkne
[/ kods]
Tagad mēs turpinām configurar robots:
[kods] HOST=»irc.desdelinux.tīkls"OSTA = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Sākums»
lasītāju buferis = »»
[/ kods]
Es paskaidrošu katru mainīgo:
- HOST: Servera URL, ar kuru mēs izveidosim savienojumu
- OSTA: Servera ports. Pēc noklusējuma tas ir 6667.
- NICK, IDENT un REALNAME: Tie atbilst robota segvārdam, tā identifikācijai un īstajam vārdam.
- ČAN: Kanāls, kurā robots ieies
- lasītājs: Šajā mainīgajā tiks saglabāti servera nosūtītie dati.
Kad mūsu bots ir konfigurēts, mēs ejam uz savienojums
[kods] s = ligzda.socket ()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 ("PIEVIENOTIES:% s \ r \ n"% CHAN)
[/ kods]
Pirmajā rindā nav daudz noslēpumu, otrā rada servera savienojums un pēdējie trīs nosūta robota datus uz serveri, lai turpinātu pieteikšanos.
Kad būs izveidots savienojums, mēs izveidosim Bezgalīga cilpa kurā mēs iesim datu saņemšana un nosūtīšana no / uz serveri:
[kods], kamēr 1:readbuffer = readbuffer + s.recv (1024)
temp = string.split (lasīšanas buferis, "\ n")
readbuffer = temp.pop ()
līnijai temp:
līnija = string.rstrip (līnija)
line = line.split (CHAN + ':')
ja rinda [0] .find ("PING")! = -1:
pingid = līnija [0] .split () [1] s.sūtīt ("PONG% s \ r \ n"% pingid)
[/ kods]
No visām iepriekš rakstītajām rindām es komentēšu tikai svarīgākās.
ar line = line.split (CHAN + ':') tas, ko mēs darām, ir sadalīt to, ko serveris mums sūta paņemsim kaut ko no kanāla.
Piemēram, šī rinda norāda, ka kāds kanālā kaut ko uzrakstīja:
:son_link!sonlink@127.0.0.1 PRIVMSG #Home :Hola ^^
Pirmais ir lietotāja segvārds un viņa savienojuma dati (atdalīti ar!), Komanda (šajā gadījumā tas norāda, ka viņš rakstīja), kanāls un visbeidzot, pēc resnās zarnas, nosūtītais ziņojums. Es nepaskaidrošu daudz vairāk komandu, jo tas neietilpst šajā apmācībā.
Pārējās svarīgās līnijas ir tās viņi ir pēc if. Serveris tik bieži nosūta komandu PING, lai pārbaudītu, vai lietotājs joprojām ir savienots. Tādā gadījumā robots nosūta komandu PONG ar ID, kuru PING nosūtīja, lai norādītu serverim, ka tas joprojām ir savienots.
Līdz ar to mums jau ir bota pamats. Tagad es turpināšu paskaidrot, kā panākt, lai robots reaģētu atbilstoši tam, ko mēs vēlamies noteiktām komandām, neatkarīgi no tā, vai tās ir no pašas IRC vai no lietotājiem.
Atbildēšana uz IRC komandām:
PING un PRIVMSG ir IRC komandu piemēri. Ir daudz komandu, taču, kā jau teicu iepriekš, tas ir kaut kas, par kuru es detalizēti neiedziļināšos.
Piemēram, mēs varam likt robotam sasveicināties lietotājiem, kuri izveido savienojumu:
name = line [0] .split ('!') [0] .split (':') [1] if name! = NICK and name.find (HOST) == -1:
s.send ("PRIVMSG% s: Laipni lūdzam @% s ^^ \ n"% (CHAN, nosaukums))
[/ kods]
Vispirms mēs pārbaudām, vai serveris nosūta komandu PIEVIENOJIES kas norāda, ka kāds ir izveidojis savienojumu ar serveri. Tad mēs iegūstam segvārdu, pārbaudām, vai segvārds nav IRC URL (ja ne tiklīdz mēs palaižam robotu, tas sveicinās URL) un visbeidzot mēs nosūtām apsveikuma ziņojumu.
Bot komandas:
Tagad kā es varu izveidot savu bot atbildu uz savām komandām? Labāk apskatīsim piemēru:
[kods] ja rinda [1] == '$ version':s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ kods]
Šajā piemērā, ja kāds raksta $ versija robots parādīs ziņojumu, norādot tā vārdu, versiju un autoru. Pilns piemēra kods ir šāds:
[kods] importa ligzdaimporta virkne
HOST = »vietējais saimnieks»
OSTA = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Sākums»
lasītāju buferis = »»
s = kontaktligzda. kontaktligzda ()
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 ("PIEVIENOTIES:% s \ r \ n"% CHAN)
kamēr 1:
readbuffer = readbuffer + s.recv (1024)
temp = string.split (lasīšanas buferis, "\ n")
readbuffer = temp.pop ()
līnijai temp:
drukas līnija
līnija = string.rstrip (līnija)
line = line.split (CHAN + ':')
ja rinda [0] .find ("PING")! = -1:
pingid = līnija [0] .split () [1] s.sūtīt ("PONG% s \ r \ n"% pingid)
ja rinda [0] .find ('PIEVIENOTIES')! = -1:
name = line [0] .split ('!') [0] .split (':') [1] if name! = NICK and name.find (HOST) == -1:
s.send ("PRIVMSG% s: Laipni lūdzam @% s ^^ \ n"% (CHAN, nosaukums))
ja len (līnija) <1:
ja rindiņa [1] == '$ version':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ kods]
Es ceru, ka šī apmācība jums patika, un, protams, es jums atstāju saiti uz sava robota kodu, lai jūs varētu pilnībā redzēt tā kodu un labāk redzēt, kā tas darbojas (lai gan dažas komandas personīgai lietošanai esmu noņēmis).