aboutsummaryrefslogtreecommitdiff
path: root/modules/perform.py
diff options
context:
space:
mode:
authorGravatar jesopo2019-07-02 20:46:00 +0100
committerGravatar jesopo2019-07-02 20:46:00 +0100
commita077e086cd2eb91ab120fe2bef2a3af1d7ffbdb6 (patch)
treeb258be7bbb0466c7abfd6fe0d1ccc0de3caafdd8 /modules/perform.py
parentimprove !ud regex (diff)
signature
Revamp perform.py (including adding channel-performs)
Diffstat (limited to 'modules/perform.py')
-rw-r--r--modules/perform.py88
1 files changed, 61 insertions, 27 deletions
diff --git a/modules/perform.py b/modules/perform.py
index 56c518d4..6cdcb252 100644
--- a/modules/perform.py
+++ b/modules/perform.py
@@ -4,35 +4,69 @@
from src import EventManager, ModuleManager, utils
class Module(ModuleManager.BaseModule):
- def _execute(self, server):
- commands = server.get_setting("perform", [])
- for i, command in enumerate(commands):
- command = command.split("%%")
- for j, part in enumerate(command[:]):
- command[j] = part.replace("%nick%", server.nickname)
- command = "%".join(command)
- server.send_raw(command)
+ def _execute(self, server, commands, **kwargs):
+ for command in commands:
+ print(command)
+ server.send_raw(command.format(**kwargs))
@utils.hook("received.001", priority=EventManager.PRIORITY_URGENT)
def on_connect(self, event):
- self._execute(event["server"])
+ commands = event["server"].get_setting("perform", [])
+ self._execute(event["server"], commands, NICK=event["server"].nickname)
- @utils.hook("received.command.performadd", min_args=1)
- def perform_add(self, event):
- """
- :help: Add command to be executed on connect
- :usage: <raw command>
- :permission: perform
- """
- perform = event["server"].get_setting("perform", [])
- perform.append(event["args"])
- event["server"].set_setting("perform", perform)
- event["stdout"].write("Added command")
+ @utils.hook("self.join", priority=EventManager.PRIORITY_URGENT)
+ def on_join(self, event):
+ commands = event["channel"].get_setting("perform", [])
+ self._execute(event["server"], commands, NICK=event["server"].nickname,
+ CHAN=event["channel"].name)
- @utils.hook("received.command.performexecute")
- def perform_execute(self, event):
- """
- :help: Execute all saved commands
- :permission: perform
- """
- self._execute(event["server"])
+ def _perform(self, target, args_split):
+ subcommand = args_split[0].lower()
+ current_perform = target.get_setting("perform", [])
+ if subcommand == "list":
+ return "Configured commands: %s" % ", ".join(current_perform)
+
+ message = None
+ if subcommand == "add":
+ if not len(args_split) > 1:
+ raise utils.EventError("Please provide a raw command to add")
+ current_perform.append(" ".join(args_split[1:]))
+ message = "Added command"
+ elif subcommand == "remove":
+ if not len(args_split) > 1:
+ raise utils.EventError("Please provide an index to remove")
+ if not args_split[1].isdigit():
+ raise utils.EventError("Please provide a number")
+ index = int(args_split[1])
+ if not index < len(current_perform):
+ raise utils.EventError("Index out of bounds")
+ current_perform.pop(index)
+ message = "Removed command"
+ else:
+ raise utils.EventError("Unknown subcommand '%s'" % subcommand)
+
+ target.set_setting("perform", current_perform)
+ return message
+
+ @utils.hook("received.command.perform", min_args=1)
+ @utils.kwarg("min_args", 1)
+ @utils.kwarg("help", "Edit on-connect command configuration")
+ @utils.kwarg("usage", "list")
+ @utils.kwarg("usage", "add <raw command>")
+ @utils.kwarg("usage", "remove <index>")
+ @utils.kwarg("permission", "perform")
+ def perform(self, event):
+ event["stdout"].write(self._perform(event["server"],
+ event["args_split"]))
+
+ @utils.hook("received.command.cperform", min_args=1)
+ @utils.kwarg("min_args", 1)
+ @utils.kwarg("channel_only", True)
+ @utils.kwarg("help", "Edit channel on-join command configuration")
+ @utils.kwarg("usage", "list")
+ @utils.kwarg("usage", "add <raw command>")
+ @utils.kwarg("usage", "remove <index>")
+ @utils.kwarg("permission", "cperform")
+ def cperform(self, event):
+ event["stdout"].write(self._perform(event["target"],
+ event["args_split"]))