diff options
Diffstat (limited to 'modules/set.py')
| -rw-r--r-- | modules/set.py | 54 |
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") |
