""" Sopel plugin: keyword responder Responds to any channel message containing one of the configured keywords with a randomly chosen response line. Matching is case-insensitive. Can be paused/resumed by the owner via !pause / !resume. [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.settings.define_section("respond", RespondSection) @plugin.rule(r"(?s:.*)") @plugin.require_chanmsg def respond(bot, trigger): if bot.memory.get("herald_paused"): return keywords = bot.settings.respond.keywords responses = bot.settings.respond.responses 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)) except (UnicodeError, AttributeError): pass