#!/usr/bin/env python # coding:utf-8 import socket class Bot: def __init__(self): self.log = open('log.txt','w') self.network = 'chat.freenode.net' self.port = 6667 self.nick = 'bambot' self.channel = '#bamdev' self.irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM ) self.irc.connect((self.network, self.port)) def identify(self, nick): self.irc.send ( u'NICK %s\r\n' % nick ) self.irc.send(u'USER %s %s %s :Python IRC\r\n' % (nick,nick,nick)) def join(self, channel): print 'join()' print self.listen() self.irc.send ( u'JOIN %s\r\n' % channel ) def remember(self, msg): print u'☞ ' + msg self.log.write(msg + '\r\n') def say(self, msg): self.irc.send ( u'PRIVMSG %s :%s\r\n' % (self.channel, msg) ) def listen(self): return self.irc.recv ( 4096 ) def parse(self, data): """ a typical irc line: :joemember!n=foo@c-000000000000000hsd1.md.zzzzzzz.net PRIVMSG #bamdev :sup? \-speaker-|--------------server---------------------/ \-cmd-/ \chan-/ |msg... """ print u'☞ DATA IS: ' + data nil, proto, msg = data.split(':') (source, cmd, chan) = proto.split() speaker, server = source.split('!') return (speaker, server, cmd, chan, msg) def run(self): self.identify('bambot') self.join('#bamdev') self.say(u'teh jonasaurus is leet') while True: data = self.listen() self.remember(data) try: speaker, server, cmd, chan, msg = self.parse(data) print u"☞ Command was: " + cmd if cmd == 'PING': remember(u"got PINGed.") self.irc.send ('PONG ' + server + '\r\n') elif cmd == 'PRIVMSG': if msg.lstrip().startswith(speaker): self.remember(u'someone said my name ☞ %s:\t%s' % (speaker, msg)) self.remember('%s:\t%s' % (speaker, msg)) except ValueError: continue b = Bot() b.run()