]> git.armaanb.net Git - tall.bot.git/blobdiff - tallbot.py
Reduce amount of information returned
[tall.bot.git] / tallbot.py
index b27e3ba17a6d1fd4cb094c969cf1d5a205701760..fba1c1639eb445f2ec52de26a9f36e087525e174 100755 (executable)
@@ -1,48 +1,96 @@
 #!/usr/bin/env python3
 # tall.bot - a simple Discord Wikipedia bot
-# Armaan Bhojwani 2020
+# Armaan Bhojwani 2021
 
-import sys
 import logging
+import sqlite3
+import sys
+import time
 import wikipedia
 import discord
 
-keywords = ["what is", "What is", "what was", "What was", "what were",
-            "What were", "who is", "Who is", "who was", "Who was", 
-            "who were", "Who were", "who are", "Who are"]
-
 def wiki_sum(search, sen, pid):
-    search = " ".join(search)
-
     try:
-        output = "<Wikipedia> " + wikipedia.summary(search, sentences=sen)
-        logging.info(str(pid) + " | " + search)
+        logging.info(str(pid) + " | " + str(int(time.time())) + " | " + str(search))
+        log_query(search, pid)
+        return "<Wikipedia> " + wikipedia.summary(search,
+                                                  sentences=sen,
+                                                  auto_suggest=False)
     except Exception as e:
-        output = str(e)
-        logging.info(str(pid) + " | " + search + " | " + str(e))
+        logging.debug(str(pid) + " | " + str(search) + " | " + str(e))
+        return str(e)
 
-    return output
+def create_query(inp):
+    key1 = ["What", "what", "who", "Who", "what's", "What's", "whats", "Whats",
+            "Whatsa", "whatsa"]
+    key2 = ["is", "are", "were", "was"]
+    key3 = ["a", "an", "the"]
 
-def keyword_check(inp):
     x = inp.split()
-    x = " ".join(x[:2])
-    if x in keywords:
-        return True
+    if x[0] in key1 and x[1] in key2:
+        x = x[2:]
+        if x[0] in key3:
+            x = x[1:]
+    else:
+        return False
+
+    return " ".join(x)
+
+def tell_more(inp, pid):
+    def find_query(inp):
+        key1 = ["Tell me more", "tell me more"]
+        if inp[:12] in key1:
+            return inp[11:]
+        else:
+            return False
+
+    def query_lookup(pid):
+        old = int(time.time()) - 150
+        c.execute("SELECT query FROM queries WHERE pid = (?) AND time > (?)",
+                  (str(pid), old))
+
+        (query, *_) = c.fetchone()
+        return str(query)
+
+    if find_query(inp):
+        return query_lookup(pid)
     else:
         return False
 
+def prep_database():
+    c.execute("""CREATE TABLE IF NOT EXISTS queries(
+              time INTEGER,
+              pid TEXT,
+              query TEXT)""")
+    conn.commit()
+
+def log_query(search, pid):
+    c.execute("DELETE FROM queries WHERE pid = (?)", (str(pid),))
+    c.execute("""INSERT INTO queries
+              (time, pid, query) VALUES(?, ?, ?)""",
+              (int(time.time()), str(pid), str(search)))
+    conn.commit()
+
 class TallBot(discord.Client):
     async def on_ready(self):
-        logging.debug('Logged in as ', self.user)
+        logging.info('Logged in as ', self.user)
 
     async def on_message(self, message):
         if message.author == self.user:
             return
 
-        if keyword_check(message.content):
-            await message.channel.send(wiki_sum(message.content.split()[2:],
-                                                2,
-                                                message.author))
+        query = create_query(message.content)
+        more_info = tell_more(message.content, message.author)
+        if query:
+            await message.channel.send(wiki_sum(query, 1, message.author))
+        elif more_info:
+            await message.channel.send(wiki_sum(more_info, 6, message.author))
+
+def main():
+    prep_database()
+    TallBot().run(sys.argv[1])
 
-client = TallBot()
-client.run(sys.argv[1])
+if __name__ == "__main__":
+    conn = sqlite3.connect("queries.db")
+    c = conn.cursor()
+    main()