mirror of
https://github.com/jlu5/PyLink.git
synced 2024-11-27 21:19:31 +01:00
relay: add support for hiding users marked invisible or offline
First part of https://github.com/PyLink/pylink-discord/issues/19
This commit is contained in:
parent
0ffbaa8e5e
commit
71353a29c2
@ -472,6 +472,14 @@ def get_remote_user(irc, remoteirc, user, spawn_if_missing=True, times_tagged=0,
|
|||||||
if sbot:
|
if sbot:
|
||||||
return sbot.uids.get(remoteirc.name)
|
return sbot.uids.get(remoteirc.name)
|
||||||
|
|
||||||
|
# Ignore invisible users - used to skip joining users who are offline or invisible on
|
||||||
|
# external transports
|
||||||
|
hide = getattr(irc.users[user], '_invisible', False)
|
||||||
|
if hide:
|
||||||
|
log.debug('(%s) get_remote_user: ignoring user %s since they are marked invisible', irc.name,
|
||||||
|
user)
|
||||||
|
return
|
||||||
|
|
||||||
log.debug('(%s) Grabbing spawnlocks[%s] from thread %r in function %r', irc.name, irc.name,
|
log.debug('(%s) Grabbing spawnlocks[%s] from thread %r in function %r', irc.name, irc.name,
|
||||||
threading.current_thread().name, inspect.currentframe().f_code.co_name)
|
threading.current_thread().name, inspect.currentframe().f_code.co_name)
|
||||||
with spawnlocks[irc.name]:
|
with spawnlocks[irc.name]:
|
||||||
@ -1998,8 +2006,8 @@ def handle_kill(irc, numeric, command, args):
|
|||||||
|
|
||||||
# Target user was local.
|
# Target user was local.
|
||||||
else:
|
else:
|
||||||
# IMPORTANT: some IRCds (charybdis) don't send explicit QUIT messages
|
# Note: some IRCds (charybdis) don't send explicit QUIT messages
|
||||||
# for locally killed clients, while others (inspircd) do!
|
# for locally killed clients, while others (inspircd) do
|
||||||
# If we receive a user object in 'userdata' instead of None, it means
|
# If we receive a user object in 'userdata' instead of None, it means
|
||||||
# that the KILL hasn't been handled by a preceding QUIT message.
|
# that the KILL hasn't been handled by a preceding QUIT message.
|
||||||
if userdata:
|
if userdata:
|
||||||
@ -2011,6 +2019,22 @@ def handle_away(irc, numeric, command, args):
|
|||||||
iterate_all_present(irc, numeric,
|
iterate_all_present(irc, numeric,
|
||||||
lambda irc, remoteirc, user:
|
lambda irc, remoteirc, user:
|
||||||
remoteirc.away(user, args['text']))
|
remoteirc.away(user, args['text']))
|
||||||
|
|
||||||
|
# Check invisible flag, used by external transports to hide offline users
|
||||||
|
if not irc.is_internal_client(numeric):
|
||||||
|
invisible = args.get('now_invisible')
|
||||||
|
log.debug('(%s) relay.handle_away: invisible flag: %s', irc.name, invisible)
|
||||||
|
if invisible:
|
||||||
|
# User is now invisible - quit them
|
||||||
|
log.debug('(%s) relay.handle_away: quitting user %s due to invisible flag', irc.name, numeric)
|
||||||
|
handle_quit(irc, numeric, 'AWAY_NOW_INVISIBLE', {'text': "User has gone offline"})
|
||||||
|
elif invisible is False:
|
||||||
|
# User is no longer invisible - join them to all channels
|
||||||
|
log.debug('(%s) relay.handle_away: rejoining user %s due to invisible flag', irc.name, numeric)
|
||||||
|
for channel in irc.users[numeric].channels:
|
||||||
|
c = irc.channels[channel]
|
||||||
|
relay_joins(irc, channel, [numeric], c.ts, burst=True)
|
||||||
|
|
||||||
utils.add_hook(handle_away, 'AWAY')
|
utils.add_hook(handle_away, 'AWAY')
|
||||||
|
|
||||||
def handle_invite(irc, source, command, args):
|
def handle_invite(irc, source, command, args):
|
||||||
|
Loading…
Reference in New Issue
Block a user