From f143e977d68f6441116fae0ad08bbccfc854ab9a Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sun, 8 Sep 2019 14:46:56 +0200 Subject: [PATCH] Interpret empty server tag values as missing tag values. As required by https://ircv3.net/specs/extensions/message-tags --- src/ircmsgs.py | 7 ++++++- test/test_ircmsgs.py | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/ircmsgs.py b/src/ircmsgs.py index 760e7d7e5..0527b5b86 100644 --- a/src/ircmsgs.py +++ b/src/ircmsgs.py @@ -73,7 +73,12 @@ def parse_server_tags(s): server_tags[tag] = None else: (key, value) = tag.split('=', 1) - server_tags[key] = unescape_server_tag_value(value) + value = unescape_server_tag_value(value) + if value == '': + # "Implementations MUST interpret empty tag values (e.g. foo=) + # as equivalent to missing tag values (e.g. foo)." + value = None + server_tags[key] = value return server_tags def format_server_tags(server_tags): parts = [] diff --git a/test/test_ircmsgs.py b/test/test_ircmsgs.py index 49cce6b7b..44aec044c 100644 --- a/test/test_ircmsgs.py +++ b/test/test_ircmsgs.py @@ -147,6 +147,14 @@ class IrcMsgTestCase(SupyTestCase): self.assertEqual(m.args, ('me', 'Hello')) self.assertEqual(str(m), s + '\n') + s = '@foo=;bar=baz;qux= ' \ + ':nick!ident@host.com PRIVMSG me :Hello' + m = ircmsgs.IrcMsg(s) + self.assertEqual(m.server_tags, { + 'foo': None, + 'bar': 'baz', + 'qux': None}) + def testTime(self): before = time.time() msg = ircmsgs.IrcMsg('PRIVMSG #foo :foo')