simplify pruning quit/parted users
This commit is contained in:
parent
36e0db7ab5
commit
8ce7bd17ff
3 changed files with 13 additions and 12 deletions
|
@ -40,7 +40,6 @@ class Server(IRCObject.Object):
|
||||||
self.batches = {} # type: typing.Dict[str, IRCLine.IRCBatch]
|
self.batches = {} # type: typing.Dict[str, IRCLine.IRCBatch]
|
||||||
|
|
||||||
self.users = {} # type: typing.Dict[str, IRCUser.User]
|
self.users = {} # type: typing.Dict[str, IRCUser.User]
|
||||||
self.new_users = set([]) #type: typing.Set[IRCUser.User]
|
|
||||||
self.channels = IRCChannels.Channels(self, self.bot, self.events)
|
self.channels = IRCChannels.Channels(self, self.bot, self.events)
|
||||||
self.own_modes = {} # type: typing.Dict[str, typing.Optional[str]]
|
self.own_modes = {} # type: typing.Dict[str, typing.Optional[str]]
|
||||||
|
|
||||||
|
@ -176,7 +175,6 @@ class Server(IRCObject.Object):
|
||||||
user_id = self.get_user_id(nickname)
|
user_id = self.get_user_id(nickname)
|
||||||
new_user = IRCUser.User(nickname, user_id, self, self.bot)
|
new_user = IRCUser.User(nickname, user_id, self, self.bot)
|
||||||
self.users[new_user.nickname_lower] = new_user
|
self.users[new_user.nickname_lower] = new_user
|
||||||
self.new_users.add(new_user)
|
|
||||||
|
|
||||||
user = self.users.get(self.irc_lower(nickname), None)
|
user = self.users.get(self.irc_lower(nickname), None)
|
||||||
if user:
|
if user:
|
||||||
|
@ -204,6 +202,12 @@ class Server(IRCObject.Object):
|
||||||
for channel in user.channels:
|
for channel in user.channels:
|
||||||
channel.remove_user(user)
|
channel.remove_user(user)
|
||||||
|
|
||||||
|
def quit_user(self, user: IRCUser.User):
|
||||||
|
self.remove_user(user)
|
||||||
|
def part_user(self, channel: IRCChannel.Channel, user: IRCUser.User):
|
||||||
|
user.part_channel(channel)
|
||||||
|
channel.remove_user(user)
|
||||||
|
|
||||||
def is_channel(self, name: str) -> bool:
|
def is_channel(self, name: str) -> bool:
|
||||||
return name[0] in self.channel_types
|
return name[0] in self.channel_types
|
||||||
|
|
||||||
|
@ -234,10 +238,12 @@ class Server(IRCObject.Object):
|
||||||
line=IRCLine.parse_line(line))
|
line=IRCLine.parse_line(line))
|
||||||
self.check_users()
|
self.check_users()
|
||||||
def check_users(self):
|
def check_users(self):
|
||||||
for user in self.new_users:
|
prune: typing.List[IRCUser.User] = []
|
||||||
|
for user in self.users.values():
|
||||||
if not len(user.channels):
|
if not len(user.channels):
|
||||||
|
prune.append(user)
|
||||||
|
for user in prune:
|
||||||
self.remove_user(user)
|
self.remove_user(user)
|
||||||
self.new_users.clear()
|
|
||||||
|
|
||||||
def until_next_ping(self) -> typing.Optional[float]:
|
def until_next_ping(self) -> typing.Optional[float]:
|
||||||
if self.ping_sent:
|
if self.ping_sent:
|
||||||
|
|
|
@ -99,10 +99,7 @@ def part(events, event):
|
||||||
user = event["server"].get_user(event["line"].source.nickname)
|
user = event["server"].get_user(event["line"].source.nickname)
|
||||||
reason = event["line"].args.get(1)
|
reason = event["line"].args.get(1)
|
||||||
|
|
||||||
channel.remove_user(user)
|
event["server"].part_user(channel, user)
|
||||||
user.part_channel(channel)
|
|
||||||
if not len(user.channels):
|
|
||||||
event["server"].remove_user(user)
|
|
||||||
|
|
||||||
if not event["server"].is_own_nickname(event["line"].source.nickname):
|
if not event["server"].is_own_nickname(event["line"].source.nickname):
|
||||||
events.on("received.part").call(channel=channel, reason=reason,
|
events.on("received.part").call(channel=channel, reason=reason,
|
||||||
|
@ -148,8 +145,6 @@ def kick(events, event):
|
||||||
|
|
||||||
channel.remove_user(target_user)
|
channel.remove_user(target_user)
|
||||||
target_user.part_channel(channel)
|
target_user.part_channel(channel)
|
||||||
if not len(target_user.channels):
|
|
||||||
event["server"].remove_user(target_user)
|
|
||||||
|
|
||||||
def rename(events, event):
|
def rename(events, event):
|
||||||
old_name = event["line"].args[0]
|
old_name = event["line"].args[0]
|
||||||
|
|
|
@ -27,9 +27,9 @@ def quit(events, event):
|
||||||
if (not event["server"].is_own_nickname(nickname) and
|
if (not event["server"].is_own_nickname(nickname) and
|
||||||
not event["line"].source.hostmask == "*"):
|
not event["line"].source.hostmask == "*"):
|
||||||
user = event["server"].get_user(nickname)
|
user = event["server"].get_user(nickname)
|
||||||
|
event["server"].quit_user(user)
|
||||||
events.on("received.quit").call(reason=reason, user=user,
|
events.on("received.quit").call(reason=reason, user=user,
|
||||||
server=event["server"])
|
server=event["server"])
|
||||||
event["server"].remove_user(user)
|
|
||||||
else:
|
else:
|
||||||
event["server"].disconnect()
|
event["server"].disconnect()
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in a new issue