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