mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-10-03 01:48:52 +02:00
callbacks: honor network-specificity of supybot.reply.whenAddressedBy.
A side-effect is that plugins should now pass 'irc' instead of 'irc.nick' when they call 'callbacks.addressed()'.
This commit is contained in:
parent
2953126fca
commit
0b0da9716d
@ -189,7 +189,7 @@ class MessageParser(callbacks.Plugin, plugins.ChannelDBHandler):
|
|||||||
self._runCommandFunction(irc, msg, action)
|
self._runCommandFunction(irc, msg, action)
|
||||||
|
|
||||||
def doPrivmsg(self, irc, msg):
|
def doPrivmsg(self, irc, msg):
|
||||||
if not callbacks.addressed(irc.nick, msg): #message is not direct command
|
if not callbacks.addressed(irc, msg): #message is not direct command
|
||||||
self.do_privmsg_notice(irc, msg)
|
self.do_privmsg_notice(irc, msg)
|
||||||
|
|
||||||
def doNotice(self, irc, msg):
|
def doNotice(self, irc, msg):
|
||||||
|
@ -233,7 +233,7 @@ class Owner(callbacks.Plugin):
|
|||||||
'Owner isn\'t first callback: %r' % irc.callbacks
|
'Owner isn\'t first callback: %r' % irc.callbacks
|
||||||
if ircmsgs.isCtcp(msg):
|
if ircmsgs.isCtcp(msg):
|
||||||
return
|
return
|
||||||
s = callbacks.addressed(irc.nick, msg)
|
s = callbacks.addressed(irc, msg)
|
||||||
if s:
|
if s:
|
||||||
ignored = ircdb.checkIgnored(msg.prefix)
|
ignored = ircdb.checkIgnored(msg.prefix)
|
||||||
if ignored:
|
if ignored:
|
||||||
|
@ -208,7 +208,7 @@ class Web(callbacks.PluginRegexp):
|
|||||||
network = irc.network
|
network = irc.network
|
||||||
if not channel:
|
if not channel:
|
||||||
return
|
return
|
||||||
if callbacks.addressed(irc.nick, msg):
|
if callbacks.addressed(irc, msg):
|
||||||
return
|
return
|
||||||
if self.registryValue('titleSnarfer', channel, network):
|
if self.registryValue('titleSnarfer', channel, network):
|
||||||
url = match.group(0)
|
url = match.group(0)
|
||||||
|
@ -40,6 +40,7 @@ from . import shlex
|
|||||||
import codecs
|
import codecs
|
||||||
import getopt
|
import getopt
|
||||||
import inspect
|
import inspect
|
||||||
|
import warnings
|
||||||
|
|
||||||
from . import (conf, ircdb, irclib, ircmsgs, ircutils, log, registry,
|
from . import (conf, ircdb, irclib, ircmsgs, ircutils, log, registry,
|
||||||
utils, world)
|
utils, world)
|
||||||
@ -48,13 +49,22 @@ from .utils.iter import any, all
|
|||||||
from .i18n import PluginInternationalization
|
from .i18n import PluginInternationalization
|
||||||
_ = PluginInternationalization()
|
_ = PluginInternationalization()
|
||||||
|
|
||||||
def _addressed(nick, msg, prefixChars=None, nicks=None,
|
def _addressed(irc, msg, prefixChars=None, nicks=None,
|
||||||
prefixStrings=None, whenAddressedByNick=None,
|
prefixStrings=None, whenAddressedByNick=None,
|
||||||
whenAddressedByNickAtEnd=None):
|
whenAddressedByNickAtEnd=None):
|
||||||
|
if isinstance(irc, str):
|
||||||
|
warnings.warn(
|
||||||
|
"callbacks.addressed's first argument should now be be the Irc "
|
||||||
|
"object instead of the bot's nick.",
|
||||||
|
DeprecationWarning)
|
||||||
|
network = None
|
||||||
|
nick = irc
|
||||||
|
else:
|
||||||
|
network = irc.network
|
||||||
|
nick = irc.nick
|
||||||
def get(group):
|
def get(group):
|
||||||
if ircutils.isChannel(target):
|
v = group.getSpecific(network=network, channel=msg.channel)
|
||||||
group = group.get(target)
|
return v()
|
||||||
return group()
|
|
||||||
def stripPrefixStrings(payload):
|
def stripPrefixStrings(payload):
|
||||||
for prefixString in prefixStrings:
|
for prefixString in prefixStrings:
|
||||||
if payload.startswith(prefixString):
|
if payload.startswith(prefixString):
|
||||||
@ -62,7 +72,8 @@ def _addressed(nick, msg, prefixChars=None, nicks=None,
|
|||||||
return payload
|
return payload
|
||||||
|
|
||||||
assert msg.command == 'PRIVMSG'
|
assert msg.command == 'PRIVMSG'
|
||||||
(target, payload) = msg.args
|
target = msg.channel or msg.args[0]
|
||||||
|
payload = msg.args[1]
|
||||||
if not payload:
|
if not payload:
|
||||||
return ''
|
return ''
|
||||||
if prefixChars is None:
|
if prefixChars is None:
|
||||||
@ -125,7 +136,7 @@ def _addressed(nick, msg, prefixChars=None, nicks=None,
|
|||||||
else:
|
else:
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
def addressed(nick, msg, **kwargs):
|
def addressed(irc, msg, **kwargs):
|
||||||
"""If msg is addressed to 'name', returns the portion after the address.
|
"""If msg is addressed to 'name', returns the portion after the address.
|
||||||
Otherwise returns the empty string.
|
Otherwise returns the empty string.
|
||||||
"""
|
"""
|
||||||
@ -133,7 +144,7 @@ def addressed(nick, msg, **kwargs):
|
|||||||
if payload is not None:
|
if payload is not None:
|
||||||
return payload
|
return payload
|
||||||
else:
|
else:
|
||||||
payload = _addressed(nick, msg, **kwargs)
|
payload = _addressed(irc, msg, **kwargs)
|
||||||
msg.tag('addressed', payload)
|
msg.tag('addressed', payload)
|
||||||
return payload
|
return payload
|
||||||
|
|
||||||
|
@ -175,6 +175,34 @@ class FunctionsTestCase(SupyTestCase):
|
|||||||
self.assertEqual('foobar--', callbacks.canonicalName('foobar--'))
|
self.assertEqual('foobar--', callbacks.canonicalName('foobar--'))
|
||||||
|
|
||||||
def testAddressed(self):
|
def testAddressed(self):
|
||||||
|
irc = getTestIrc()
|
||||||
|
oldprefixchars = str(conf.supybot.reply.whenAddressedBy.chars)
|
||||||
|
nick = irc.nick
|
||||||
|
conf.supybot.reply.whenAddressedBy.chars.set('~!@')
|
||||||
|
inChannel = ['~foo', '@foo', '!foo',
|
||||||
|
'%s: foo' % nick, '%s foo' % nick,
|
||||||
|
'%s: foo' % nick.capitalize(), '%s: foo' % nick.upper()]
|
||||||
|
inChannel = [ircmsgs.privmsg('#foo', s) for s in inChannel]
|
||||||
|
badmsg = ircmsgs.privmsg('#foo', '%s:foo' % nick)
|
||||||
|
self.assertFalse(callbacks.addressed(irc, badmsg))
|
||||||
|
badmsg = ircmsgs.privmsg('#foo', '%s^: foo' % nick)
|
||||||
|
self.assertFalse(callbacks.addressed(irc, badmsg))
|
||||||
|
for msg in inChannel:
|
||||||
|
self.assertEqual('foo', callbacks.addressed(irc, msg), msg)
|
||||||
|
msg = ircmsgs.privmsg(nick, 'foo')
|
||||||
|
irc._tagMsg(msg)
|
||||||
|
self.assertEqual('foo', callbacks.addressed(irc, msg))
|
||||||
|
conf.supybot.reply.whenAddressedBy.chars.set(oldprefixchars)
|
||||||
|
msg = ircmsgs.privmsg('#foo', '%s::::: bar' % nick)
|
||||||
|
self.assertEqual('bar', callbacks.addressed(irc, msg))
|
||||||
|
msg = ircmsgs.privmsg('#foo', '%s: foo' % nick.upper())
|
||||||
|
self.assertEqual('foo', callbacks.addressed(irc, msg))
|
||||||
|
badmsg = ircmsgs.privmsg('#foo', '%s`: foo' % nick)
|
||||||
|
self.assertFalse(callbacks.addressed(irc, badmsg))
|
||||||
|
|
||||||
|
def testAddressedLegacy(self):
|
||||||
|
"""Checks callbacks.addressed still accepts the 'nick' argument
|
||||||
|
instead of 'irc'."""
|
||||||
irc = getTestIrc()
|
irc = getTestIrc()
|
||||||
oldprefixchars = str(conf.supybot.reply.whenAddressedBy.chars)
|
oldprefixchars = str(conf.supybot.reply.whenAddressedBy.chars)
|
||||||
nick = 'supybot'
|
nick = 'supybot'
|
||||||
@ -184,21 +212,28 @@ class FunctionsTestCase(SupyTestCase):
|
|||||||
'%s: foo' % nick.capitalize(), '%s: foo' % nick.upper()]
|
'%s: foo' % nick.capitalize(), '%s: foo' % nick.upper()]
|
||||||
inChannel = [ircmsgs.privmsg('#foo', s) for s in inChannel]
|
inChannel = [ircmsgs.privmsg('#foo', s) for s in inChannel]
|
||||||
badmsg = ircmsgs.privmsg('#foo', '%s:foo' % nick)
|
badmsg = ircmsgs.privmsg('#foo', '%s:foo' % nick)
|
||||||
self.assertFalse(callbacks.addressed(nick, badmsg))
|
with self.assertWarnsRegex(DeprecationWarning, 'Irc object instead'):
|
||||||
|
self.assertFalse(callbacks.addressed(nick, badmsg))
|
||||||
badmsg = ircmsgs.privmsg('#foo', '%s^: foo' % nick)
|
badmsg = ircmsgs.privmsg('#foo', '%s^: foo' % nick)
|
||||||
self.assertFalse(callbacks.addressed(nick, badmsg))
|
with self.assertWarnsRegex(DeprecationWarning, 'Irc object instead'):
|
||||||
|
self.assertFalse(callbacks.addressed(nick, badmsg))
|
||||||
for msg in inChannel:
|
for msg in inChannel:
|
||||||
self.assertEqual('foo', callbacks.addressed(nick, msg), msg)
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
self.assertEqual('foo', callbacks.addressed(nick, msg), msg)
|
||||||
msg = ircmsgs.privmsg(nick, 'foo')
|
msg = ircmsgs.privmsg(nick, 'foo')
|
||||||
irc._tagMsg(msg)
|
irc._tagMsg(msg)
|
||||||
self.assertEqual('foo', callbacks.addressed(nick, msg))
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
self.assertEqual('foo', callbacks.addressed(nick, msg))
|
||||||
conf.supybot.reply.whenAddressedBy.chars.set(oldprefixchars)
|
conf.supybot.reply.whenAddressedBy.chars.set(oldprefixchars)
|
||||||
msg = ircmsgs.privmsg('#foo', '%s::::: bar' % nick)
|
msg = ircmsgs.privmsg('#foo', '%s::::: bar' % nick)
|
||||||
self.assertEqual('bar', callbacks.addressed(nick, msg))
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
self.assertEqual('bar', callbacks.addressed(nick, msg))
|
||||||
msg = ircmsgs.privmsg('#foo', '%s: foo' % nick.upper())
|
msg = ircmsgs.privmsg('#foo', '%s: foo' % nick.upper())
|
||||||
self.assertEqual('foo', callbacks.addressed(nick, msg))
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
self.assertEqual('foo', callbacks.addressed(nick, msg))
|
||||||
badmsg = ircmsgs.privmsg('#foo', '%s`: foo' % nick)
|
badmsg = ircmsgs.privmsg('#foo', '%s`: foo' % nick)
|
||||||
self.assertFalse(callbacks.addressed(nick, badmsg))
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
self.assertFalse(callbacks.addressed(nick, badmsg))
|
||||||
|
|
||||||
def testAddressedReplyWhenNotAddressed(self):
|
def testAddressedReplyWhenNotAddressed(self):
|
||||||
msg1 = ircmsgs.privmsg('#foo', '@bar')
|
msg1 = ircmsgs.privmsg('#foo', '@bar')
|
||||||
|
Loading…
Reference in New Issue
Block a user