From 231c6e68078ea86f48d91ed065794fce52c25ac6 Mon Sep 17 00:00:00 2001 From: tv Date: Sun, 20 Apr 2014 12:30:17 +0200 Subject: reaktor.py: add on_join hook: tell NICK MSG... --- Reaktor/IRC/reaktor.py | 7 ++++++- Reaktor/commands/tell-on_join | 19 +++++++++++++++++++ Reaktor/commands/tell-on_privmsg | 17 +++++++++++++++++ Reaktor/config.py | 14 ++++++++++++++ 4 files changed, 56 insertions(+), 1 deletion(-) create mode 100755 Reaktor/commands/tell-on_join create mode 100755 Reaktor/commands/tell-on_privmsg (limited to 'Reaktor') diff --git a/Reaktor/IRC/reaktor.py b/Reaktor/IRC/reaktor.py index 0b285a3f..5e5156ad 100755 --- a/Reaktor/IRC/reaktor.py +++ b/Reaktor/IRC/reaktor.py @@ -34,6 +34,10 @@ class Reaktor(asybot): def __init__(self): asybot.__init__(self, getconf('irc_server'), getconf('irc_port'), getconf('irc_nickname'), getconf('irc_channels'), hammer_interval=getconf('irc_hammer_interval'), alarm_timeout=getconf('irc_alarm_timeout'), kill_timeout=getconf('irc_kill_timeout')) + def on_join(self, prefix, command, params, rest): + for command in getconf('on_join'): + self.execute_command(command, None, prefix, params) + def on_privmsg(self, prefix, command, params, rest): for command in getconf('commands'): y = match(command['pattern'], rest) @@ -57,7 +61,8 @@ class Reaktor(asybot): #TODO: allow only commands below ./commands/ exe = join(dirname(realpath(dirname(__file__))), command['argv'][0]) myargv = [exe] + command['argv'][1:] - if match.groupdict().get('args',None): + + if match and match.groupdict().get('args', None): myargv += shlex.split(match.groupdict()['args']) cwd = getconf('workdir') diff --git a/Reaktor/commands/tell-on_join b/Reaktor/commands/tell-on_join new file mode 100755 index 00000000..2dbff41a --- /dev/null +++ b/Reaktor/commands/tell-on_join @@ -0,0 +1,19 @@ +#! /bin/sh +set -euf + +# require flock from util-linux +if test "${FLOCK-}" != "$state_file"; then + exec env FLOCK="$state_file" flock "$state_file" "$0" "$@" +fi + +to="$_from" + +# print messages +sed -n '/^'"$to"' /{ + s/^\([^ ]\+\) \([^ ]\+\) <\([^>]\+\)> \(.*\)/\1: \4 2-- \2, \3/p +}' "$state_file" + +# delete messages +sed -i '/^'"$to"' /{ + d +}' "$state_file" diff --git a/Reaktor/commands/tell-on_privmsg b/Reaktor/commands/tell-on_privmsg new file mode 100755 index 00000000..5d0aff41 --- /dev/null +++ b/Reaktor/commands/tell-on_privmsg @@ -0,0 +1,17 @@ +#! /bin/sh +set -euf + +# require flock from util-linux +if test "${FLOCK-}" != "$state_file"; then + exec env FLOCK="$state_file" flock "$state_file" "$0" "$@" +fi + +from="$_prefix" +to="$1"; shift +msg="$*" +date=$(date) + +# TODO tell now, if already joined +printf '%s %s <%s> %s\n' "$to" "$from" "$date" "$msg" >> "$state_file" + +echo 'Consider it noted.' # that's what lambdabot says... diff --git a/Reaktor/config.py b/Reaktor/config.py index 88701379..db4c8a3e 100644 --- a/Reaktor/config.py +++ b/Reaktor/config.py @@ -32,6 +32,12 @@ public_commands = [ default_command('rev'), default_command('uptime'), default_command('nocommand'), + { + 'capname': 'tell', + 'pattern': '^' + name + ':\\s*' + 'tell' + '\\s*(?:\\s+(?P.*))?$', + 'argv': [ 'commands/tell-on_privmsg' ], + 'env': { 'state_file': workdir + '/tell.txt' } + }, # command not found { 'pattern': '^(?:' + name + '|\\*):.*', 'argv': [ 'commands/respond','You are made of stupid!'] }, @@ -46,3 +52,11 @@ public_commands = [ commands = [ default_command('reload') ] + +on_join = [ + { + 'capname': 'tell', + 'argv': [ 'commands/tell-on_join' ], + 'env': { 'state_file': workdir + '/tell.txt' } + } +] -- cgit v1.2.3