Idag ska jag lära dig hur man programmerar a bot till IRC. För det första är en bot för dem som inte vet ett program som ansluter till en IRC-kanal och interagerar med den, vilket tillåter oss att till exempel moderera kanalen utan att vi är anslutna och därmed undvika skräppost, eller att den känner igen en serie beställningar och utför motsvarande kod.
Även om det redan finns bots redo är jag ärligt talat en av dem som gillar att göra sina egna program för att lära sig och den stora tillfredsställelse det ger oss efter att ha sett att det fungerar ^^
Med det sagt, låt oss gå vidare till handledningen.
För att programmera botten behöver vi en klartextredigerare cualquiera (nano, gedit, medit, etc) och pythontolk (2.6 eller 2.7 kommer att behövas, fungerar inte med python 3.x).
Först importerar vi nödvändiga moduler, i det här fallet behöver vi bara två:
[kod] #! / usr / bin / env python# - * - kodning: utf-8 - * -
importuttag
importera sträng
[/ Code]
Nu fortsätter vi till ställa in botten:
[kod] HOST=»irc.desdelinux.netto"PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Hem»
readbuffer = »»
[/ Code]
Jag kommer att förklara varje variabel:
- HOST: Webbadressen till servern som vi ansluter till
- HAMN: Serverporten. Som standard är det 6667.
- NICK, IDENT och REALNAME: De motsvarar botnamnet, dess identifiering och det riktiga namnet.
- CHAN: Kanalen som boten kommer in i
- läsbuffert: I denna variabel sparas data som skickas av servern.
När vår bot är konfigurerad fortsätter vi till anslutningen
[code] s = socket.socket ()s.connect ((VÄST, PORT))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("USER% s% s bla:% s \ r \ n"% (IDENT, VÄST, REALNAMN))
s.send ("JOIN:% s \ r \ n"% CHAN)
[/ Code]
Den första raden har inte mycket mysterium, den andra skapar serveranslutning och de tre sista skickar botens data till servern för att fortsätta med inloggningen.
När vi väl är anslutna skapar vi en Oändlig loop där vi ska gå ta emot och skicka data från / till servern:
[kod] medan 1:readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
läsbuffert = temp.pop ()
för linje i temp:
line = string.rstrip (line)
line = line.split (CHAN + ':')
om rad [0] .find ("PING")! = -1:
pingid = rad [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
[/ Code]
Av alla raderna ovan kommer jag bara att kommentera de viktiga.
med line = line.split (CHAN + ':') vad vi gör är att dela upp vad servern skickar oss när låt oss hämta något från kanalen.
Till exempel visar följande rad att någon skrev något på kanalen:
:son_link!sonlink@127.0.0.1 PRIVMSG #Home :Hola ^^
Den första är användarens smeknamn och anslutningsdata (åtskilda av!), Kommandot (i det här fallet indikerar att han skrev), kanalen och slutligen, efter kolon, meddelandet skickat. Jag kommer inte att förklara många fler kommandon eftersom det inte faller inom denna handledning.
De andra viktiga linjerna är de de är efter if. Servern skickar så ofta PING-kommandot för att kontrollera om användaren fortfarande är ansluten. I så fall skickar boten PONG-kommandot med ett ID som PING skickade för att indikera till servern att den fortfarande är ansluten.
Med detta har vi redan botten av botten. Nu ska jag fortsätta med att förklara hur jag får botten att svara enligt vad vi vill på vissa kommandon, oavsett om de kommer från IRC själv eller från användare.
Svara på IRC-kommandon:
PING och PRIVMSG är exempel på IRC-kommandon. Det finns många kommandon, men som jag sa tidigare är det något som jag inte kommer att gå i detalj om.
Vi kan till exempel få bot att hälsa på användare som ansluter:
name = line [0] .split ('!') [0] .split (':') [1] if name! = NICK and name.find (HOST) == -1:
s.send ("PRIVMSG% s: Välkommen @% s ^^ \ n"% (CHAN, namn))
[/ Code]
Först kontrollerar vi om servern skickar kommandot JOIN vilket indikerar att någon är ansluten till servern. Sedan extraherar vi nicket, vi kontrollerar att nicket inte är IRC-url (om inte så snart vi kör bot kommer den att hälsa på webbadressen) och slutligen skickar vi hälsningsmeddelandet.
Bot-kommandon:
Hur gör jag nu min bot svara på mina egna kommandon? Låt oss bättre titta på ett exempel:
[code] if line [1] == '$ version':s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ Code]
I det här exemplet om någon skriver $version boten visar meddelandet med namn, version och författare. Den fullständiga koden i exemplet är den här:
[kod] importuttagimportera sträng
VÄRD = »lokal värd»
PORT = 6667
NICK = »CalicoBot»
IDENT = »CalicoBot»
REALNAME = »CalicoBot»
CHAN = »# Hem»
readbuffer = »»
s = socket.socket ()
s.connect ((VÄST, PORT))
s.send ("NICK% s \ r \ n"% NICK)
s.send ("USER% s% s bla:% s \ r \ n"% (IDENT, VÄST, REALNAMN))
s.send ("JOIN:% s \ r \ n"% CHAN)
medan 1:
readbuffer = readbuffer + s.recv (1024)
temp = string.split (readbuffer, "\ n")
läsbuffert = temp.pop ()
för linje i temp:
trycklinje
line = string.rstrip (line)
line = line.split (CHAN + ':')
om rad [0] .find ("PING")! = -1:
pingid = rad [0] .split () [1] s.send ("PONG% s \ r \ n"% pingid)
om rad [0] .find ('JOIN')! = -1:
name = line [0] .split ('!') [0] .split (':') [1] if name! = NICK and name.find (HOST) == -1:
s.send ("PRIVMSG% s: Välkommen @% s ^^ \ n"% (CHAN, namn))
om len (rad) <1:
if line [1] == '$ version':
s.send («PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n»% CHAN)
[/ Code]
Jag hoppas att du gillade den här guiden, och naturligtvis lämnar jag dig länken till koden för min bot så att du kan se dess kod i sin helhet och du bättre kan se hur den fungerar (även om jag har tagit bort några kommandon för personligt bruk).