store username and hostname from JOINs

This commit is contained in:
jesopo 2020-03-12 21:14:15 +00:00
parent 7c112424d5
commit 62b6a478d1
5 changed files with 62 additions and 26 deletions

View File

@ -21,7 +21,9 @@ class Server(Named):
def __init__(self, name: str):
self.name = name
self.nickname = ""
self.nickname = ""
self.username: Optional[str] = None
self.hostname: Optional[str] = None
self.modes: List[str] = []
self.motd: List[str] = []
@ -132,10 +134,19 @@ class Server(Named):
channel = Channel(line.params[0])
self.channels[channel_lower] = channel
self.channel_users[channel] = {}
if line.hostmask.username:
self.username = line.hostmask.username
if line.hostmask.hostname:
self.hostname = line.hostmask.hostname
if channel_lower in self.channels:
channel = self.channels[channel_lower]
user = self.get_user(line.hostmask.nickname)
if line.hostmask.username:
user.username = line.hostmask.username
if line.hostmask.hostname:
user.hostname = line.hostmask.hostname
self.user_join(channel, user)
def _handle_part(self, nickname, channel_name):

View File

@ -3,7 +3,9 @@ from .named import Named
class User(Named):
def __init__(self, nickname: str):
self.nickname = nickname
self.nickname = nickname
self.username: Optional[str] = None
self.hostname: Optional[str] = None
def __repr__(self) -> str:
return f"User(nickname={self.nickname!r})"

View File

@ -1,4 +1,4 @@
from .channel import *
from .nickname import *
from .mode import *
from .motd import *
from .channel import *
from .user import *
from .mode import *
from .motd import *

View File

@ -1,20 +0,0 @@
import unittest
import ircstates, irctokens
class NicknameTestChange(unittest.TestCase):
def test_self_change(self):
server = ircstates.Server("test")
server.parse_tokens(irctokens.tokenise("001 nickname"))
server.parse_tokens(irctokens.tokenise(":nickname NICK nickname2"))
self.assertEqual(server.nickname, "nickname2")
def test_other_change(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"))
self.assertIn("other", server.users)
server.parse_tokens(irctokens.tokenise(":other NICK other2"))
self.assertNotIn("other", server.users)
self.assertIn("other2", server.users)

43
test/user.py Normal file
View File

@ -0,0 +1,43 @@
import unittest
import ircstates, irctokens
class UserTestNicknameChange(unittest.TestCase):
def test_self_change(self):
server = ircstates.Server("test")
server.parse_tokens(irctokens.tokenise("001 nickname"))
server.parse_tokens(irctokens.tokenise(":nickname NICK nickname2"))
self.assertEqual(server.nickname, "nickname2")
def test_other_change(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"))
self.assertIn("other", server.users)
server.parse_tokens(irctokens.tokenise(":other NICK other2"))
self.assertNotIn("other", server.users)
self.assertIn("other2", server.users)
class UserTestUserHost(unittest.TestCase):
def test_both(self):
server = ircstates.Server("test")
server.parse_tokens(irctokens.tokenise("001 nickname"))
server.parse_tokens(
irctokens.tokenise(":nickname!user@host JOIN #chan"))
self.assertEqual(server.username, "user")
self.assertEqual(server.hostname, "host")
def test_user(self):
server = ircstates.Server("test")
server.parse_tokens(irctokens.tokenise("001 nickname"))
server.parse_tokens(irctokens.tokenise(":nickname!user JOIN #chan"))
self.assertEqual(server.username, "user")
self.assertIsNone(server.hostname)
def test_user(self):
server = ircstates.Server("test")
server.parse_tokens(irctokens.tokenise("001 nickname"))
server.parse_tokens(irctokens.tokenise(":nickname@host JOIN #chan"))
self.assertIsNone(server.username)
self.assertEqual(server.hostname, "host")