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:
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 socketkarakterlá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).