[Tutor] IRC Client Trouble -- too many new lines

Joseph Quigley cpu.crazy at gmail.com
Sun Sep 18 16:35:10 CEST 2005


Hi,
My IRC Client can't print the IRC server messages without a newline for 
each message in a giant list that I recieve...
here's my code:

import socket, string, sys

#some user data, change as per your taste
class Data:
    SERVER = 'irc.freenode.net'
    CHANNEL = "#python"
    NICKNAME = "Pythonatic"
    PORT = 6667
    #open a socket to handle the connection
    IRC = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#open a connection with the server
def Irc_Conn():
    print "Connecting to IRC server (%s)." % (Data.SERVER)
    try:
        Data.IRC.connect((Data.SERVER, Data.PORT))
    except socket.gaierror:
        print """Error: Name or service not known.

This could mean that you aren't connected to the internet or that
the server is down."""
        raise SystemExit

#simple function to send data through the socket
def Send_Data(command):
    Data.IRC.send(command + '\n')

#join the channel
def Join(channel):
    Send_Data("JOIN %s" % channel)

#send login data (customizable)
def Login(nickname, username='user', password = None, realname='You 
don\'t need2know', hostname='Slackware', servername='Intelnett'):
    Send_Data("USER %s %s %s %s" % (username, hostname, servername, 
realname))
    Send_Data("NICK " + NICKNAME)

Irc_Conn()
Login(Data.NICKNAME)
Join(Data.CHANNEL)

while (1):
    buffer = Data.IRC.recv(1024)
    msg = string.split(buffer)
    if msg[0] == "PING": #check if server have sent ping command
        Send_Data("PONG %s" % msg[1]) #answer with pong as per RFC 1459
    if msg[1] == 'PRIVMSG' and msg[2] == Data.NICKNAME:
        filetxt = open('%stmp' % (Data.configFileRead[8]), 'a+') #open 
an arbitrary file to store the messages
        nick_name = msg[0][:string.find(msg[0],"!")] #if a private 
message is sent to you catch it
        message = ' '.join(msg[3:])
        filetxt.write(string.lstrip(nick_name, ':') + ' -> ' + 
string.lstrip(message, ':') + '\n') #write to the file
        filetxt.flush() #don't wait for next message, write it now!
    if msg:
        msg_length = len(msg)
        print_msg = 0
        while True:
            if print_msg == msg_length:
                break
            else:
                print msg[print_msg]
                print_msg = print_msg + 1
                continue

Thanks,
Joe


More information about the Tutor mailing list