2010-02-06 8 views
0

Quand je lance le script:Python IRC Client

import socket 
from time import strftime 

time = strftime("%H:%M:%S") 

irc = 'irc.tormented-box.net' 
port = 6667 
channel = '#tormented' 
sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sck.connect((irc, port)) 
print sck.recv(4096) 
sck.send('NICK supaBOT\r\n') 
sck.send('USER supaBOT supaBOT supaBOT :supaBOT Script\r\n') 
sck.send('JOIN ' + channel + '\r\n') 
sck.send('PRIVMSG #tormented :supaBOT\r\n') 
while True: 
    data = sck.recv(4096) 
    if data.find('PING') != -1: 
     sck.send('PONG ' + data.split() [1] + '\r\n') 
    elif data.find ('PRIVMSG') != -1: 
     nick = data.split ('!') [ 0 ].replace (':', '') 
     message = ':'.join (data.split (':') [ 2: ]) 
     destination = ''.join (data.split (':') [ :2 ]).split (' ') [ -2 ] 
     if destination == 'supaBOT': 
      destination = 'PRIVATE' 
     print '(', destination, ')', nick + ':', message 
     get = message.split(' ') [1] 
     if get == 'hi': 
      try: 
       args = message.split(' ') [2:] 
       sck.send('PRIVMSG ' + destination + ' :' + nick + ': ' + 'hello' + '\r\n') 
      except: 
       pass 

Je reçois c'est l'erreur:

get = message.split(' ')[1] 

IndexError: list index out of range 

Comment puis-je résoudre ce problème?

+1

Aargh que faute de frappe me rappelle: http://pythong.org/ (avertissement: vous pouvez je ne vois pas ça). –

Répondre

3

Cela signifie que message ne contient aucun espace, donc quand il est divisé par un espace, vous obtenez une liste contenant un seul élément - vous essayez d'accéder au deuxième élément de cette liste. Vous devriez insérer un chèque pour ce cas.

EDIT: En réponse à votre commentaire: comment ajouter le contrôle dépend de la logique de votre programme. La serait quelque chose comme solution la plus simple:

if ' ' in msg: 
    get = message.split(' ')[1] 
else: 
    get = message 
+0

Comment puis-je insérer un contrôle? – sourD

0

Essayez

get = message.split(" ",1)[-1] 

Exemple

>>> "abcd".split(" ",1)[-1] 
'abcd' 
>>> "abcd efgh".split(" ",1)[-1] 
'efgh'