From 5a8d568931d9b23ce0df1265d05259a7012081c9 Mon Sep 17 00:00:00 2001 From: Ahmed Date: Sun, 14 Jun 2026 01:46:29 +0300 Subject: init: mostly vibed --- herald/respond.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 herald/respond.py (limited to 'herald/respond.py') diff --git a/herald/respond.py b/herald/respond.py new file mode 100644 index 0000000..066ea81 --- /dev/null +++ b/herald/respond.py @@ -0,0 +1,49 @@ +""" +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 -- cgit v1.2.3