Don't remove users if they're playing
Instead mark them as a ghost, and remove them at end of game should they still be gone.
This commit is contained in:
parent
750aa757e3
commit
8c8823ebfe
17
src/users.py
17
src/users.py
@ -10,6 +10,7 @@ import botconfig
|
|||||||
Bot = None # bot instance
|
Bot = None # bot instance
|
||||||
|
|
||||||
_users = set()
|
_users = set()
|
||||||
|
_ghosts = set()
|
||||||
|
|
||||||
_arg_msg = "(nick={0!r}, ident={1!r}, host={2!r}, realname={3!r}, account={4!r}, allow_bot={5})"
|
_arg_msg = "(nick={0!r}, ident={1!r}, host={2!r}, realname={3!r}, account={4!r}, allow_bot={5})"
|
||||||
|
|
||||||
@ -184,11 +185,25 @@ def parse_rawnick_as_dict(rawnick, *, default=None):
|
|||||||
|
|
||||||
def _cleanup_user(evt, var, user):
|
def _cleanup_user(evt, var, user):
|
||||||
"""Removes a user from our global tracking set once it has left all channels."""
|
"""Removes a user from our global tracking set once it has left all channels."""
|
||||||
_users.discard(user)
|
if var.PHASE not in var.GAME_PHASES or user not in var.ALL_PLAYERS:
|
||||||
|
_users.discard(user)
|
||||||
|
elif var.PHASE in var.GAME_PHASES and user in var.ALL_PLAYERS:
|
||||||
|
_ghosts.add(user)
|
||||||
|
|
||||||
|
def _reset(evt, var):
|
||||||
|
"""Cleans up users that left during game during game end."""
|
||||||
|
for user in _ghosts:
|
||||||
|
if not user.channels:
|
||||||
|
_users.discard(user)
|
||||||
|
_ghosts.clear()
|
||||||
|
|
||||||
# Can't use @event_listener decorator since src/decorators.py imports us
|
# Can't use @event_listener decorator since src/decorators.py imports us
|
||||||
# (meaning decorator isn't defined at the point in time we are run)
|
# (meaning decorator isn't defined at the point in time we are run)
|
||||||
events.add_listener("cleanup_user", _cleanup_user)
|
events.add_listener("cleanup_user", _cleanup_user)
|
||||||
|
events.add_listener("reset", _reset)
|
||||||
|
# FIXME: when there is a swap_player event, we need a listener for that as well
|
||||||
|
# to remove the swapped player from _ghosts if they're in there (helps prevent
|
||||||
|
# duplicate user lookup bugs where the ghost and new player have the same nick)
|
||||||
|
|
||||||
class User(IRCContext):
|
class User(IRCContext):
|
||||||
|
|
||||||
|
@ -2969,8 +2969,9 @@ def return_to_village(var, chan, target, *, show_message):
|
|||||||
with var.GRAVEYARD_LOCK:
|
with var.GRAVEYARD_LOCK:
|
||||||
temp = target.lower()
|
temp = target.lower()
|
||||||
if temp.nick in var.DISCONNECTED:
|
if temp.nick in var.DISCONNECTED:
|
||||||
if (temp.account is not None and users.equals(temp.account, account) or
|
account, hostmask, when, what = var.DISCONNECTED[temp.nick]
|
||||||
temp.userhost is not None and users.equals(temp.userhost, hostmask) and not var.ACCOUNTS_ONLY):
|
if ((not var.DISABLE_ACCOUNTS and temp.account is not None and users.equals(temp.account, account)) or
|
||||||
|
(not var.ACCOUNTS_ONLY and temp.userhost is not None and users.equals(temp.userhost, hostmask))):
|
||||||
|
|
||||||
del var.DISCONNECTED[temp.nick]
|
del var.DISCONNECTED[temp.nick]
|
||||||
var.LAST_SAID_TIME[temp.nick] = datetime.now()
|
var.LAST_SAID_TIME[temp.nick] = datetime.now()
|
||||||
|
Loading…
Reference in New Issue
Block a user