""" Sopel plugin: jeeves keyword responder Responds to channel messages containing configured keywords with a random reply. Can be paused/resumed via !pause / !resume (admin.py). Config (in jeeves.cfg): [respond] keywords = word1 word2 responses = reply one reply two """ import random from sopel import plugin from sopel.config.types import ListAttribute, StaticSection class RespondSection(StaticSection): keywords = ListAttribute("keywords") responses = ListAttribute("responses") def setup(bot): bot.config.define_section("respond", RespondSection, validate=False) @plugin.rule(r"(?s:.*)") @plugin.require_chanmsg def on_message(bot, trigger): if bot.memory.get("jv_paused"): return try: keywords = bot.config.respond.keywords or [] responses = bot.config.respond.responses or [] except Exception: return if not keywords or not responses: return try: msg = trigger.group(0).casefold() if any(kw.casefold() in msg for kw in keywords): bot.say(random.choice(responses), trigger.sender) except (UnicodeError, AttributeError): pass