#!/usr/bin/env pythonfrom socket import *class Ircconnection: '''A basic irc connection that handles the stream and keeps the IRC connection alive.''' def __init__(self, server, port, channel, nick, user): self.server = server self.port = port self.channel = channel self.nick = nick self.user = user self.socket = socket(AF_INET, SOCK_STREAM) self.connect() self.login() self.receive() def connect(self): '''Open the connection to the server.''' try: self.socket.connect((self.server, self.port)) except error: self.msg_in('err', error) return false def close(self): '''Close the connection with the server.''' try: self.socket.close() except error: self.msg_in('err', error) return false def login(self): '''Log in to the server.''' self.msg_out('NICK '+self.nick) self.msg_out('USER '+self.user+' 0 * :'+self.user) def send(self, msg): '''Send data in lines to the socket/server.''' self.socket.send(msg) def receive(self): '''Receive data in chunks and pass it to be interpreted''' partial = '' cmd = '' while 1: buf = self.socket.recv(1024).split('\r\n') if partial: buf[0] = partial+buf[0] if len(buf) > 1: partial = buf[-1] for a in buf[:-1]: self.msg_in('msg', a) else: self.msg_in('msg', buf) def msg_in(self, (type, msg)): '''Handle incoming msgs from this client or the server''' return (type, msg) def msg_out(self, msg): '''Handle outgoing messages to the server''' self.send(msg+'\r\n')class Ircbot: '''An IRC bot class that is able to sit in multiple channels (and maybe later connect to multiple servers).''' def __init__(self): self.servers = {} pass def addServer(self, name): if not self.servers[name]: self.servers[name] = {} else: self.servers[name] def addChannel(): pass