mirror of
https://github.com/jlu5/PyLink.git
synced 2025-02-17 14:01:03 +01:00
networks.remote: override remoteirc.reply() to send replies back to the caller
Closes #437.
This commit is contained in:
parent
99d3780773
commit
490f21ff9f
@ -1,5 +1,6 @@
|
|||||||
"""Networks plugin - allows you to manipulate connections to various configured networks."""
|
"""Networks plugin - allows you to manipulate connections to various configured networks."""
|
||||||
import importlib
|
import importlib
|
||||||
|
import types
|
||||||
|
|
||||||
from pylinkirc import utils, world, conf, classes
|
from pylinkirc import utils, world, conf, classes
|
||||||
from pylinkirc.log import log
|
from pylinkirc.log import log
|
||||||
@ -49,7 +50,6 @@ def autoconnect(irc, source, args):
|
|||||||
network.serverdata['autoconnect'] = seconds
|
network.serverdata['autoconnect'] = seconds
|
||||||
irc.reply("Done.")
|
irc.reply("Done.")
|
||||||
|
|
||||||
|
|
||||||
remote_parser = utils.IRCParser()
|
remote_parser = utils.IRCParser()
|
||||||
remote_parser.add_argument('network')
|
remote_parser.add_argument('network')
|
||||||
remote_parser.add_argument('--service', type=str, default='pylink')
|
remote_parser.add_argument('--service', type=str, default='pylink')
|
||||||
@ -58,7 +58,8 @@ remote_parser.add_argument('command', nargs=utils.IRCParser.REMAINDER)
|
|||||||
def remote(irc, source, args):
|
def remote(irc, source, args):
|
||||||
"""<network> [--service <service name>] <command>
|
"""<network> [--service <service name>] <command>
|
||||||
|
|
||||||
Runs <command> on the remote network <network>. No replies are sent back due to protocol limitations."""
|
Runs <command> on the remote network <network>. Plugin responses sent using irc.reply() are
|
||||||
|
supported and returned here, but others are dropped due to protocol limitations."""
|
||||||
permissions.checkPermissions(irc, source, ['networks.remote'])
|
permissions.checkPermissions(irc, source, ['networks.remote'])
|
||||||
|
|
||||||
args = remote_parser.parse_args(args)
|
args = remote_parser.parse_args(args)
|
||||||
@ -80,12 +81,33 @@ def remote(irc, source, args):
|
|||||||
# Set the identification override to the caller's account.
|
# Set the identification override to the caller's account.
|
||||||
remoteirc.pseudoclient.account = irc.users[source].account
|
remoteirc.pseudoclient.account = irc.users[source].account
|
||||||
|
|
||||||
try: # Remotely call the command (use the PyLink client as a dummy user).
|
def _remote_reply(placeholder_self, text, **kwargs):
|
||||||
world.services[args.service].call_cmd(remoteirc, remoteirc.pseudoclient.uid, ' '.join(args.command))
|
"""
|
||||||
finally: # Remove the identification override after we finish.
|
reply() rerouter for the 'remote' command.
|
||||||
remoteirc.pseudoclient.account = ''
|
"""
|
||||||
|
log.debug('(%s) networks.remote: re-routing reply %r from network %s', irc.name,
|
||||||
|
text, placeholder_self.name)
|
||||||
|
|
||||||
irc.reply("Done.")
|
# Override the source option to make sure the source is valid on the local network.
|
||||||
|
if 'source' in kwargs:
|
||||||
|
del kwargs['source']
|
||||||
|
irc.reply(text, **kwargs, source=irc.pseudoclient.uid)
|
||||||
|
|
||||||
|
old_reply = remoteirc.reply
|
||||||
|
|
||||||
|
with remoteirc.reply_lock:
|
||||||
|
try: # Remotely call the command (use the PyLink client as a dummy user).
|
||||||
|
# Override the remote irc.reply() to send replies HERE.
|
||||||
|
log.debug('(%s) networks.remote: overriding reply() of IRC object %s', irc.name, netname)
|
||||||
|
remoteirc.reply = types.MethodType(_remote_reply, remoteirc)
|
||||||
|
world.services[args.service].call_cmd(remoteirc, remoteirc.pseudoclient.uid,
|
||||||
|
' '.join(args.command))
|
||||||
|
finally:
|
||||||
|
# Restore the original remoteirc.reply()
|
||||||
|
log.debug('(%s) networks.remote: restoring reply() of IRC object %s', irc.name, netname)
|
||||||
|
remoteirc.reply = old_reply
|
||||||
|
# Remove the identification override after we finish.
|
||||||
|
remoteirc.pseudoclient.account = ''
|
||||||
|
|
||||||
@utils.add_cmd
|
@utils.add_cmd
|
||||||
def reloadproto(irc, source, args):
|
def reloadproto(irc, source, args):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user