sockets and classes
TheDustbustr
thedustbustr at aol.com
Wed Aug 1 14:36:53 EDT 2001
I did not include the code to read from the socket in my post to make the code
more readable, but it was there. And it was recieving data, i accidently had
deleted the 'print data' statement :P
New problem: I get the following error:
if arg[0] == 'privmsg':
TypeError: unsubscriptable object
Whats that supposed to mean?
Hres all the code i have, about 100 lines. Its not commented very well at all
cause I'm in a rush- post if comments are needed for you to understand what I'm
doing.
Thanks, Dustin
#BEGIN CODE BLOCK
# pIRC by Dustin Getz
# a simple IRC client/bot
import socket, string, sys, errno, thread
HOST = 'liberty.nj.us.dal.net'
PORT = 7000
NICK='Dustin2'
REAL='Ima Bot'
QUITMSG='Bye'
IDENT='hacker'
oplist=['Dustin']
commandlist=[]
class Irc:
def __init__(self, host, port):
self.host = host
self.port = port
def connect(self):
print 'Connecting to %s:%s' % (self.host, self.port)
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.connect((self.host, self.port))
def sendcmd(self, cmd):
self.sock.send(cmd)
def docmd(self,arg):
pass
def parse(self, data):
if string.find(string.lower(data), 'privmsg') >= 0:
garbage,middle,msg = string.split(data,':')
sender,cmd,rcpt = string.split(middle)
arg=[string.lower(cmd),sender,rcpt,msg]
return arg
elif string.find(string.lower(data), 'ping') >= 0:
sender,cmd,pong = string.split(data[1:])
arg=[string.lower(cmd),sender,pong]
return arg
def prettify(self, data):
if string.find(string.lower(data), 'privmsg') >= 0:
if data[:1]==':':
garbage,middle,msg = string.split(data,':')
sender,cmd,rcpt = string.split(middle)
return '<%s> %s' % (sender,msg)
else:
middle,msg = string.split(data,':')
cmd,rcpt = string.split(middle)
return '<Dustin> %s' % msg
else:
return data
# def get_control(self):
# while 1:
# data = self.sock.recv(256)
# if string.lower(data) == 'die':
# irc.sock.send('QUIT :%s' % QUITMSG)
# irc.sock.close
# self.sock.close
# break
# else:
# irc.sock.send(data)
# print data
class Log:
pass
irc=Irc(HOST, PORT)
irc.connect()
log=Log()
log.raw=open('ircraw.txt','w')
log.plain=open('ircplain.txt','w')
while 1: # initial registration
data = irc.sock.recv(1024)
log.raw.write(data)
print data
if string.find(string.lower(data), 'got ident response') > 0 or
string.find(string.lower(data), 'no ident response') > 0: break
print 'USER %s localhost localhost :%s\n' % (IDENT, REAL)
irc.sendcmd('USER %s localhost localhost :%s\n' % (IDENT, REAL))
print 'NICK %s\n' % NICK
irc.sendcmd('NICK %s\n' % NICK)
#ctl = irc('localhost',5989)
#ctl.connect()
#thread.start_new_thread(get_control,())
while 1: # main program loop
data = irc.sock.recv(2048)
log.raw.write(data)
arg = irc.parse(data)
if arg[0] == 'privmsg':
if arg[3] in commandlist:
if arg[1] in oplist: irc.docmd(arg)
else: irc.send('PRIVMSG %s :You do not have sufficient privleges to
execute %s.' % (arg[1],arg[3]))
else: irc.send('PRIVMSG %s :Unknown command. Type HELP for list of
commands.' % arg[1])
elif arg[0] == 'ping': irc.send('PONG %s' % arg[2])
display=irc.prettify(data)
log.plain.write(display)
print display
#END CODE BLOCK
More information about the Python-list
mailing list