]> apps.delaporte.us Git - matrix-shop-bot.git/blobdiff - matrix_shop_bot/bot.py
List purchase history
[matrix-shop-bot.git] / matrix_shop_bot / bot.py
index 9c0bec0e754a6965220a7e4154d6a3ef274b21ea..ae65bdc03494b7f6166c79dc40ff607c653dcd47 100644 (file)
@@ -4,157 +4,157 @@ import os
 
 import simplematrixbotlib as botlib
 
 
 import simplematrixbotlib as botlib
 
-from .db import Data, pretty_print
+from .db import Data
 
 
-SERVER = os.environ.get('MATRIX_SERVER')
-BOT_NAME = os.environ.get('GOAL_BOT')
-BOT_PWD = os.environ.get('GOAL_BOT_PWD')
-
-def get_bot():
-    creds = botlib.Creds(SERVER, BOT_NAME, BOT_PWD)
-    return botlib.Bot(creds)
+MODULE='shop'
 
 DATE_FORMAT = '%Y-%m-%d'
 
 def today():
     return dt.now().strftime(DATE_FORMAT)
 
 
 DATE_FORMAT = '%Y-%m-%d'
 
 def today():
     return dt.now().strftime(DATE_FORMAT)
 
-PREFIX = '!goal'
-
+PREFIX = f'!{MODULE}'
 logger = logging.getLogger(__name__)
 logger = logging.getLogger(__name__)
-logging.basicConfig(filename='goals.log', encoding='utf-8', level=logging.DEBUG)
+logging.basicConfig(filename=f'{MODULE}.log', encoding='utf-8', level=logging.DEBUG)
 logging.getLogger('nio').setLevel(logging.WARNING)
 
 logging.getLogger('nio').setLevel(logging.WARNING)
 
-async def do_goal(match):
+async def do_shop(match):
     '''
     '''
-    Prefix: !goal
+    Prefix: !shop
 
     Synax:
 
     Synax:
-        !goal COMMAND ARGS
+      !shop COMMAND ARGS
 
     Commands:
       help - show this help
 
     Commands:
       help - show this help
-      add - add a goal
-      add-task ID - add a task under the goal specified by ID
-      add-vision - add a new vision (collection of goals)
-      close-goal ID - mark goal done by ID
-      close-vision ID - mark vision as complete by ID
-      done ID - mark task done by ID
-      list - list incomplete goals
-      list-all - list everything
-      list-done - list completed goals
-      print GOAL_ID - print a goal and all tasks
-      print-vision ID - print a vision and all goals
-      set-vision GOAL_ID VISION_ID- associate GOAL_ID with VISION_ID
-      visions - list incomplete visions
+      extra.help - show extended help
+      add  - add an item to shop for
+      add.store - add a store
+      stores - list all stores
+      at STORE_ID - (!shop at STORE_ID) list all items assigned to store and use this store for future commands
+      assign ITEM_ID - assign item to last used store id
+      buy - mark item as purchased
+      clear STORE_ID - clear all purchased items for STORE_ID from database
+      list - re-show list from last used store
+    '''
+    extended_help = '''
+      assign.item.to.store ITEM_ID STORE_ID - plan to shop for at store for item
+      clear.all STORE_ID - clear **all** items for STORE_ID from database
+      remove.item ITEM_ID - remove a shopping item from the datatbase
+      remove.store STORE_ID - remove a store from the datatbase (requires clearing the list first)
+      setup - run one time database setup
+      unsorted - list all items not assigned to any store
+
     '''
 
     if match.command('setup'):
         result = Data().setup()
         return [result]
 
     '''
 
     if match.command('setup'):
         result = Data().setup()
         return [result]
 
+    if match.command('stores'):
+        items = Data().get_stores()
+        results = ['List of Stores']
+        for item in items:
+            results.append(str(item))
+        return results
+
     if match.command('add'):
         new = ' '.join(match.args()[1:])
     if match.command('add'):
         new = ' '.join(match.args()[1:])
-        result = Data().add_goal(new)
-        return [f'Goal added with id {result}']
-
-    if match.command('list'):
-        goals = Data().get_all_goals()
-        results = ['# Goals list...']
-        for goal in goals:
-            results.append(str(goal))
+        result = Data().add_item(new)
+        results = [f'Item added with id {result}']
+        for item in Data().get_last_shopping_list():
+            results.append(str(item))
         return results
 
         return results
 
-
-    if match.command('list-done'):
-        goals = Data().get_done_goals()
-        results = ['# Completed Goals...']
-        for goal in goals:
-            results.append(str(goal))
+    if match.command('add.store'):
+        new = ' '.join(match.args()[1:])
+        result = Data().add_store(new)
+        return [f'Store added with id {result}']
+
+    if match.command('assign.item.to.store'):
+        item_id  = int(match.args()[1])
+        store_id = int(match.args()[2])
+        Data().assign_store(item_id, store_id)
+        return ['Success']
+
+    if match.command('assign'):
+        item_id  = int(match.args()[1])
+        Data().assign_last_store(item_id)
+
+        # Now print the list for the assigned store
+        items = Data().get_last_shopping_list()
+        results = ['Shopping List']
+        for item in items:
+            results.append(str(item))
         return results
 
         return results
 
