]> apps.delaporte.us Git - matrix-goal-bot.git/blobdiff - matrix_goal_bot/bot.py
Rebasing
[matrix-goal-bot.git] / matrix_goal_bot / bot.py
index 9e0b87839a8f2c75d8efb964f74b66c01ebc89d0..37cb90db1a418f2b7a0bbc3c99717b2064687d86 100644 (file)
@@ -10,9 +10,6 @@ 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)
 
 DATE_FORMAT = '%Y-%m-%d'
 
@@ -34,19 +31,23 @@ async def do_goal(match):
 
     Commands:
       help - show this help
+      extra.help - show extended 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
+      task ID - add a task under the goal specified by ID
+      close.goal ID - mark goal done 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
+    '''
+    ex_help = '''
+      add.vision - add a new vision (collection of goals)
+      close.vision ID - mark vision as complete by ID
+      list.all - list everything
+      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
+      list.done - list completed goals
+      visionless - list goals with no set vision
     '''
 
     if match.command('setup'):
@@ -73,15 +74,12 @@ async def do_goal(match):
             results.append(str(goal))
         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)
+    if match.command('task'):
+        new = ' '.join(match.args()[1:])
+        goal_id  = Data().quick_add_task(new)
         goal,tasks = Data().get_goal(goal_id)
         results = pretty_print(goal, tasks)
         return results
-    # return [f'Added task with id {result}']
 
     if match.command('add.vision'):
         new = ' '.join(match.args()[1:])
@@ -89,10 +87,15 @@ async def do_goal(match):
         return [f'Vision added with id {result}']
 
     if match.command('print'):
-        goal_id = int(match.args()[1])
+        if len(match.args()) > 1:
+            goal_id = int(match.args()[1])
+        else:
+            goal_id = Data()._get_pref_goal_id()
+
         logger.debug(f'Searching for goal {goal_id}...')
         goal,tasks = Data().get_goal(goal_id)
         results = pretty_print(goal, tasks)
+
         return results
 
 
@@ -117,8 +120,10 @@ async def do_goal(match):
         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
@@ -142,7 +147,7 @@ async def do_goal(match):
             results.append(item)
         return results
 
-    if match.command('visions'):
+    if match.command('visionless'):
         items = Data().visionless()
         results = ['# Goals with no vision']
         if not items:
@@ -160,6 +165,24 @@ 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
+
+    if match.command('remove'):
+        task_id  = int(match.args()[1])
+        result = Data().remove_task(task_id)
+        return [result]
+
+    if match.command('extra.help'):
+        return [ex_help]
+
+    # Help text
     return [do_goal.__doc__]
 
 async def goal_bot(room, message, bot):
@@ -178,5 +201,7 @@ async def goal_bot(room, message, bot):
         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))