server.modes and channel_user.modes should be sets

This commit is contained in:
jesopo 2021-08-16 20:18:32 +00:00
parent 038c59659f
commit d865ea3253
4 changed files with 18 additions and 22 deletions

View File

@ -1,4 +1,4 @@
from typing import List
from typing import List, Set
from .names import Name
class ChannelUser(object):
@ -8,7 +8,7 @@ class ChannelUser(object):
self._nickname = nickname
self._channel_name = channel_name
self.modes: List[str] = []
self.modes: Set[str] = set()
def __repr__(self) -> str:
outs: List[str] = [self.channel, self.nickname]

View File

@ -40,7 +40,7 @@ class Server(object):
self.ip: Optional[str] = None
self.registered = False
self.modes: List[str] = []
self.modes: Set[str] = set()
self.motd: List[str] = []
self._decoder = StatefulDecoder()
@ -359,8 +359,7 @@ class Server(object):
self._self_hostmask(hostmask)
for mode in modes:
if not mode in channel_user.modes:
channel_user.modes.append(mode)
channel_user.modes.add(mode)
return emit
@line_handler(RPL_CREATIONTIME)
@ -428,10 +427,9 @@ class Server(object):
user = self.users[nickname_lower]
channel_user = channel.users[user.nickname_lower]
if add:
if not char in channel_user.modes:
channel_user.modes.append(char)
elif char in channel_user.modes:
channel_user.modes.remove(char)
channel_user.modes.add(char)
else:
channel_user.modes.discard(char)
else:
has_arg = False
is_list = False
@ -481,10 +479,9 @@ class Server(object):
add = mode[0] == "+"
char = mode[1]
if add:
if not char in self.modes:
self.modes.append(char)
elif char in self.modes:
self.modes.remove(char)
self.modes.add(char)
else:
self.modes.discard(char)
elif target_lower in self.channels:
channel = self.channels[self.casefold(target)]
emit.channel = channel
@ -516,8 +513,7 @@ class Server(object):
# our own user modes, "MODE nickname" response (sometimes on-connect?)
def _handle_umodeis(self, line: Line) -> Emit:
for char in line.params[1].lstrip("+"):
if not char in self.modes:
self.modes.append(char)
self.modes.add(char)
return self._emit()
def _mode_list(self,

View File

@ -134,7 +134,7 @@ class ChannelTestNAMES(unittest.TestCase):
user.nickname_lower: channel_user_1,
server.nickname_lower: channel_user_2})
self.assertEqual(user.channels, set([channel.name_lower]))
self.assertEqual(channel_user_1.modes, ["o", "v"])
self.assertEqual(channel_user_1.modes, {"o", "v"})
def test_userhost_in_names(self):
server = ircstates.Server("test")

View File

@ -7,14 +7,14 @@ class ModeTestUMode(unittest.TestCase):
server = ircstates.Server("test")
server.parse_tokens(irctokens.tokenise("001 nickname *"))
server.parse_tokens(irctokens.tokenise("MODE nickname +i"))
self.assertEqual(server.modes, ["i"])
self.assertEqual(server.modes, {"i"})
def test_remove(self):
server = ircstates.Server("test")
server.parse_tokens(irctokens.tokenise("001 nickname *"))
server.parse_tokens(irctokens.tokenise("MODE nickname +i"))
server.parse_tokens(irctokens.tokenise("MODE nickname -i"))
self.assertEqual(server.modes, [])
self.assertEqual(server.modes, set())
class ModeTestChannelPrefix(unittest.TestCase):
def test_add(self):
@ -26,7 +26,7 @@ class ModeTestChannelPrefix(unittest.TestCase):
user = server.users["nickname"]
channel = server.channels["#chan"]
channel_user = channel.users[user.nickname_lower]
self.assertEqual(channel_user.modes, ["o", "v"])
self.assertEqual(channel_user.modes, {"o", "v"})
def test_remove(self):
server = ircstates.Server("test")
@ -39,7 +39,7 @@ class ModeTestChannelPrefix(unittest.TestCase):
user = server.users["nickname"]
channel = server.channels["#chan"]
channel_user = channel.users[user.nickname_lower]
self.assertEqual(channel_user.modes, [])
self.assertEqual(channel_user.modes, set())
class ModeTestChannelList(unittest.TestCase):
def test_add(self):
@ -181,10 +181,10 @@ class ModeTestUserNumeric(unittest.TestCase):
server = ircstates.Server("test")
server.parse_tokens(irctokens.tokenise("001 nickname *"))
server.parse_tokens(irctokens.tokenise("221 * +iw"))
self.assertEqual(server.modes, ["i", "w"])
self.assertEqual(server.modes, {"i", "w"})
def test_without_plus(self):
server = ircstates.Server("test")
server.parse_tokens(irctokens.tokenise("001 nickname *"))
server.parse_tokens(irctokens.tokenise("221 * iw"))
self.assertEqual(server.modes, ["i", "w"])
self.assertEqual(server.modes, {"i", "w"})