-
-    if match.command('add-task'):
-        goal_id = int(match.args()[1])
-        new = ' '.join(match.args()[2:])
-        result = Data().add_task(goal_id=goal_id, name=new)
-        goal,tasks = Data().get_goal(goal_id)
-        results = pretty_print(goal, tasks)
+    if match.command('buy'):
+        items = ' '.join(match.args()[1:])
+        results = Data().purchase_items(items)
+        # results = []
+        # for item in Data().get_last_shopping_list():
+        #    results.append(str(item))
         return results
         return results
-    # return [f'Added task with id {result}']
 
 
-    if match.command('add-vision'):
-        new = ' '.join(match.args()[1:])
-        result = Data().add_vision(new)
-        return [f'Vision added with id {result}']
-
-    if match.command('print'):
-        goal_id = int(match.args()[1])
-        logger.debug(f'Searching for goal {goal_id}...')
-        goal,tasks = Data().get_goal(goal_id)
-        results = pretty_print(goal, tasks)
+    if match.command('clear'):
+        store_name = ' '.join(match.args()[1:])
+        results = Data().clear_list(store_name)
         return results
 
         return results
 
-
-    if match.command('print-vision'):
-        get_id = int(match.args()[1])
-        vision,goals = Data().get_vision(get_id)
-        results = pretty_print(vision, goals)
+    if match.command('clear.all'):
+        store_name = ' '.join(match.args()[1:])
+        results = Data().clear_list(store_name, clear_all=True)
         return results
 
         return results
 
-    if match.command('close-goal'):
-        goal_id = int(match.args()[1])
-        vision_id = Data().complete_goal(goal_id)
-        vision,goals = Data().get_vision(vision_id)
-        results = pretty_print(vision, goals)
+    if match.command('at'):
+        store_name = ' '.join(match.args()[1:])
+        items = Data().get_shopping_list(store_name)
+        results = ['Shopping List']
+        for item in items:
+            results.append(str(item))
         return results
 
         return results
 
-    if match.command('close-vision'):
-        vision_id = int(match.args()[1])
-        Data().complete_vision(vision_id)
-        vision,goals = Data().get_vision(vision_id)
-        results = pretty_print(vision, goals)
+    if match.command('list'):
+        items = Data().get_last_shopping_list()
+        results = ['Shopping List']
+        for item in items:
+            results.append(str(item))
         return results
 
 
         return results
 
 
-    if match.command('done'):
-        task_id = int(match.args()[1])
-        goal_id = Data().complete_task(task_id)
-        goal,tasks = Data().get_goal(goal_id)
-        results = pretty_print(goal, tasks)
+    if match.command('past'):
+        store_name = ' '.join(match.args()[1:])
+        items = Data().list_purchases(store_name)
+        results = ['Past purchases at {store_name}']
+        for item in items:
+            results.append(str(item))
         return results
         return results
+    
 
 
-    if match.command('list-all'):
-        goals = Data().get_all_goals()
-        results = ['# Everything is...']
-        for goal in goals:
-            _,tasks = Data().get_goal(goal.id)
-            details = pretty_print(goal, tasks)
-            results += details
+    if match.command('unsorted'):
+        items = Data().get_unsorted_list()
+        results = ['Items assigned to no store']
+        for item in items:
+            results.append(str(item))
         return results
 
         return results
 
-    if match.command('visions'):
-        items = Data().get_all_visions()
-        results = ['# Visions']
-        if not items:
-            results.append('-- No current visions --')
+    if match.command('remove.item'):
+        item_id = ' '.join(match.args()[1:])
+        Data().remove_item(item_id)
+        return ['Success']
 
 
-        for item in items:
-            results.append(item)
-        return results
+    if match.command('remove.store'):
+        store_id = ' '.join(match.args()[1:])
+        Data().remove_store(store_id)
+        return ['Success']
 
 
 
 
-    if match.command('set-vision'):
-        goal_id = int(match.args()[1])
-        vision_id = int(match.args()[2])
-        Data().assign_vision(goal_id=goal_id, vision_id=vision_id)
-        vision,goals = Data().get_vision(vision_id)
-        results = pretty_print(vision, goals)
-        return results
+    if match.command('extra.help'):
+        return [extended_help]
 
 
-    return [do_goal.__doc__]
+    return [do_shop.__doc__]
 
 
-async def goal_bot(room, message, bot):
+async def shop_bot(room, message, bot):
     match = botlib.MessageMatch(room, message, bot, PREFIX)
 
     if not match.is_not_from_this_bot() and match.prefix():
     match = botlib.MessageMatch(room, message, bot, PREFIX)
 
     if not match.is_not_from_this_bot() and match.prefix():
@@ -162,11 +162,14 @@ async def goal_bot(room, message, bot):
 
     try:
         if match.prefix():
 
     try:
         if match.prefix():
-            result_lines = await do_goal(match)
+            result_lines = await do_shop(match)
             for line in result_lines:
                 await bot.api.send_text_message(
                     room.room_id, str(line))
     except Exception as ex:
             for line in result_lines:
                 await bot.api.send_text_message(
                     room.room_id, str(line))
     except Exception as ex:
-        return ['Ye cannot get ye flask.']
+        for line in ['You have:', '    no tea', str(ex)]:
+            await bot.api.send_text_message(
+                room.room_id, str(line))
+