Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import collections
- import datetime
- import select
- import socket
- import string
- class IRC:
- sockets = {}
- def connect(self, id, server, port):
- '''Connect to an IRC server.
- Returns a unique id representing the socket.'''
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- # IDIOTS - Tuples are (should) not allowed.
- s.connect((server, port))
- s.setblocking(0)
- self.sockets[id] = s
- return id
- def send(self, id, what):
- '''Sends data to the socket represented by [id].
- Returns 0 if we cannot send'''
- try: s = self.sockets[id]
- except KeyError:
- print 'Cannot send to %s' % id
- return 1
- s.send('%s\r\n' % what)
- print "%s << %s" % (id, what)
- def register(self, id, nick, ident='', realname=''):
- if ident == '': ident = nick
- if realname == '': realname = nick
- self.send(id, 'NICK %s' % nick)
- self.send(id, 'USER %s - - :%s' % (ident, realname))
- def join(self, id, where):
- joinlist = ""
- for channel in where:
- joinlist = "%s,%s" % (joinlist, channel)
- joinlist = joinlist[1:]
- self.send(id, 'JOIN %s' % joinlist)
- def quit(self, id, what):
- self.send(id, 'QUIT :%s' % what)
- def receive(self):
- readbuffer = collections.defaultdict()
- readbuffer['dn'] = ''
- while 1:
- socketlist = []
- for socket in self.sockets:
- socketlist.append(self.sockets[socket])
- s = select.select(socketlist, [], [])[0]
- for s in s:
- for obj in self.sockets:
- if self.sockets[obj] == s:
- id = obj
- readbuffer[id] = readbuffer[id] + s.recv(1024)
- temp = string.split(readbuffer[id], '\n')
- readbuffer = temp.pop()
- for line in temp:
- line = string.rstrip(line)
- print '%s >> %s' % (id, line)
- if __name__ == '__main__':
- irc = IRC()
- irc.connect('dn', 'irc.devnode.org', 6667)
- # irc.connect('fn', 'irc.freenode.net', 6667)
- irc.register('dn', 'bkbot')
- # irc.register('fn', 'bkbot')
- irc.join('dn', ['#botters'])
- # irc.join('fn', ['#botters', '#unixpod'])
- irc.receive()
- irc.quit('dn', 'receive() broke')
- # irc.quit('fn', 'receive() broke')
Add Comment
Please, Sign In to add comment