]> apps.delaporte.us Git - matrix-goal-bot.git/blob - bot.py
Add ability to complete tasks
[matrix-goal-bot.git] / bot.py
1 from datetime import datetime as dt
2 import logging
3 import os
4
5 import simplematrixbotlib as botlib
6
7 from goals.db import Data, pretty_print
8
9
10 SERVER = os.environ.get('MATRIX_SERVER')
11 BOT_NAME = os.environ.get('GOAL_BOT')
12 BOT_PWD = os.environ.get('GOAL_BOT_PWD')
13
14 DATE_FORMAT = '%Y-%m-%d'
15
16 def today():
17 return dt.now().strftime(DATE_FORMAT)
18
19 creds = botlib.Creds(SERVER, BOT_NAME, BOT_PWD)
20 bot = botlib.Bot(creds)
21 PREFIX = '!goal'
22
23 logger = logging.getLogger(__name__)
24 logging.basicConfig(filename='goals.log', encoding='utf-8', level=logging.DEBUG)
25 logging.getLogger('nio').setLevel(logging.WARNING)
26
27 async def do_goal(match):
28 '''
29 Bot help here?
30
31 '''
32 # logger.debug(f'match {str(match)}')
33 if match.command('help'):
34 return ['help']
35
36 if match.command('setup'):
37 result = Data().setup()
38 return [result]
39
40 if match.command('add'):
41 new = ' '.join(match.args()[1:])
42 result = Data().add_goal(new)
43 return [f'Goal added with id {result}']
44
45 if match.command('list'):
46 goals = Data().list_goals()
47 results = ['Goals list...']
48 for goal in goals:
49 results.append(str(goal))
50 return results
51
52 if match.command('add-task'):
53 goal_id = int(match.args()[1])
54 new = ' '.join(match.args()[2:])
55 result = Data().add_task(goal_id=goal_id, name=new)
56 return [f'Added task with id {result}']
57
58 if match.command('print'):
59 goal_id = int(match.args()[1])
60 logger.debug(f'Searching for goal {goal_id}...')
61 goal,tasks = Data().get_goal(goal_id)
62 results = pretty_print(goal, tasks)
63 return results
64
65 if match.command('goal-done'):
66 goal_id = int(match.args()[1])
67 logger.debug(f'Searching for goal {goal_id}...')
68 Data().complete_goal(goal_id)
69 goal,tasks = Data().get_goal(goal_id)
70 results = pretty_print(goal, tasks)
71 return results
72
73
74 if match.command('done'):
75 task_id = int(match.args()[1])
76 goal_id = Data().complete_task(task_id)
77 goal,tasks = Data().get_goal(goal_id)
78 results = pretty_print(goal, tasks)
79 return results
80
81 return __doc__
82
83
84 @bot.listener.on_message_event
85 async def goals(room, message):
86 match = botlib.MessageMatch(room, message, bot, PREFIX)
87
88 if not match.is_not_from_this_bot() and match.prefix():
89 return
90
91 if match.prefix():
92 result_lines = await do_goal(match)
93 for line in result_lines:
94 await bot.api.send_text_message(
95 room.room_id, str(line))
96
97
98 bot.run()
99