diff options
| author | 2019-12-10 05:27:35 +0000 | |
|---|---|---|
| committer | 2019-12-10 05:27:35 +0000 | |
| commit | 638eee0d685c06d258cb55287204ca97bca7c344 (patch) | |
| tree | 33442439317ae2846f1efb7674b7a3758c8990a1 /src/core_modules/silence.py | |
| parent | move sys.exit() codes to an enum in utils.consts (diff) | |
| signature | ||
move core modules to src/core_modules, make them uneffected by white/black list
Diffstat (limited to 'src/core_modules/silence.py')
| -rw-r--r-- | src/core_modules/silence.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/core_modules/silence.py b/src/core_modules/silence.py new file mode 100644 index 00000000..42990921 --- /dev/null +++ b/src/core_modules/silence.py @@ -0,0 +1,70 @@ +#--depends-on commands +#--depends-on permissions + +import time +from src import EventManager, ModuleManager, utils + +SILENCE_TIME = 60*5 # 5 minutes + +class Module(ModuleManager.BaseModule): + def on_load(self): + self.exports.add("is-silenced", self._is_silenced) + + def _is_silenced(self, target): + silence_until = target.get_setting("silence-until", None) + if not silence_until == None: + if time.time()<silence_until: + return True + else: + target.del_setting("silence-until") + return False + + @utils.hook("received.command.silence") + @utils.kwarg("channel_only", True) + @utils.kwarg("help", "Prevent me saying anything for a period of time " + "(default: 5 minutes)") + @utils.kwarg("usage", "[+time]") + @utils.kwarg("require_mode", "high") + @utils.kwarg("require_access", "silence") + @utils.kwarg("permission", "silence") + def silence(self, event): + duration = SILENCE_TIME + if event["args"] and event["args_split"][0].startswith("+"): + duration = utils.datetime.from_pretty_time( + event["args_split"][0][1:]) + if duration == None: + raise utils.EventError("Invalid duration provided") + + silence_until = time.time()+duration + event["target"].set_setting("silence-until", silence_until) + event["stdout"].write("Ok, I'll be back") + + @utils.hook("received.command.unsilence") + @utils.kwarg("help", "Unsilence me") + @utils.kwarg("unsilence", True) + @utils.kwarg("channel_only", True) + @utils.kwarg("require_mode", "high") + @utils.kwarg("require_access", "unsilence") + @utils.kwarg("permission", "unsilence") + def unsiltence(self, event): + silence_until = event["target"].get_setting("silence-until", None) + if not silence_until == None: + event["target"].del_setting("silence-until") + event["stdout"].write("Ok. I've been unsilenced") + else: + event["stderr"].write("I am not silenced") + + @utils.hook("preprocess.command", priority=EventManager.PRIORITY_HIGH) + def preprocess_command(self, event): + if event["is_channel"] and not event["hook"].get_kwarg( + "unsilence", False): + silence_until = event["target"].get_setting("silence-until", None) + if silence_until: + if self._is_silenced(event["target"]): + return utils.consts.PERMISSION_HARD_FAIL, None + + @utils.hook("unknown.command") + @utils.kwarg("priority", EventManager.PRIORITY_HIGH) + def unknown_command(self, event): + if event["is_channel"] and self._is_silenced(event["target"]): + event.eat() |
