import re import time from edmond.plugin import Plugin class CaptureGivePlugin(Plugin): REQUIRED_CONFIGS = ["commands", "content_regex", "no_such_thing_reply"] def __init__(self, bot): super().__init__(bot) self._content_re = None @property def content_re(self): if self._content_re is None: self._content_re = re.compile(self.config["content_regex"]) return self._content_re 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 # "give" command. if self.command.ident == self.config["commands"][0]: content = self.command.raw[len(self.command.matched) :].strip() matched = self.content_re.match(content) if not matched: return False groups = matched.groupdict() if any(k not in groups for k in ("thing", "person")): return False thing = groups["thing"] person = groups["person"] # Check the sender has the thing they attempt to give. collections = self.get_storage_value( "collections", default={}, ns="capture" ) source = event.source.nick source_collection = collections.get(source, []) if thing not in source_collection: reply = self.config["no_such_thing_reply"].format(thing=thing) self.bot.say(event.target, reply) return True source_collection.remove(thing) collections[source] = source_collection target_collection = collections.get(person, []) target_collection.append(thing) collections[person] = target_collection self.set_storage_value("collections", collections, ns="capture") dance_text_1 = f"[{source}] {thing}<(OvO<) [{person}]" self.bot.say(event.target, dance_text_1) time.sleep(1) dance_text_2 = f"[{source}] (>OvO)>{thing} [{person}]" self.bot.say(event.target, dance_text_2) return True