]> us-delaporte.pagekite.me Git - matrix-goal-bot.git/blobdiff - bot.py
Fixup
[matrix-goal-bot.git] / bot.py
diff --git a/bot.py b/bot.py
index 839bf0719b3136d914a168fbc69d2011554753a5..d57358d09a4df26dc55ab9a92475ea595e50ec64 100644 (file)
--- a/bot.py
+++ b/bot.py
@@ -1,13 +1,11 @@
-import os
 from datetime import datetime as dt
 from datetime import datetime as dt
+import logging
+import os
 
 import simplematrixbotlib as botlib
 
 
 import simplematrixbotlib as botlib
 
-from school import (get_assignments, STUDENTS)
-
-from chore.db import Data as ChoreData
+from goals.db import Data, pretty_print
 
 
-CHORES = ChoreData()
 
 SERVER = os.environ.get('MATRIX_SERVER')
 BOT_NAME = os.environ.get('GOAL_BOT')
 
 SERVER = os.environ.get('MATRIX_SERVER')
 BOT_NAME = os.environ.get('GOAL_BOT')
@@ -22,130 +20,154 @@ creds = botlib.Creds(SERVER, BOT_NAME, BOT_PWD)
 bot = botlib.Bot(creds)
 PREFIX = '!goal'
 
 bot = botlib.Bot(creds)
 PREFIX = '!goal'
 
-@bot.listener.on_message_event
-async def goals(room, message):
-    match = botlib.MessageMatch(room, message, bot, PREFIX)
-
-    if not match.is_not_from_this_bot() and match.prefix():
-        return
+logger = logging.getLogger(__name__)
+logging.basicConfig(filename='goals.log', encoding='utf-8', level=logging.DEBUG)
+logging.getLogger('nio').setLevel(logging.WARNING)
 
 
-    if match.command("echo"):
-        await bot.api.send_text_message(
-            room.room_id, " ".join(arg for arg in match.args())
-            )
-
-    help_text = '''
-        # Print this help text
-        !school help
-        # List available students
-        !school list
-        # Get today's assignments
-        !school get [NAME]
-        # Get an assignment for a date
-        !school get [Name] 2026-03-09
+async def do_goal(match):
+    '''
+    Prefix: !goal
+
+    Synax:
+        !goal COMMAND ARGS
+
+    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
     '''
     '''
-    if match.command("help"):
-        await bot.api.send_text_message(
-            room.room_id, help_text)
-
-    if match.command("list"):
-        student_list = f"Known students are {STUDENTS}."
-        await bot.api.send_text_message(
-            room.room_id, student_list)
-
-    person = ''
-    if match.command("get"):
-        print(match.args())
-        if(len(match.args()) < 2):
-            result = ['Please specify person to get assignments for.']
-        else:
-            person = match.args()[1]
-
-        if(len(match.args()) > 2):
-            day = match.args()[2]
-        else:
-            day = today() 
 
 
-        if(person and day):
-            await bot.api.send_text_message(room.room_id, f'Fetching assignments for {person} on {day}')
-            results = get_assignments(person, day)
-        else:
-            results = ['Oops.']
+    if match.command('setup'):
+        result = Data().setup()
+        return [result]
 
 
-        if len(results) < 3:
-            results = [f'No assignments found for {person} on {day}.']
+    if match.command('add'):
+        new = ' '.join(match.args()[1:])
+        result = Data().add_goal(new)
+        return [f'Goal added with id {result}']
 
 
-        for line in results:
+    if match.command('list'):
+        goals = Data().get_all_goals()
+        results = ['# Goals list...']
+        for goal in goals:
+            results.append(str(goal))
+        return results
+
+
+    if match.command('list-done'):
+        goals = Data().get_done_goals()
+        results = ['# Completed Goals...']
+        for goal in goals:
+            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)
+        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:])
+        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)
+        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)
+        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)
+        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)
+        return results
 
 
-            await bot.api.send_text_message(
-                room.room_id, line)
 
 
+    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)
+        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
+        return results
+
+    if match.command('visions'):
+        items = Data().get_all_visions()
+        results = ['# Visions']
+        if not items:
+            results.append('-- No current visions --')
+
+        for item in items:
+            results.append(item)
+        return results
+
+
+    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
+
+    return [do_goal.__doc__]
 
 @bot.listener.on_message_event
 
 @bot.listener.on_message_event
-async def chores(room, message):
-    match = botlib.MessageMatch(room, message, bot, '!chore')
+async def goals(room, message):
+    match = botlib.MessageMatch(room, message, bot, PREFIX)
 
     if not match.is_not_from_this_bot() and match.prefix():
         return
 
 
     if not match.is_not_from_this_bot() and match.prefix():
         return
 
-    if match.command('list'):
-
-        await bot.api.send_text_message(
-                room.room_id, 'Listing chores...')
-
-        result = CHORES.list()
-        for item in result:
-            await bot.api.send_text_message(
-                room.room_id, item)
-
-        await bot.api.send_text_message(
-                room.room_id, '-- End of List --')
-    
-    if match.command('setup'):
-        await bot.api.send_text_message(
-                room.room_id, f'Doing chore setup...')
-        result = CHORES.setup()
-        result = await bot.api.send_text_message(
-                room.room_id, f'Result: {result}')
-
-
-    if match.command('add'):
-        new_chore = ' '.join(match.args()[1:])
-
-        await bot.api.send_text_message(
-                room.room_id, f'Adding chore...{new_chore}...')
-
-        result = CHORES.add(new_chore)
-        await bot.api.send_text_message(
-            room.room_id, result)
-
-
-
-    if match.command('check'):
-        chore_id = match.args()[1]
-
-        result = CHORES.check(chore_id)
-        await bot.api.send_text_message(
-            room.room_id, result)
-
-    if match.command('done'):
-        chore_id = match.args()[1]
-        result = CHORES.done(chore_id)
-        await bot.api.send_text_message(
-            room.room_id, result)
-
-    if match.command('undo'):
-        chore_id = match.args()[1]
-        result = CHORES.undo(chore_id)
-        await bot.api.send_text_message(
-            room.room_id, result)
-
-
-    if match.command('remove'):
-        chore_id = match.args()[1]
-        result = CHORES.remove(chore_id)
-        await bot.api.send_text_message(
-            room.room_id, result)
+    try:
+        if match.prefix():
+            result_lines = await do_goal(match)
+            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.']
 
 
 bot.run()
 
 
 bot.run()