Browse Source

Changing riddle command back to an as_plugin

Kirk Trombley 6 years ago
parent
commit
24f2310714
1 changed files with 54 additions and 58 deletions
  1. 54 58
      src/plugins/querying.py

+ 54 - 58
src/plugins/querying.py

@@ -1,12 +1,11 @@
 import random
-import logging
 import threading
 import time
 
 import requests
 from requests_html import HTMLSession
 
-from command_system import RollbotResponse, RollbotPlugin, RollbotFailure, as_plugin, pop_arg
+from command_system import RollbotResponse, RollbotFailure, as_plugin, pop_arg
 from config import get_config, get_secret
 from util import upload_image
 
@@ -137,59 +136,56 @@ def scp(db, message):
     return RollbotResponse(message, txt=response)
 
 
-class Riddle(RollbotPlugin):
-    def __init__(self, bot, logger=logging.getLogger(__name__)):
-        RollbotPlugin.__init__(self, "riddle", bot, logger=logger)
-        self.sesh = HTMLSession()
-        self.riddle_max = 7545
-        self.sleep_time = get_config("riddle.sleep_time")
-
-    def get_riddle(self):
-        n = random.randint(2, self.riddle_max)
-        r = self.sesh.get(f"https://www.riddles.com/{n:d}")
-        divs = r.html.find("div")
-        panel_bodies = [d.text for d in divs if "class" in d.attrs and "panel-body" in d.attrs["class"]]
-
-        if len(panel_bodies) <= 1:
-            self.logger.info(f"Failed on {n:d} - invalid page")
-            return n, None
-
-        riddle = panel_bodies[0]
-
-        if riddle.startswith("Riddle Status: User Rejected") or riddle.startswith("Riddle Status: User Moderated"):
-            self.logger.info(f"Failed on {n:d} - rejected")
-            return n, None
-
-        parts = riddle.split("\n")
-        self.logger.info(f"Returning riddle {n:d}")
-        return n, (parts[1], parts[3])
-
-    def get_answer_cb(self, message, riddle):
-        gid = message.group_id
-        txt = "\n\n".join(("Here's the riddle answer from before!", *riddle))
-        def cb():
-            time.sleep(self.sleep_time)
-            self.bot.manually_post_message(txt, gid)
-        return cb
-
-    def on_command(self, db, message):
-        if message.raw_args is None or message.raw_args != "me piss":
-            return RollbotResponse(message, failure=RollbotFailure.INVALID_ARGUMENTS)
-
-        n = 0
-        riddle = None
-        while riddle is None:
-            rnum, riddle = self.get_riddle()
-            n += 1
-            if n > 20:
-                return RollbotResponse(message, failure=RollbotFailure.SERVICE_DOWN)
-
-        txt = "\n\n".join((
-            f"Riddle #{rnum}",
-            riddle[0],
-            f"I'll post the response in about {self.sleep_time} seconds!",
-        ))
-
-        threading.Thread(target=self.get_answer_cb(message, riddle)).start()
-
-        return RollbotResponse(message, txt=txt)
+def get_riddle(sesh, logger):
+    n = random.randint(2, 7545)
+    r = sesh.get(f"https://www.riddles.com/{n:d}")
+    divs = r.html.find("div")
+    panel_bodies = [d.text for d in divs if "class" in d.attrs and "panel-body" in d.attrs["class"]]
+
+    if len(panel_bodies) <= 1:
+        logger.info(f"Failed on {n:d} - invalid page")
+        return n, None
+
+    riddle = panel_bodies[0]
+
+    if riddle.startswith("Riddle Status: User Rejected") or riddle.startswith("Riddle Status: User Moderated"):
+        logger.info(f"Failed on {n:d} - rejected")
+        return n, None
+
+    parts = riddle.split("\n")
+    logger.info(f"Returning riddle {n:d}")
+    return n, (parts[1], parts[3])
+
+
+def get_answer_cb(bot, message, riddle):
+    gid = message.group_id
+    txt = "\n\n".join(("Here's the riddle answer from before!", *riddle))
+    def cb():
+        time.sleep(get_config("riddle.sleep_time"))
+        bot.manually_post_message(txt, gid)
+    return cb
+
+
+@as_plugin
+def riddle(bot, db, message, log):
+    if message.raw_args is None or message.raw_args != "me piss":
+        return RollbotResponse(message, failure=RollbotFailure.INVALID_ARGUMENTS)
+
+    sesh = HTMLSession()
+    n = 0
+    riddle = None
+    while riddle is None:
+        rnum, riddle = get_riddle(sesh, log)
+        n += 1
+        if n > 20:
+            return RollbotResponse(message, failure=RollbotFailure.SERVICE_DOWN)
+
+    txt = "\n\n".join((
+        f"Riddle #{rnum}",
+        riddle[0],
+        f"I'll post the response in about {get_config('riddle.sleep_time')} seconds!",
+    ))
+
+    threading.Thread(target=get_answer_cb(bot, message, riddle)).start()
+
+    return RollbotResponse(message, txt=txt)