[Python] Naprogramujte robota pro IRC

Dnes vás naučím programovat a čenich bod IRC. Za prvé, pro ty, kteří to nevědí, je robot program, který se připojuje k IRC kanálu a interaguje s ním, což nám například umožňuje moderovat kanál bez že jsme propojeni a tak se vyhnout spamu, nebo že rozpozná řadu objednávek a provede odpovídající kód.
I když už jsou roboti připraveni, jsem upřímně jeden z těch, kteří rádi dělají své vlastní programy pro učení a velké uspokojení, které nám dává poté, co viděl, že to funguje ^ ^

S tímto řekl, pojďme k tutoriálu.

K naprogramování robota budeme potřebovat prostý textový editor kdokoli (nano, gedit, meditace atd.) a překladač pythonu (2.6 nebo 2.7 bude nutné, nefunguje s pythonem 3.x.).

Nejprve importujeme požadované moduly, v tomto případě budeme potřebovat pouze dva:

[kód] #! / usr / bin / env python
# - * - kódování: utf-8 - * -

importovat zásuvku
importovat řetězec
[/ Code]

Nyní pokračujeme k configurar robot:

[kód] HOST=»irc.desdelinux.síť"
PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Domů»
readbuffer = »»
[/ Code]

Vysvětlím každou proměnnou:

  • HOST: URL serveru, ke kterému se připojíme
  • PŘÍSTAV: Port serveru. Ve výchozím nastavení je to 6667.
  • NICK, IDENT a REALNAME: Odpovídají přezdívce robota, jeho identifikaci a skutečnému jménu.
  • ZMĚNA: Kanál, do kterého robot vstoupí
  • readbuffer: V této proměnné budou uložena data odeslaná serverem.

Jakmile je náš robot nakonfigurován, přejdeme k spojení

[kód] s = socket.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 ("JOIN:% s \ r \ n"% CHAN)
[/ Code]

První řádek nemá mnoho tajemství, druhý vytváří připojení k serveru a poslední tři odesílají data robota na server, aby pokračovali v přihlášení.

Po připojení vytvoříme Nekonečná smyčka ve kterém půjdeme příjem a odesílání dat z / na server:

[kód], zatímco 1:
readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
pro line in temp:
line = string.rstrip (řádek)
line = line.split (CHAN + ':')

pokud řádek [0] .find ("PING")! = -1:
pingid = řádek [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
[/ Code]

Ze všech řádků napsaných výše budu komentovat pouze ty důležité.
s line = line.split (CHAN + ':') co děláme, je rozdělit to, co nám server pošle, když pojďme něco z kanálu.
Například následující řádek naznačuje, že někdo na kanál něco napsal:

:son_link!sonlink@127.0.0.1 PRIVMSG #Home :Hola ^^

První je přezdívka uživatele a jeho údaje o připojení (oddělené znakem!), Příkaz (v tomto případě to znamená, že napsal), kanál a nakonec po dvojtečce zpráva odeslána. Nebudu vysvětlovat mnoho dalších příkazů, protože to nespadá do tohoto tutoriálu.

Další důležité řádky jsou ty jsou po if. Server tak často odesílá příkaz PING, aby zkontroloval, zda je uživatel stále připojen. V takovém případě robot odešle příkaz PONG s ID, které odeslal PING, aby oznámil serveru, že je stále připojen.

S tímto již máme základ robota. Nyní budu vysvětlovat, jak přimět robota reagovat podle toho, co chceme na určité příkazy, ať už jsou od samotného IRC nebo od uživatelů.

Odpověď na příkazy IRC:

PING a PRIVMSG jsou příklady příkazů IRC. Existuje mnoho příkazů, ale jak jsem již řekl, je to něco, o čem se nebudu podrobně zabývat.
Například můžeme přimět robota pozdravit uživatele, kteří se připojují:

[code] if line [0] .find ('JOIN')! = -1:
name = line [0] .split ('!') [0] .split (':') [1] pokud name! = NICK a name.find (HOST) == -1:
s.send ("PRIVMSG% s: Vítejte @% s ^^ \ n"% (CHAN, jméno))
[/ Code]

Nejprve zkontrolujeme, zda server odešle příkaz REGISTRACE což znamená, že se někdo připojil k serveru. Poté extrahujeme nick, zkontrolujeme, zda nick není IRC url (pokud ne, jakmile spustíme robota, pozdraví url) a nakonec pošleme uvítací zprávu.

Příkazy robota:

Nyní, jak si vyrobím robota reagovat na mé vlastní příkazy? Pojďme se lépe podívat na příklad:

[code] if line [1] == '$ version':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ Code]

V tomto příkladu, pokud někdo píše $ verze robot zobrazí zprávu označující jeho jméno, verzi a autora. Úplný kód příkladu je tento:

[kód] importovací zásuvka
importovat řetězec

HOST = »localhost»
PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Domů»
readbuffer = »»
s = socket.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 ("JOIN:% s \ r \ n"% CHAN)

zatímco 1:

readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
pro line in temp:
tisknout řádek
line = string.rstrip (řádek)
line = line.split (CHAN + ':')

pokud řádek [0] .find ("PING")! = -1:
pingid = řádek [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)

pokud řádek [0] .find ('JOIN')! = -1:
name = line [0] .split ('!') [0] .split (':') [1] pokud name! = NICK a name.find (HOST) == -1:
s.send ("PRIVMSG% s: Vítejte @% s ^^ \ n"% (CHAN, jméno))

pokud len (řádek) <1:
pokud řádek [1] == '$ verze':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ Code]

Doufám, že se vám tento návod líbil, a samozřejmě vám nechám odkaz na kód mého robota, abyste mohli vidět jeho kód v plném rozsahu a lépe vidět, jak to funguje (i když jsem odstranil některé příkazy pro osobní použití).

CalicoBot