PDA

Visualizza la versione completa : [PYTHON] BOT per IRC


newlife05
28-02-2010, 01:31
ho un problema non da poco, almeno per me. ho scritto sta cretinata però quei due while non mi piacciono. se qualcuno usa irc sa che al momento della connessione, prima di entrare effettivamente nel canale, ci sono una sfilza di messaggi iniziali, io quei messaggi li devo ricevere per forza per mantenere la connessione aperta, ma non so come fare per poi iniziare un ciclo a parte gestirmi i messaggi ricevuti nel canale ignorando tutti quelli iniziali. ad esempio se il bot deve rispondere con frasi a caso quando scrivo il suo nome, allora lui manda le frasi anche quando non scrivo il nome perchè nei messaggi di accesso è presente il nome dato che mi collego ad un canale. spero di essermi spiegato. dovrei usare un thread? non li ho mai usati


import socket
import random

#Variabili che mi servono per il collegamento
SERVER = "irc.freenode.net"
PORT = 8001
NICKNAME = "prova"
USERNAME = "prova"
CANALE = "#qwerty"

frasi = [] #Conterra' le frasi che il bot scrivera'

for line in open('frasi', 'r'): #Aggiunge le frasi prese dal file alla lista
frasi.append(line)

irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #Creo il socket

irc.connect((SERVER, PORT)) #Mi collego al server

irc.send("USER %s %s %s %s\n\r" % (USERNAME, "prova", CANALE, "test")) #Invio user
irc.send("NICK %s\n\r" % NICKNAME) #Invio nick
irc.send("JOIN %s\n\r" % CANALE) #Entro nel canale

read_buffer = irc.recv(512) #Ricevo i messaggi dal server
print read_buffer #e li stampo

while '#qwerty' not in read_buffer: #Elimino tutti i messaggi iniziali che non mi servono
read_buffer = irc.recv(512)
print read_buffer

while True: #Ciclo principale, qua mi tengo in ascolto sul canale e gestisco i messaggi inviati dagli utenti
read_buffer = irc.recv(512)
if 'PING' in read_buffer:
a = read_buffer.split(':')
irc.send('PONG %s' % a[1])
if 'esci' in read_buffer:
irc.send('QUIT :testami\n\r')
if 'prova' in read_buffer:
irc.send ("PRIVMSG %s :%s\n\r" % (CANALE, random.choice(frasi)))
print read_buffer

Loading