mirror of https://github.com/jesopo/ircstates
support RPL_LOGGEDIN and RPL_LOGGEDOUT (with tests)
This commit is contained in:
parent
5c5c6fca2b
commit
d0a3aed19f
|
@ -118,6 +118,13 @@ class Server(Named):
|
|||
def prepare_whox(self, target: str) -> Line:
|
||||
return build("WHO", [target, f"n%ahinrtu,{WHO_TYPE}"])
|
||||
|
||||
def _self_hostmask(self, hostmask: Hostmask):
|
||||
self.nickname = hostmask.nickname
|
||||
if hostmask.username:
|
||||
self.username = hostmask.username
|
||||
if hostmask.hostname:
|
||||
self.hostname = hostmask.hostname
|
||||
|
||||
def _emit(self) -> Emit:
|
||||
return Emit()
|
||||
|
||||
|
@ -195,10 +202,8 @@ class Server(Named):
|
|||
channel = self._create_channel(line.params[0],
|
||||
channel_lower)
|
||||
self.channels[channel_lower] = channel
|
||||
if line.hostmask.username:
|
||||
self.username = line.hostmask.username
|
||||
if line.hostmask.hostname:
|
||||
self.hostname = line.hostmask.hostname
|
||||
|
||||
self._self_hostmask(line.hostmask)
|
||||
if extended:
|
||||
self.account = account
|
||||
self.realname = realname
|
||||
|
@ -348,13 +353,11 @@ class Server(Named):
|
|||
|
||||
if hostmask.username:
|
||||
user.username = hostmask.username
|
||||
if nickname_lower == self.nickname_lower:
|
||||
self.username = hostmask.username
|
||||
if hostmask.hostname:
|
||||
user.hostname = hostmask.hostname
|
||||
if nickname_lower == self.nickname_lower:
|
||||
self.hostname = hostmask.hostname
|
||||
|
||||
if nickname_lower == self.nickname_lower:
|
||||
self._self_hostmask(hostmask)
|
||||
|
||||
for mode in modes:
|
||||
if not mode in channel_user.modes:
|
||||
|
@ -504,10 +507,7 @@ class Server(Named):
|
|||
nickname_lower = self.casefold(line.hostmask.nickname)
|
||||
if nickname_lower == self.nickname_lower:
|
||||
emit.self_source = True
|
||||
if line.hostmask.username:
|
||||
self.username = line.hostmask.username
|
||||
if line.hostmask.hostname:
|
||||
self.hostname = line.hostmask.hostname
|
||||
self._self_hostmask(line.hostmask)
|
||||
|
||||
if nickname_lower in self.users:
|
||||
user = self.users[nickname_lower]
|
||||
|
@ -733,3 +733,22 @@ class Server(Named):
|
|||
key in self.available_caps):
|
||||
self.agreed_caps.append(key)
|
||||
return emit
|
||||
|
||||
@line_handler(RPL_LOGGEDIN)
|
||||
def _handle_loggedin(self, line: Line) -> Emit:
|
||||
hostmask_str = line.params[1]
|
||||
hostmask = Hostmask.from_source(hostmask_str)
|
||||
account = line.params[2]
|
||||
|
||||
self.account = account
|
||||
self._self_hostmask(hostmask)
|
||||
return self._emit()
|
||||
|
||||
@line_handler(RPL_LOGGEDOUT)
|
||||
def _handle_loggedout(self, line: Line) -> Emit:
|
||||
hostmask_str = line.params[1]
|
||||
hostmask = Hostmask.from_source(hostmask_str)
|
||||
|
||||
self.account = None
|
||||
self._self_hostmask(hostmask)
|
||||
return self._emit()
|
||||
|
|
|
@ -7,3 +7,4 @@ from .isupport import *
|
|||
from .casemap import *
|
||||
from .emit import *
|
||||
from .who import *
|
||||
from .sasl import *
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
import unittest
|
||||
import ircstates, irctokens
|
||||
|
||||
class SASLTestAccount(unittest.TestCase):
|
||||
def test_loggedin(self):
|
||||
server = ircstates.Server("test")
|
||||
server.parse_tokens(irctokens.tokenise("900 * nick!user@host account"))
|
||||
|
||||
self.assertEqual(server.nickname, "nick")
|
||||
self.assertEqual(server.username, "user")
|
||||
self.assertEqual(server.hostname, "host")
|
||||
self.assertEqual(server.account, "account")
|
||||
|
||||
def test_loggedout(self):
|
||||
server = ircstates.Server("test")
|
||||
server.parse_tokens(irctokens.tokenise("900 * nick!user@host account"))
|
||||
server.parse_tokens(irctokens.tokenise("901 * nick1!user1@host1"))
|
||||
|
||||
self.assertEqual(server.nickname, "nick1")
|
||||
self.assertEqual(server.username, "user1")
|
||||
self.assertEqual(server.hostname, "host1")
|
||||
self.assertEqual(server.account, None)
|
Loading…
Reference in New Issue