]> apps.delaporte.us Git - matrix-goal-bot.git/blobdiff - matrix_goal_bot/bot.py
Allow completion of multiple tasks
[matrix-goal-bot.git] / matrix_goal_bot / bot.py
index 9b630f867e88de6479f1487a2524119b39a33344..3b4f2406cba7eb7819d5ff94cf01e1fce2ee10ce 100644 (file)
@@ -4,7 +4,7 @@ import os
 
 import simplematrixbotlib as botlib
 
-from goals.db import Data, pretty_print
+from .db import Data, pretty_print
 
 SERVER = os.environ.get('MATRIX_SERVER')
 BOT_NAME = os.environ.get('GOAL_BOT')
@@ -47,6 +47,7 @@ async def do_goal(match):
       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
+      visionless - list goals with no set vision
     '''
 
     if match.command('setup'):
@@ -66,7 +67,7 @@ async def do_goal(match):
         return results
 
 
-    if match.command('list-done'):
+    if match.command('list.done'):
         goals = Data().get_done_goals()
         results = ['# Completed Goals...']
         for goal in goals:
@@ -74,7 +75,7 @@ async def do_goal(match):
         return results
 
 
-    if match.command('add-task'):
+    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)
@@ -83,7 +84,7 @@ async def do_goal(match):
         return results
     # return [f'Added task with id {result}']
 
-    if match.command('add-vision'):
+    if match.command('add.vision'):
         new = ' '.join(match.args()[1:])
         result = Data().add_vision(new)
         return [f'Vision added with id {result}']
@@ -96,35 +97,36 @@ async def do_goal(match):
         return results
 
 
-    if match.command('print-vision'):
+    if match.command('print.vision'):
         get_id = int(match.args()[1])
         vision,goals = Data().get_vision(get_id)
         results = pretty_print(vision, goals)
         return results
 
-    if match.command('close-goal'):
+    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)
         return results
 
-    if match.command('close-vision'):
+    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)
         return results
 
-
     if match.command('done'):
-        task_id = int(match.args()[1])
-        goal_id = Data().complete_task(task_id)
+        ids = match.args()[1:]
+        for task_id in ids:
+            goal_id = Data().complete_task(int(task_id))
+        # Print the goal of the last closed task
         goal,tasks = Data().get_goal(goal_id)
         results = pretty_print(goal, tasks)
         return results
 
-    if match.command('list-all'):
+    if match.command('list.all'):
         goals = Data().get_all_goals()
         results = ['# Everything is...']
         for goal in goals:
@@ -143,8 +145,17 @@ async def do_goal(match):
             results.append(item)
         return results
 
+    if match.command('visions'):
+        items = Data().visionless()
+        results = ['# Goals with no vision']
+        if not items:
+            results.append('-- No visionless goals --')
+
+        for item in items:
+            results.append(item)
+        return results
 
-    if match.command('set-vision'):
+    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)
@@ -152,9 +163,19 @@ async def do_goal(match):
         results = pretty_print(vision, goals)
         return results
 
+
+    if match.command('rename'):
+        goal_id = int(match.args()[1])
+        name = ' '.join(match.args()[2:])
+        Data().rename_goal(goal_id=goal_id, name=name)
+        goal,tasks = Data().get_goal(goal_id)
+        results = pretty_print(goal, tasks)
+        return results
+
+    # Help text
     return [do_goal.__doc__]
 
-async def goal_bot(room, message):
+async def goal_bot(room, message, bot):
     match = botlib.MessageMatch(room, message, bot, PREFIX)
 
     if not match.is_not_from_this_bot() and match.prefix():
@@ -167,6 +188,10 @@ async def goal_bot(room, message):
                 await bot.api.send_text_message(
                     room.room_id, str(line))
     except Exception as ex:
-        return ['Ye cannot get ye flask.']
-
+        line ='Ye cannot get ye flask.'
+        await bot.api.send_text_message(
+                    room.room_id, str(line))
+        await bot.api.send_text_message(
+                    room.room_id, str(ex))
+