mirror of
https://github.com/jlu5/PyLink.git
synced 2024-12-24 19:52:53 +01:00
core: Rewrite WHOIS handlers to simply listen to a custom hook (PYLINK_CUSTOM_WHOIS)
This commit is contained in:
parent
a2a009cac4
commit
4e8de60005
@ -140,18 +140,9 @@ def handle_whois(irc, source, command, args):
|
|||||||
# <- 317 GL GL 15 1437632859 :seconds idle, signon time
|
# <- 317 GL GL 15 1437632859 :seconds idle, signon time
|
||||||
f(server, 317, source, "%s 0 %s :seconds idle, signon time" % (nick, user.ts))
|
f(server, 317, source, "%s 0 %s :seconds idle, signon time" % (nick, user.ts))
|
||||||
|
|
||||||
for func in world.whois_handlers:
|
# Call custom WHOIS handlers via the PYLINK_CUSTOM_WHOIS hook.
|
||||||
# Iterate over custom plugin WHOIS handlers. They return a tuple
|
irc.callHooks([source, 'PYLINK_CUSTOM_WHOIS', {'target': target, 'server': server}])
|
||||||
# or list with two arguments: the numeric, and the text to send.
|
|
||||||
try:
|
|
||||||
res = func(irc, target)
|
|
||||||
if res:
|
|
||||||
num, text = res
|
|
||||||
f(server, num, source, text)
|
|
||||||
except Exception as e:
|
|
||||||
# Again, we wouldn't want this to crash our service, in case
|
|
||||||
# something goes wrong!
|
|
||||||
log.exception('(%s) Error caught in WHOIS handler: %s', irc.name, e)
|
|
||||||
# 318: End of WHOIS.
|
# 318: End of WHOIS.
|
||||||
f(server, 318, source, "%s :End of /WHOIS list" % nick)
|
f(server, 318, source, "%s :End of /WHOIS list" % nick)
|
||||||
utils.add_hook(handle_whois, 'WHOIS')
|
utils.add_hook(handle_whois, 'WHOIS')
|
||||||
|
@ -46,20 +46,7 @@ The third option, `WHOIS` handlers, are a lot more limited compared to the other
|
|||||||
|
|
||||||
WHOIS replies are special in that any plugins wishing to add lines to a WHOIS reply must do so after the regular WHOIS lines (handled by the core), but before a special "End of WHOIS" line. This means that the regular hooks mechanism, which are only called after core handling, doesn't work here.
|
WHOIS replies are special in that any plugins wishing to add lines to a WHOIS reply must do so after the regular WHOIS lines (handled by the core), but before a special "End of WHOIS" line. This means that the regular hooks mechanism, which are only called after core handling, doesn't work here.
|
||||||
|
|
||||||
An example of a plugin WHOIS handler is in the relay plugin. WHOIS handler functions are added to the `world.whois_handlers` list using a simple `append()`. They should return either nothing or a two-length list: the first item being the WHOIS numeric, and the second the raw whois text.
|
An example of a plugin WHOIS handler is in the [relay plugin](../../plugins/relay.py) (search for `relayWhoisHandler`. WHOIS handler functions are added to the `world.whois_handlers` list using a simple `append()`. They should return either nothing or a list of two-length tuples: the first item being the WHOIS numeric, and the second the raw whois text.
|
||||||
|
|
||||||
```
|
|
||||||
def relayWhoisHandler(irc, target):
|
|
||||||
user = irc.users[target]
|
|
||||||
orig = getLocalUser(irc, target)
|
|
||||||
if orig:
|
|
||||||
network, remoteuid = orig
|
|
||||||
remotenick = world.networkobjects[network].users[remoteuid].nick
|
|
||||||
return [320, "%s :is a remote user connected via PyLink Relay. Home "
|
|
||||||
"network: %s; Home nick: %s" % (user.nick, network,
|
|
||||||
remotenick)]
|
|
||||||
world.whois_handlers.append(relayWhoisHandler)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Sending data to IRC
|
### Sending data to IRC
|
||||||
|
|
||||||
|
@ -777,21 +777,35 @@ def relayModes(irc, remoteirc, sender, channel, modes=None):
|
|||||||
rsid = getRemoteSid(remoteirc, irc)
|
rsid = getRemoteSid(remoteirc, irc)
|
||||||
remoteirc.proto.mode(rsid, remotechan, supported_modes)
|
remoteirc.proto.mode(rsid, remotechan, supported_modes)
|
||||||
|
|
||||||
def relayWhoisHandler(irc, target):
|
### EVENT HANDLERS
|
||||||
|
|
||||||
|
def handle_relay_whois(irc, source, command, args):
|
||||||
"""
|
"""
|
||||||
WHOIS handler for the relay plugin.
|
WHOIS handler for the relay plugin.
|
||||||
"""
|
"""
|
||||||
user = irc.users[target]
|
target = args['target']
|
||||||
orig = getOrigUser(irc, target)
|
server = args['server']
|
||||||
if orig:
|
targetuser = irc.users[target]
|
||||||
network, remoteuid = orig
|
|
||||||
remotenick = world.networkobjects[network].users[remoteuid].nick
|
|
||||||
return [320, "%s :is a remote user connected via PyLink Relay. Home "
|
|
||||||
"network: %s; Home nick: %s" % (user.nick, network,
|
|
||||||
remotenick)]
|
|
||||||
world.whois_handlers.append(relayWhoisHandler)
|
|
||||||
|
|
||||||
### GENERIC EVENT HOOK HANDLERS
|
def wreply(num, text):
|
||||||
|
"""Convenience wrapper to return WHOIS replies."""
|
||||||
|
# WHOIS replies are by convention prefixed with the target user's nick.
|
||||||
|
text = '%s %s' % (targetuser.nick, text)
|
||||||
|
irc.proto.numeric(server, num, source, text)
|
||||||
|
|
||||||
|
|
||||||
|
# Get the real user for the WHOIS target.
|
||||||
|
origuser = getOrigUser(irc, target)
|
||||||
|
if origuser:
|
||||||
|
homenet, uid = origuser
|
||||||
|
realirc = world.networkobjects[homenet]
|
||||||
|
realuser = realirc.users[uid]
|
||||||
|
netname = realirc.serverdata.get('netname', homenet)
|
||||||
|
|
||||||
|
wreply(320, ":is a remote user connected via PyLink Relay. Home network: %s; "
|
||||||
|
"Home nick: %s" % (netname, realuser.nick))
|
||||||
|
|
||||||
|
utils.add_hook(handle_relay_whois, 'PYLINK_CUSTOM_WHOIS')
|
||||||
|
|
||||||
def handle_operup(irc, numeric, command, args):
|
def handle_operup(irc, numeric, command, args):
|
||||||
newtype = args['text'] + '_(remote)'
|
newtype = args['text'] + '_(remote)'
|
||||||
|
Loading…
Reference in New Issue
Block a user