[Python] Programozzon egy botot az IRC-hez

Ma megtanítalak a programozásra pofa mert IRC. Először is, azok számára, akik nem tudják, a bot olyan program, amely csatlakozik egy IRC csatornához és kölcsönhatásba lép vele, amely lehetővé teszi például a csatorna moderálását anélkül, hogy hogy kapcsolatban állunk és így elkerülhető a spam, vagy hogy felismeri a megrendelések sorozatát és végrehajtja a megfelelő kódot.
Bár már vannak kész robotok, őszintén szólva egyike vagyok azoknak, akik szeretnek saját programokat készíteni, hogy megtanulják őket, és az a nagy megelégedettség, amelyet nekünk ad, miután láttuk, hogy működik ^

Ezt mondva térjünk át a bemutatóra.

A bot programozásához szükségünk lesz a sima szövegszerkesztő bármilyen (nano, gedit, meditáció stb.) és python tolmács (2.6 vagy 2.7 szükséges lesz, nem működik a Python 3.x-sel).

Először a szükséges modulok, ebben az esetben csak kettőre lesz szükségünk:

[kód] #! / usr / bin / env python
# - * - kódolás: utf-8 - * -

import aljzat
karakterlánc importálása
[/ Code]

Most folytatjuk beállítva a bot:

[kód] HOST=»irc.desdelinux.háló"
PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Kezdőlap»
readbuffer = »»
[/ Code]

Minden változót elmagyarázok:

  • HOST: A kiszolgáló URL-je, amelyhez csatlakozni fogunk
  • KIKÖTŐ: A kiszolgáló portja. Alapértelmezés szerint 6667.
  • NICK, IDENT és REALNAME: Megfelelnek a bot becenevének, azonosításának és a valódi névnek.
  • CHAN: Az a csatorna, amelybe a bot belép
  • olvasópuffer: Ebben a változóban a szerver által küldött adatok mentésre kerülnek.

A botunk konfigurálása után folytatjuk a kapcsolat

[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 ("CSATLAKOZÁS:% s \ r \ n"% CHAN)
[/ Code]

Az első sorban nincs sok rejtély, a másodikban létrejön a szerver kapcsolat az utolsó három pedig elküldi a bot adatait a szervernek, hogy folytassa a bejelentkezést.

A csatlakozás után létrehozunk egy Végtelen hurok amelyben megyünk adatok fogadása és küldése a szerverről / a szerverre:

[kód] míg 1:
readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
a hőmérséklet hőmérséklete:
line = string.rstrip (vonal)
line = line.split (CHAN + ':')

ha a [0] .find ("PING") sor! = -1:
pingid = line [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
[/ Code]

Az összes fent írt sor közül csak a fontosakat kommentálom.
Con line = line.split (CHAN + ':'), amit csinálunk, elosztjuk, hogy a szerver mikor küld nekünk szerezzünk be valamit a csatornától.
Például a következő sor azt jelzi, hogy valaki írt valamit a csatornára:

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

Az első a felhasználó beceneve és kapcsolati adatai (elválasztva! -Től), a Parancs (ebben az esetben azt jelzi, hogy írt), a csatorna, végül a kettőspont után az elküldött üzenet. Sokkal több parancsot nem magyarázok meg, mivel ez nem tartozik ebbe az oktatóanyagba.

A többi fontos vonal az az if után járnak. A szerver olyan gyakran küldi a PING parancsot, hogy ellenőrizze, a felhasználó továbbra is csatlakozik-e. Ebben az esetben a bot elküldi a PONG parancsot egy azonosítóval, amelyet a PING küldött, hogy jelezze a szervernek, hogy még mindig csatlakozik.

Ezzel már megvan a bot alapja. Most elmagyarázom, hogyan lehet a botot úgy reagálni, ahogy szeretnénk bizonyos parancsokra, akár magától az IRC-től, akár a felhasználóktól.

Válasz az IRC parancsokra:

A PING és a PRIVMSG az IRC parancsok példái. Számos parancs létezik, de amint azt már korábban mondtam, ezt nem részletezem.
Például megtehetjük, hogy a bot köszönjön azoknak a felhasználóknak, akik csatlakoznak:

[kód], ha a [0] .find ('JOIN') sor! = -1:
name = line [0] .split ('!') [0] .split (':') [1] if name! = NICK and name.find (HOST) == -1:
s.send ("PRIVMSG% s: Üdvözöljük @% s ^^ \ n"% (CHAN, név))
[/ Code]

Először ellenőrizzük, hogy a szerver elküldi-e a parancsot JOIN ami azt jelzi, hogy valaki csatlakozott a szerverhez. Ezután kibontjuk a nicket, ellenőrizzük, hogy a nick nem az IRC url (ha nem, amint futtatjuk a botot, üdvözli az URL-t) és végül elküldjük az üdvözlő üzenetet.

Bot parancsai:

Most hogyan készítsem el a botomat válaszoljak a saját parancsaimra? Nézzünk jobban meg egy példát:

[kód], ha [1] sor == '$ version':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ Code]

Ebben a példában, ha valaki ír $ verzió a bot megjeleníti az üzenetet, amely megadja a nevét, verzióját és szerzőjét. A példa teljes kódja:

[code] import socket
karakterlánc importálása

HOST = »localhost»
PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Kezdőlap»
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 ("CSATLAKOZÁS:% s \ r \ n"% CHAN)

míg 1:

readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
readbuffer = temp.pop ()
a hőmérséklet hőmérséklete:
nyomtatási sor
line = string.rstrip (vonal)
line = line.split (CHAN + ':')

ha a [0] .find ("PING") sor! = -1:
pingid = line [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)

ha a [0] .find ('JOIN') sor! = -1:
name = line [0] .split ('!') [0] .split (':') [1] if name! = NICK and name.find (HOST) == -1:
s.send ("PRIVMSG% s: Üdvözöljük @% s ^^ \ n"% (CHAN, név))

ha len (vonal) <1:
ha [1] == '$ version' sor:
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ Code]

Remélem, tetszett ez az oktatóanyag, és természetesen meghagyom a botom kódjára mutató linket, így teljes egészében láthatja a kódját, és jobban láthatja, hogyan működik (bár néhány parancsot eltávolítottam személyes használatra).

CalicoBot