From d20381336a8b81e5815658f2cbbc1a3017f767d2 Mon Sep 17 00:00:00 2001 From: Jeremy Fincher Date: Sat, 23 Oct 2004 19:26:53 +0000 Subject: [PATCH] Bugfix for nick.atEnd taking precedence over prefixChars. --- src/callbacks.py | 14 +++++++++----- test/test_callbacks.py | 7 +++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/callbacks.py b/src/callbacks.py index eee5480fd..9b443fe07 100644 --- a/src/callbacks.py +++ b/src/callbacks.py @@ -83,6 +83,8 @@ def addressed(nick, msg, prefixChars=None, nicks=None, assert msg.command == 'PRIVMSG' (target, payload) = msg.args + if not payload: + return '' if prefixChars is None: prefixChars = get(conf.supybot.reply.whenAddressedBy.chars) if whenAddressedByNick is None: @@ -92,6 +94,12 @@ def addressed(nick, msg, prefixChars=None, nicks=None, whenAddressedByNickAtEnd = get(r) if prefixStrings is None: prefixStrings = get(conf.supybot.reply.whenAddressedBy.strings) + # We have to check this before nicks -- try "@google supybot" with supybot + # and whenAddressedBy.nick.atEnd on to see why. + if any(payload.startswith, prefixStrings): + return stripPrefixStrings(payload) + elif payload[0] in prefixChars: + return payload[1:].strip() if nicks is None: nicks = get(conf.supybot.reply.whenAddressedBy.nicks) nicks = map(ircutils.toLower, nicks) @@ -128,11 +136,7 @@ def addressed(nick, msg, prefixChars=None, nicks=None, # There should be some separator between the nick and the # previous alphanumeric character. return possiblePayload - if payload and any(payload.startswith, prefixStrings): - return stripPrefixStrings(payload) - elif payload and payload[0] in prefixChars: - return payload[1:].strip() - elif conf.supybot.reply.whenNotAddressed(): + if conf.supybot.reply.whenNotAddressed(): return payload else: return '' diff --git a/test/test_callbacks.py b/test/test_callbacks.py index 00ab3376e..bb972d3da 100644 --- a/test/test_callbacks.py +++ b/test/test_callbacks.py @@ -212,6 +212,13 @@ class FunctionsTestCase(SupyTestCase): self.assertEqual(callbacks.addressed('bar', msg, whenAddressedByNickAtEnd=True), 'baz') + + def testAddressedPrefixCharsTakePrecedenceOverNickAtEnd(self): + msg = ircmsgs.privmsg('#foo', '@echo foo') + self.assertEqual(callbacks.addressed('foo', msg, + whenAddressedByNickAtEnd=True, + prefixChars='@'), + 'echo foo') def testReply(self):