mirror of
https://github.com/jlu5/PyLink.git
synced 2024-12-03 16:39:25 +01:00
exec: accept newlines and other backslash escapes (in only "exec")
This way, more complex code can be entered using newlines: e.g. "for x in range(3):\n irc.reply('hello world')"
This commit is contained in:
parent
6330be8758
commit
375dbe8427
@ -12,15 +12,20 @@ import world
|
|||||||
def _exec(irc, source, args):
|
def _exec(irc, source, args):
|
||||||
"""<code>
|
"""<code>
|
||||||
|
|
||||||
Admin-only. Executes <code> in the current PyLink instance.
|
Admin-only. Executes <code> in the current PyLink instance. This command performs backslash escaping of characters, so things like \\n and \\ will work.
|
||||||
\x02**WARNING: THIS CAN BE DANGEROUS IF USED IMPROPERLY!**\x02"""
|
\x02**WARNING: THIS CAN BE DANGEROUS IF USED IMPROPERLY!**\x02"""
|
||||||
utils.checkAuthenticated(irc, source, allowOper=False)
|
utils.checkAuthenticated(irc, source, allowOper=False)
|
||||||
args = ' '.join(args)
|
|
||||||
|
# Allow using \n in the code, while escaping backslashes correctly otherwise.
|
||||||
|
args = bytes(' '.join(args), 'utf-8').decode("unicode_escape")
|
||||||
if not args.strip():
|
if not args.strip():
|
||||||
irc.reply('No code entered!')
|
irc.reply('No code entered!')
|
||||||
return
|
return
|
||||||
log.info('(%s) Executing %r for %s', irc.name, args, utils.getHostmask(irc, source))
|
|
||||||
|
log.info('(%s) Executing %r for %s', irc.name, args,
|
||||||
|
utils.getHostmask(irc, source))
|
||||||
exec(args, globals(), locals())
|
exec(args, globals(), locals())
|
||||||
|
|
||||||
utils.add_cmd(_exec, 'exec')
|
utils.add_cmd(_exec, 'exec')
|
||||||
|
|
||||||
def _eval(irc, source, args):
|
def _eval(irc, source, args):
|
||||||
|
Loading…
Reference in New Issue
Block a user