Mercurial > xib
comparison irclib.py @ 115:0ae0f8836a7a
split long messages when sending on IRC
Signed-off-by: Charly COSTE <changaco@changaco.net>
| author | Charly COSTE <changaco@changaco.net> |
|---|---|
| date | Sat, 28 Nov 2009 23:33:48 +0100 |
| parents | 94fc538cdf65 |
| children | efdc038e757a |
comparison
equal
deleted
inserted
replaced
| 114:787e97d62404 | 115:0ae0f8836a7a |
|---|---|
| 69 import sys | 69 import sys |
| 70 import time | 70 import time |
| 71 import types | 71 import types |
| 72 import threading | 72 import threading |
| 73 import traceback | 73 import traceback |
| 74 import math | |
| 74 | 75 |
| 75 VERSION = 0, 4, 8 | 76 VERSION = 0, 4, 8 |
| 76 DEBUG = 0 | 77 DEBUG = 0 |
| 77 | 78 |
| 78 # TODO | 79 # TODO |
| 454 self.lock.release() | 455 self.lock.release() |
| 455 return self | 456 return self |
| 456 | 457 |
| 457 | 458 |
| 458 self.nick_callbacks = [] | 459 self.nick_callbacks = [] |
| 460 self.irc_id = None | |
| 459 self.previous_buffer = "" | 461 self.previous_buffer = "" |
| 460 self.handlers = {} | 462 self.handlers = {} |
| 461 self.real_server_name = "" | 463 self.real_server_name = "" |
| 462 self.real_nickname = self.nickname | 464 self.real_nickname = self.nickname |
| 463 self.username = username or self.nickname | 465 self.username = username or self.nickname |
| 850 """Send a PONG command.""" | 852 """Send a PONG command.""" |
| 851 self.send_raw("PONG %s%s" % (target, target2 and (" " + target2))) | 853 self.send_raw("PONG %s%s" % (target, target2 and (" " + target2))) |
| 852 | 854 |
| 853 def privmsg(self, target, text): | 855 def privmsg(self, target, text): |
| 854 """Send a PRIVMSG command.""" | 856 """Send a PRIVMSG command.""" |
| 855 # Should limit len(text) here! | |
| 856 for l in text.split('\n'): | 857 for l in text.split('\n'): |
| 857 self.send_raw("PRIVMSG %s :%s" % (target, l)) | 858 l_size = len(l.encode('utf-8')) |
| 859 available_size = float(510-len('%s PRIVMSG %s :' % (self.irc_id, target))) # 510 is the size limit for IRC messages defined in RFC 2812 | |
| 860 e = 0 | |
| 861 for i in range(math.ceil(l_size/available_size)): | |
| 862 s = e | |
| 863 e = s+int(available_size) | |
| 864 while len(l[s:e].encode('utf-8')) >= available_size: | |
| 865 e -= 1 | |
| 866 self.send_raw("PRIVMSG %s :%s" % (target, l[s:e])) | |
| 858 | 867 |
| 859 def privmsg_many(self, targets, text): | 868 def privmsg_many(self, targets, text): |
| 860 """Send a PRIVMSG command to multiple targets.""" | 869 """Send a PRIVMSG command to multiple targets.""" |
| 861 # Should limit len(text) here! | 870 # Size of targets should be limited |
| 862 for l in text.split('\n'): | 871 self.privmsg(','.join(targets), text) |
| 863 self.send_raw("PRIVMSG %s :%s" % (",".join(targets), l)) | |
| 864 | 872 |
| 865 def quit(self, message=""): | 873 def quit(self, message=""): |
| 866 """Send a QUIT command.""" | 874 """Send a QUIT command.""" |
| 867 # Note that many IRC servers don't use your QUIT message | 875 # Note that many IRC servers don't use your QUIT message |
| 868 # unless you've been connected for at least 5 minutes! | 876 # unless you've been connected for at least 5 minutes! |
