channel.list_modes should always have keys, even if empty

closes #1
This commit is contained in:
jesopo 2020-09-29 11:55:15 +00:00
parent e062b7b71f
commit 5a85e53485
3 changed files with 12 additions and 5 deletions

View File

@ -52,7 +52,5 @@ class Channel(object):
if (param is not None and
param in self.list_modes[char]):
self.list_modes[char].remove(param)
if not self.list_modes[char]:
del self.list_modes[char]
elif char in self.modes:
del self.modes[char]

View File

@ -195,6 +195,10 @@ class Server(object):
channel = self.create_channel(
Name(line.params[0], channel_lower)
)
#TODO: put this somewhere better
for mode in self.isupport.chanmodes.a_modes:
channel.list_modes[mode] = []
self.channels[channel_lower] = channel
self._self_hostmask(line.hostmask)
@ -534,8 +538,7 @@ class Server(object):
channel = self.channels[channel_lower]
if mode in channel._list_modes_temp:
mlist = channel._list_modes_temp.pop(mode)
for mask in mlist:
channel.add_mode(mode, mask, True)
channel.list_modes[mode] = mlist
@line_handler(RPL_BANLIST)
def _handle_banlist(self, line: Line) -> Emit:

View File

@ -46,10 +46,16 @@ class ModeTestChannelList(unittest.TestCase):
server = ircstates.Server("test")
server.parse_tokens(irctokens.tokenise("001 nickname *"))
server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan"))
server.parse_tokens(irctokens.tokenise("MODE #chan +b asd!*@*"))
channel = server.channels["#chan"]
self.assertEqual(channel.list_modes, {"b": []})
server.parse_tokens(irctokens.tokenise("MODE #chan +b asd!*@*"))
self.assertEqual(channel.list_modes, {"b": ["asd!*@*"]})
server.parse_tokens(irctokens.tokenise("MODE #chan -b asd!*@*"))
self.assertEqual(channel.list_modes, {"b": []})
def test_remove(self):
server = ircstates.Server("test")
server.parse_tokens(irctokens.tokenise("001 nickname *"))