mirror of https://github.com/jesopo/ircstates
server.modes and channel_user.modes should be sets
This commit is contained in:
parent
038c59659f
commit
d865ea3253
|
@ -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]
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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")
|
||||
|
|
12
test/mode.py
12
test/mode.py
|
@ -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"})
|
||||
|
|
Loading…
Reference in New Issue