aboutsummaryrefslogtreecommitdiff
path: root/modules/set.py
diff options
context:
space:
mode:
Diffstat (limited to 'modules/set.py')
-rw-r--r--modules/set.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/modules/set.py b/modules/set.py
new file mode 100644
index 00000000..36592f7a
--- /dev/null
+++ b/modules/set.py
@@ -0,0 +1,54 @@
+
+
+class Module(object):
+ def __init__(self, bot):
+ self.bot = bot
+ self.settings = {}
+ self.channel_settings = {}
+ bot.events.on("postboot").on("configure").on("set").hook(
+ self.postboot_set)
+ bot.events.on("postboot").on("configure").on("channelset"
+ ).hook(self.postboot_channelset)
+ bot.events.on("received").on("command").on("set").hook(
+ self.set, help="Set a specified user setting")
+ bot.events.on("received").on("command").on("channelset"
+ ).hook(self.channel_set, channel_only=True)
+
+ def _postboot_set(self, settings, event):
+ settings[event["setting"]] = {}
+ settings[event["setting"]]["validate"] = event.get(
+ "validate", lambda s: s)
+ settings[event["setting"]]["help"] = event.get("help",
+ "")
+ def postboot_set(self, event):
+ self._postboot_set(self.settings, event)
+ def postboot_channelset(self, event):
+ self._postboot_set(self.channel_settings, event)
+
+ def _set(self, settings, target, event):
+ if len(event["args_split"]) > 1:
+ setting = event["args_split"][0].lower()
+ if setting in settings:
+ value = " ".join(event["args_split"][1:])
+ value = settings[setting]["validate"](value)
+ if not value == None:
+ target.set_setting(setting, value)
+ event["stdout"].write("Saved setting")
+ else:
+ event["stderr"].write("Invalid value")
+ else:
+ event["stderr"].write("Unknown setting")
+ elif len(event["args_split"]) == 1:
+ event["stderr"].write("Please provide a value")
+ else:
+ event["stdout"].write("Available settings: %s" % (
+ ", ".join(settings.keys())))
+ def set(self, event):
+ self._set(self.settings, event["user"], event)
+
+ def channel_set(self, event):
+ if event["channel"].mode_or_above(event["user"].nickname,
+ "o"):
+ self._set(self.channel_settings, event["channel"], event)
+ else:
+ event["stderr"].write("You do not have the modes required")