]> git.aero2k.de Git - urlbot-v3.git/commitdiff
spread the knowledge
authorThorsten <mail@aero2k.de>
Sat, 9 Dec 2023 13:08:41 +0000 (14:08 +0100)
committerThorsten <mail@aero2k.de>
Sat, 9 Dec 2023 13:11:19 +0000 (14:11 +0100)
README.md
distbot/common/message.py
distbot/plugins/didyouknow.py

index f1d59789a1210f7ca490f5b1c9424718d35ac22b..5b7ac3b6a344945bed90ffa384b3fa49923dbf2c 100644 (file)
--- a/README.md
+++ b/README.md
@@ -68,15 +68,12 @@ The easiest (and probably most common) thing to achieve is to add another plugin
 
 Further extensions (and there's a lot to be desired):
 
-* en-/disabling plugins programmatically
-
-* decide how plugin configuration should look like - centralised or not
-
-* decide whether ini is a good choice for configuration, and if runtime storage should use the same
-
-* rate limiting (hard nut, few moments where it's actually needed)
-
-* grep TODO in the repository...
+- en-/disabling plugins programmatically
+- decide how plugin configuration should look like - centralised or not
+- decide whether ini is a good choice for configuration, and if runtime storage should use the same
+- rate limiting (hard nut, few moments where it's actually needed)
+- grep TODO in the repository...
+- eval/use https://dramatiq.io/ for queueing tasks
 
 # License
 
index d46b01a11ac8eb8669807b92af1cc097f6b620ca..eb30d2696c0c7d777cbf6caab96419f049ffd262 100644 (file)
@@ -3,6 +3,7 @@
 import logging
 # Serializing
 import shlex
+from typing import List
 
 import pika
 from distbot.common.config import conf_get
@@ -12,11 +13,11 @@ from slixmpp.jid import JID
 logger = logging.getLogger(__name__)
 
 
-def get_words(msg):
+def get_words(msg) -> List[str]:
     return shlex.split(msg["body"])
 
 
-def get_nick_from_message(message_obj):
+def get_nick_from_message(message_obj) -> str:
     """
     Extract the actual nick
     :type message_obj: Message
index ad3f2852a14e2716cdce6cc4c235cfc9fdf33b45..f4ebf6b403a09ba34a91c4ee4a43356f5ab6385e 100644 (file)
@@ -2,6 +2,7 @@
 import json
 import random
 
+from distbot.common.message import get_nick_from_message, get_words
 from distbot.bot.worker import Worker
 from distbot.common.action import Action
 
@@ -16,7 +17,7 @@ DB = [
 class DidYouKnow(Worker):
     binding_keys = [
         "#.wusstet.ihr.#",
-        "#.wuƟtet.ihr.#"
+        "Hi.#"
     ]
     description = "smart bot"
     usage = "wusstest ihr schon."
@@ -34,18 +35,35 @@ class DidYouKnow(Worker):
     ]
 
     def parse_body(self, msg):
-        with open(self.dynamic_db, "r+") as fd:
+        sender = get_nick_from_message(msg)
+        words = get_words(msg)
+        if "wusstet" in words:
+            fact = self.get_random_fact()
+            self.insert_fact(msg)
+            answer = random.choice(self.answers)
+            return Action(msg="{} {}".format(answer, (fact[0].upper() + fact[1:]) if answer.endswith(".") else fact))
+        elif words[0] == "Hi" and sender == "Q":
+            return Action(msg=self.get_random_fact())
+
+
+    def get_random_fact(self):
+        with open(self.dynamic_db, "r") as fd:
             try:
                 db = json.load(fd)
             except Exception as e:
                 db = {"quotes": []}
             fact: str = random.choice(DB + db["quotes"])
+        return fact
+
+
+    def insert_fact(self, msg):
+        with open(self.dynamic_db, "w") as fd:
+            try:
+                db = json.load(fd)
+            except Exception as e:
+                db = {"quotes": []}
             db["quotes"].append(msg["body"])
-            fd.seek(0)
             json.dump(db, fd, indent=2)
 
-        answer = random.choice(self.answers)
-        return Action(msg="{} {}".format(answer, (fact[0].upper() + fact[1:]) if answer.endswith(".") else fact))
-
 
 ALL = [DidYouKnow]