From 93d59ff30b783d6a7db38a62bd5e392d565cda3d Mon Sep 17 00:00:00 2001 From: dece Date: Sun, 6 Jun 2021 19:02:19 +0200 Subject: [PATCH] capture_list: add plugin --- config.json.example | 5 +++++ edmond/plugin.py | 12 ++++++++--- edmond/plugins/capture_list.py | 36 ++++++++++++++++++++++++++++++++ edmond/plugins/youtube_parser.py | 2 +- 4 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 edmond/plugins/capture_list.py diff --git a/config.json.example b/config.json.example index b3b17eb..8ce13c8 100644 --- a/config.json.example +++ b/config.json.example @@ -28,6 +28,11 @@ "capture_sentence": "Catch!", "captured_sentence": "Well done {winner}, you got that {thing}!" }, + "capturelist": { + "commands": ["collection"], + "reply": "{target} captured {num} things : {things}", + "empty_reply": "{target} did not capture anything yet!" + }, "common": { "command_suffix": "please", "handling_conditions": { diff --git a/edmond/plugin.py b/edmond/plugin.py index 835b4fd..f0ba9c7 100644 --- a/edmond/plugin.py +++ b/edmond/plugin.py @@ -95,9 +95,15 @@ class Plugin: """Set a value in the plugin runtime dict.""" self.bot.values[self.name][key] = value - def get_storage_value(self, key, default=None): - """Get a value from the plugin persistent storage.""" - return self.bot.storage.get(self.name, {}).get(key, default) + def get_storage_value(self, key, default=None, ns=None): + """Get a value from the plugin persistent storage. + + This will get the value from the plugin namespace, but it is possible to + get storage values from other plugins using their name as `ns`. + """ + if ns is None: + ns = self.name + return self.bot.storage.get(ns, {}).get(key, default) def set_storage_value(self, key, value): """Set a value in the plugin persistent storage.""" diff --git a/edmond/plugins/capture_list.py b/edmond/plugins/capture_list.py new file mode 100644 index 0000000..98b7776 --- /dev/null +++ b/edmond/plugins/capture_list.py @@ -0,0 +1,36 @@ +from edmond.plugin import Plugin + + +class CaptureListPlugin(Plugin): + + REQUIRED_CONFIGS = ["commands", "reply", "empty_reply"] + + def __init__(self, bot): + super().__init__(bot) + + def on_welcome(self, _): + if not self.bot.get_plugin("capture"): + self.bot.log_w("Capture plugin is not available.") + self.is_ready = False + + def on_pubmsg(self, event): + if not self.should_handle_command(event.arguments[0]): + return False + + collec_target = self.command.content or event.source.nick + collections = self.get_storage_value( + "collections", + default={}, + ns="capture" + ) + collection = collections.get(collec_target, []) + if collection: + reply = self.config["reply"].format( + target=collec_target, + num=len(collection), + things="".join(collection) + ) + else: + reply = self.config["empty_reply"].format(target=collec_target) + self.bot.say(event.target, reply) + return True diff --git a/edmond/plugins/youtube_parser.py b/edmond/plugins/youtube_parser.py index 27a36e3..e949dbb 100644 --- a/edmond/plugins/youtube_parser.py +++ b/edmond/plugins/youtube_parser.py @@ -28,7 +28,7 @@ class YoutubeParserPlugin(Plugin): def on_welcome(self, _): if not (self.youtube_plugin and self.youtube_plugin.is_ready): - self.log_w("Youtube plugin is not available.") + self.bot.log_w("Youtube plugin is not available.") self.is_ready = False def on_pubmsg(self, event):