mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-11-26 04:39:26 +01:00
irclib: Split _sendReply from NestedCommandsIrcProxy.reply
This function was getting uncomfortably big.
This commit is contained in:
parent
567618392f
commit
8a3efe4379
@ -914,10 +914,6 @@ class NestedCommandsIrcProxy(ReplyIrcProxy):
|
||||
assert not isinstance(s, ircmsgs.IrcMsg), \
|
||||
'Old code alert: there is no longer a "msg" argument to reply.'
|
||||
self.repliedTo = True
|
||||
if sendImmediately:
|
||||
sendMsg = self.irc.sendMsg
|
||||
else:
|
||||
sendMsg = self.irc.queueMsg
|
||||
if msg is None:
|
||||
msg = self.msg
|
||||
if prefixNick is not None:
|
||||
@ -936,6 +932,46 @@ class NestedCommandsIrcProxy(ReplyIrcProxy):
|
||||
if not isinstance(s, minisix.string_types): # avoid trying to str() unicode
|
||||
s = str(s) # Allow non-string esses.
|
||||
|
||||
if self.finalEvaled:
|
||||
try:
|
||||
self._sendReply(
|
||||
s=s, target=target, msg=msg,
|
||||
sendImmediately=sendImmediately, stripCtcp=stripCtcp)
|
||||
finally:
|
||||
self._resetReplyAttributes()
|
||||
else:
|
||||
if msg.ignored:
|
||||
# Since the final reply string is constructed via
|
||||
# ' '.join(self.args), the args index for ignored commands
|
||||
# needs to be popped to avoid extra spaces in the final reply.
|
||||
self.args.pop(self.counter)
|
||||
msg.tag('ignored', False)
|
||||
else:
|
||||
self.args[self.counter] = s
|
||||
self.evalArgs()
|
||||
|
||||
def _replyOverhead(self, target, msg):
|
||||
"""Returns the number of bytes added to a PRIVMSG payload, either by
|
||||
Limnoria itself or by the server.
|
||||
Ignores tag bytes, as they are accounted for separatly."""
|
||||
overhead = (
|
||||
len(':')
|
||||
+ len(self.irc.prefix)
|
||||
+ len(' PRIVMSG ')
|
||||
+ len(target)
|
||||
+ len(' :')
|
||||
+ len('\r\n')
|
||||
)
|
||||
if self.prefixNick:
|
||||
overhead += len(msg.nick) + len(': ')
|
||||
return overhead
|
||||
|
||||
def _sendReply(self, s, target, msg, sendImmediately, stripCtcp):
|
||||
if sendImmediately:
|
||||
sendMsg = self.irc.sendMsg
|
||||
else:
|
||||
sendMsg = self.irc.queueMsg
|
||||
|
||||
replyArgs = dict(
|
||||
to=self.to,
|
||||
notice=self.notice,
|
||||
@ -945,8 +981,6 @@ class NestedCommandsIrcProxy(ReplyIrcProxy):
|
||||
stripCtcp=stripCtcp
|
||||
)
|
||||
|
||||
if self.finalEvaled:
|
||||
try:
|
||||
if isinstance(self.irc, self.__class__):
|
||||
s = s[:conf.supybot.reply.maximumLength()]
|
||||
return self.irc.reply(s,
|
||||
@ -963,15 +997,7 @@ class NestedCommandsIrcProxy(ReplyIrcProxy):
|
||||
allowedLength = conf.get(conf.supybot.reply.mores.length,
|
||||
channel=target, network=self.irc.network)
|
||||
if not allowedLength: # 0 indicates this.
|
||||
allowedLength = (512
|
||||
- len(':') - len(self.irc.prefix)
|
||||
- len(' PRIVMSG ')
|
||||
- len(target)
|
||||
- len(' :')
|
||||
- len('\r\n')
|
||||
)
|
||||
if self.prefixNick:
|
||||
allowedLength -= len(msg.nick) + len(': ')
|
||||
allowedLength = 512 - self._replyOverhead(target, msg)
|
||||
maximumMores = conf.get(conf.supybot.reply.mores.maximum,
|
||||
channel=target, network=self.irc.network)
|
||||
maximumLength = allowedLength * maximumMores
|
||||
@ -1045,18 +1071,6 @@ class NestedCommandsIrcProxy(ReplyIrcProxy):
|
||||
self._mores[msg.nick] = (private, msgs)
|
||||
sendMsg(response)
|
||||
return response
|
||||
finally:
|
||||
self._resetReplyAttributes()
|
||||
else:
|
||||
if msg.ignored:
|
||||
# Since the final reply string is constructed via
|
||||
# ' '.join(self.args), the args index for ignored commands
|
||||
# needs to be popped to avoid extra spaces in the final reply.
|
||||
self.args.pop(self.counter)
|
||||
msg.tag('ignored', False)
|
||||
else:
|
||||
self.args[self.counter] = s
|
||||
self.evalArgs()
|
||||
|
||||
def noReply(self, msg=None):
|
||||
if msg is None:
|
||||
|
Loading…
Reference in New Issue
Block a user