mirror of https://github.com/jesopo/ircstates
record when we first saw a user in a channel and optionally when they JOINed
This commit is contained in:
parent
3565259791
commit
e5a7871fd9
|
@ -1,5 +1,6 @@
|
|||
from typing import List, Set
|
||||
from .names import Name
|
||||
from typing import List, Optional, Set
|
||||
from .names import Name
|
||||
from pendulum import DateTime, now
|
||||
|
||||
class ChannelUser(object):
|
||||
def __init__(self,
|
||||
|
@ -8,7 +9,9 @@ class ChannelUser(object):
|
|||
self._nickname = nickname
|
||||
self._channel_name = channel_name
|
||||
|
||||
self.modes: Set[str] = set()
|
||||
self.modes: Set[str] = set()
|
||||
self.since = now("utc")
|
||||
self.joined: Optional[DateTime] = None
|
||||
|
||||
def __repr__(self) -> str:
|
||||
outs: List[str] = [self.channel, self.nickname]
|
||||
|
|
|
@ -222,7 +222,8 @@ class Server(object):
|
|||
user.account = account
|
||||
user.realname = realname
|
||||
|
||||
self._user_join(channel, user)
|
||||
channel_user = self._user_join(channel, user)
|
||||
channel_user.joined = now("utc")
|
||||
return emit
|
||||
|
||||
def _user_part(self, line: Line,
|
||||
|
|
|
@ -5,19 +5,25 @@ from freezegun import freeze_time
|
|||
|
||||
class ChannelTestJoin(unittest.TestCase):
|
||||
def test_self_join(self):
|
||||
dt = pendulum.datetime(2021, 9, 6, 2, 55, 22)
|
||||
server = ircstates.Server("test")
|
||||
server.parse_tokens(irctokens.tokenise("001 nickname *"))
|
||||
server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan"))
|
||||
with freeze_time("2021-09-06 02:55:22"):
|
||||
server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan"))
|
||||
|
||||
self.assertIn("#chan", server.channels)
|
||||
self.assertIn("nickname", server.users)
|
||||
self.assertEqual(len(server.users), 1)
|
||||
self.assertEqual(len(server.channels), 1)
|
||||
|
||||
user = server.users["nickname"]
|
||||
user = server.users["nickname"]
|
||||
channel = server.channels["#chan"]
|
||||
self.assertIn(user.nickname_lower, channel.users)
|
||||
|
||||
channel_user = channel.users[user.nickname_lower]
|
||||
self.assertEqual(user.channels, set([channel.name_lower]))
|
||||
self.assertEqual(channel_user.since, dt)
|
||||
self.assertEqual(channel_user.joined, dt)
|
||||
|
||||
def test_other_join(self):
|
||||
server = ircstates.Server("test")
|
||||
|
@ -122,23 +128,33 @@ class ChannelTestCreation(unittest.TestCase):
|
|||
|
||||
class ChannelTestNAMES(unittest.TestCase):
|
||||
def test(self):
|
||||
dt_1 = pendulum.datetime(2021, 9, 6, 2, 57, 22)
|
||||
dt_2 = pendulum.datetime(2021, 9, 6, 2, 58, 22)
|
||||
|
||||
server = ircstates.Server("test")
|
||||
server.parse_tokens(irctokens.tokenise("001 nickname *"))
|
||||
server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan"))
|
||||
server.parse_tokens(irctokens.tokenise("353 * * #chan :nickname @+other"))
|
||||
with freeze_time("2021-09-06 02:57:22"):
|
||||
server.parse_tokens(irctokens.tokenise(":nickname JOIN #chan"))
|
||||
with freeze_time("2021-09-06 02:58:22"):
|
||||
server.parse_tokens(irctokens.tokenise("353 * * #chan :nickname @+other"))
|
||||
|
||||
self.assertIn("nickname", server.users)
|
||||
self.assertIn("other", server.users)
|
||||
|
||||
user = server.users["other"]
|
||||
channel = server.channels["#chan"]
|
||||
channel_user_1 = channel.users[user.nickname_lower]
|
||||
channel_user_2 = channel.users[server.nickname_lower]
|
||||
channel_user_1 = channel.users[server.nickname_lower]
|
||||
channel_user_2 = channel.users[user.nickname_lower]
|
||||
|
||||
self.assertEqual(channel.users, {
|
||||
user.nickname_lower: channel_user_1,
|
||||
server.nickname_lower: channel_user_2})
|
||||
server.nickname_lower: channel_user_1,
|
||||
user.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_2.modes, {"o", "v"})
|
||||
|
||||
self.assertEqual(channel_user_1.since, dt_1)
|
||||
self.assertEqual(channel_user_2.since, dt_2)
|
||||
|
||||
def test_userhost_in_names(self):
|
||||
server = ircstates.Server("test")
|
||||
|
|
Loading…
Reference in New Issue