Guest User

Untitled

a guest
Apr 22nd, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.04 KB | None | 0 0
  1.  
  2. import collections
  3. import datetime
  4. import select
  5. import socket
  6. import string
  7.  
  8. class IRC:
  9. sockets = {}
  10.  
  11. def connect(self, id, server, port):
  12. '''Connect to an IRC server.
  13. Returns a unique id representing the socket.'''
  14. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  15. # IDIOTS - Tuples are (should) not allowed.
  16. s.connect((server, port))
  17. s.setblocking(0)
  18. self.sockets[id] = s
  19. return id
  20.  
  21. def send(self, id, what):
  22. '''Sends data to the socket represented by [id].
  23. Returns 0 if we cannot send'''
  24. try: s = self.sockets[id]
  25. except KeyError:
  26. print 'Cannot send to %s' % id
  27. return 1
  28. s.send('%s\r\n' % what)
  29. print "%s << %s" % (id, what)
  30.  
  31. def register(self, id, nick, ident='', realname=''):
  32. if ident == '': ident = nick
  33. if realname == '': realname = nick
  34. self.send(id, 'NICK %s' % nick)
  35. self.send(id, 'USER %s - - :%s' % (ident, realname))
  36.  
  37. def join(self, id, where):
  38. joinlist = ""
  39. for channel in where:
  40. joinlist = "%s,%s" % (joinlist, channel)
  41. joinlist = joinlist[1:]
  42. self.send(id, 'JOIN %s' % joinlist)
  43.  
  44. def quit(self, id, what):
  45. self.send(id, 'QUIT :%s' % what)
  46.  
  47. def receive(self):
  48. readbuffer = collections.defaultdict()
  49. readbuffer['dn'] = ''
  50. while 1:
  51. socketlist = []
  52. for socket in self.sockets:
  53. socketlist.append(self.sockets[socket])
  54. s = select.select(socketlist, [], [])[0]
  55. for s in s:
  56. for obj in self.sockets:
  57. if self.sockets[obj] == s:
  58. id = obj
  59. readbuffer[id] = readbuffer[id] + s.recv(1024)
  60. temp = string.split(readbuffer[id], '\n')
  61. readbuffer = temp.pop()
  62. for line in temp:
  63. line = string.rstrip(line)
  64. print '%s >> %s' % (id, line)
  65.  
  66. if __name__ == '__main__':
  67. irc = IRC()
  68. irc.connect('dn', 'irc.devnode.org', 6667)
  69. # irc.connect('fn', 'irc.freenode.net', 6667)
  70. irc.register('dn', 'bkbot')
  71. # irc.register('fn', 'bkbot')
  72. irc.join('dn', ['#botters'])
  73. # irc.join('fn', ['#botters', '#unixpod'])
  74. irc.receive()
  75. irc.quit('dn', 'receive() broke')
  76. # irc.quit('fn', 'receive() broke')
Add Comment
Please, Sign In to add comment