mirror of https://github.com/jesopo/ircstates
parent
566b8ec8cd
commit
4d14d67d4b
|
@ -32,6 +32,12 @@ class Channel(object):
|
|||
def name_lower(self) -> str:
|
||||
return self._name.folded
|
||||
|
||||
def change_name(self,
|
||||
normal: str,
|
||||
folded: str):
|
||||
self._name.normal = normal
|
||||
self._name.folded = folded
|
||||
|
||||
def add_mode(self,
|
||||
char: str,
|
||||
param: Optional[str],
|
||||
|
|
|
@ -779,6 +779,23 @@ class Server(object):
|
|||
user.realname = realname
|
||||
return emit
|
||||
|
||||
@line_handler("RENAME")
|
||||
def _handle_RENAME(self, line: Line) -> Emit:
|
||||
source_fold = self.casefold(line.params[0])
|
||||
rename = line.params[1]
|
||||
rename_fold = self.casefold(rename)
|
||||
|
||||
if source_fold in self.channels:
|
||||
channel = self.channels.pop(source_fold)
|
||||
|
||||
channel.change_name(rename, rename_fold)
|
||||
for nickname in channel.users.keys():
|
||||
user = self.users[nickname]
|
||||
user.channels.remove(source_fold)
|
||||
user.channels.add(rename_fold)
|
||||
|
||||
self.channels[rename_fold] = channel
|
||||
|
||||
@line_handler(RPL_AWAY)
|
||||
# sent in response to a command directed at a user who is marked as away
|
||||
def _handle_RPL_AWAY(self, line: Line) -> Emit:
|
||||
|
|
|
@ -162,3 +162,22 @@ class ChannelNICKAfterJoin(unittest.TestCase):
|
|||
self.assertEqual(channel.users, {user.nickname_lower: channel_user})
|
||||
self.assertEqual(channel_user.nickname, "Nickname2")
|
||||
self.assertEqual(channel_user.nickname_lower, "nickname2")
|
||||
|
||||
class ChannelRENAME(unittest.TestCase):
|
||||
def test(self):
|
||||
server = ircstates.Server("test")
|
||||
server.parse_tokens(irctokens.tokenise("001 nickname *"))
|
||||
server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan"))
|
||||
server.parse_tokens(irctokens.tokenise(":other JOIN #chan"))
|
||||
|
||||
user = server.users["nickname"]
|
||||
channel = server.channels["#chan"]
|
||||
|
||||
server.parse_tokens(irctokens.tokenise(":nickname RENAME #chan #chan2 *"))
|
||||
|
||||
self.assertEqual(channel.name, "#chan2")
|
||||
self.assertEqual(set(channel.users.keys()), {"nickname", "other"})
|
||||
self.assertEqual(user.channels, {"#chan2"})
|
||||
self.assertNotIn("#chan", server.channels)
|
||||
self.assertIn("#chan2", server.channels)
|
||||
self.assertEqual(len(server.channels), 1)
|
||||
|
|
Loading…
Reference in New Issue