]>
us-delaporte.pagekite.me Git - matrix-goal-bot.git/blob - matrix_goal_bot/bot.py
9e15be4dbe526984c587bf5cfa5cd23563577d6a
9 extra.help - show extended help
11 task ID - add a task under the goal specified by ID
12 close.goal ID - mark goal done by ID
13 done ID - mark task done by ID
14 list - list incomplete goals
15 print GOAL_ID - print a goal and all tasks
20 add.vision - add a new vision (collection of goals)
21 close.vision ID - mark vision as complete by ID
22 list.all - list everything
23 print.vision ID - print a vision and all goals
24 set.vision GOAL_ID VISION_ID- associate GOAL_ID with VISION_ID
25 visions - list incomplete visions
26 list.done - list completed goals
27 visionless - list goals with no set vision
31 from datetime
import datetime
as dt
35 import simplematrixbotlib
as botlib
37 from .db
import Data
, pretty_print
39 DATE_FORMAT
= '%Y-%m-%d'
42 return dt
.now().strftime(DATE_FORMAT
)
44 logger
= logging
.getLogger(__name__
)
47 'Ye cannot get ye flask.',
48 'Ye flask must be load bearing, or something...',
52 'How are you gentlemen?',
53 'All your base are belong to us.',
54 'You have been eaten by a groo.'
58 def __init__(self
, matrix_server
,
64 creds
= botlib
.Creds(matrix_server
, bot_name
, bot_pwd
)
65 self
.bot
= botlib
.Bot(creds
)
66 self
.prefix
= bot_prefix
67 self
.data
= Data(db_file
)
70 logger
.debug('Running goal bot...')
73 async def handle_message(self
, room
, message
):
74 logger
.debug(f
'Message: {message}')
75 match
= botlib
.MessageMatch(room
, message
, self
.bot
, self
.prefix
)
77 if not match
.is_not_from_this_bot() and match
.prefix():
78 logger
.debug(f
'Message: {message} was not for this bot.')
81 if not match
.prefix():
82 logger
.debug(f
'{message} - did not match {self.prefix}')
86 result_lines
= await self
._handle
_match
(match
)
87 for line
in result_lines
:
88 await self
.bot
.api
.send_text_message(
89 room
.room_id
, str(line
))
90 except Exception as ex
:
91 logger
.warn(f
'Caught exception: {str(ex)}')
92 await self
.bot
.api
.send_text_message(
93 room
.room_id
, str(ex
))
96 async def _handle_match(self
, match
):
97 logger
.debug(f
'Try to match {str(match)}')
99 if match
.command('setup'):
100 result
= self
.data
.setup()
103 if match
.command('add'):
104 new
= ' '.join(match
.args()[1:])
105 result
= self
.data
.add_goal(new
)
106 return [f
'Goal added with id {result}']
108 if match
.command('list'):
109 logger
.debug('Asked to list goals...')
110 goals
= self
.data
.get_all_goals()
111 results
= ['# Goals list...']
113 results
.append(str(goal
))
117 if match
.command('list.done'):
118 goals
= self
.data
.get_done_goals()
119 results
= ['# Completed Goals...']
121 results
.append(str(goal
))
124 if match
.command('task'):
125 new
= ' '.join(match
.args()[1:])
126 goal_id
= self
.data
.quick_add_task(new
)
127 goal
,tasks
= self
.data
.get_goal(goal_id
)
128 results
= pretty_print(goal
, tasks
)
131 if match
.command('add.vision'):
132 new
= ' '.join(match
.args()[1:])
133 result
= self
.data
.add_vision(new
)
134 return [f
'Vision added with id {result}']
136 if match
.command('print'):
137 if len(match
.args()) > 1:
138 goal_id
= int(match
.args()[1])
140 goal_id
= self
.data
._get
_pref
_goal
_id
()
142 logger
.debug(f
'Searching for goal {goal_id}...')
143 goal
,tasks
= self
.data
.get_goal(goal_id
)
144 results
= pretty_print(goal
, tasks
)
149 if match
.command('print.vision'):
150 get_id
= int(match
.args()[1])
151 vision
,goals
= self
.data
.get_vision(get_id
)
152 results
= pretty_print(vision
, goals
)
155 if match
.command('close.goal'):
156 goal_id
= int(match
.args()[1])
157 vision_id
= self
.data
.complete_goal(goal_id
)
158 vision
,goals
= self
.data
.get_vision(vision_id
)
159 results
= pretty_print(vision
, goals
)
162 if match
.command('close.vision'):
163 vision_id
= int(match
.args()[1])
164 self
.data
.complete_vision(vision_id
)
165 vision
,goals
= self
.data
.get_vision(vision_id
)
166 results
= pretty_print(vision
, goals
)
169 if match
.command('done'):
170 ids
= match
.args()[1:]
172 goal_id
= self
.data
.complete_task(int(task_id
))
173 # Print the goal of the last closed task
174 goal
,tasks
= self
.data
.get_goal(goal_id
)
175 results
= pretty_print(goal
, tasks
)
178 if match
.command('list.all'):
179 goals
= self
.data
.get_all_goals()
180 results
= ['# Everything is...']
182 _
,tasks
= self
.data
.get_goal(goal
.id)
183 details
= pretty_print(goal
, tasks
)
187 if match
.command('visions'):
188 items
= self
.data
.get_all_visions()
189 results
= ['# Visions']
191 results
.append('-- No current visions --')
197 if match
.command('visionless'):
198 items
= self
.data
.visionless()
199 results
= ['# Goals with no vision']
201 results
.append('-- No visionless goals --')
207 if match
.command('set.vision'):
208 goal_id
= int(match
.args()[1])
209 vision_id
= int(match
.args()[2])
210 self
.data
.assign_vision(goal_id
=goal_id
, vision_id
=vision_id
)
211 vision
,goals
= self
.data
.get_vision(vision_id
)
212 results
= pretty_print(vision
, goals
)
216 if match
.command('rename'):
217 goal_id
= int(match
.args()[1])
218 name
= ' '.join(match
.args()[2:])
219 self
.data
.rename_goal(goal_id
=goal_id
, name
=name
)
220 goal
,tasks
= self
.data
.get_goal(goal_id
)
221 results
= pretty_print(goal
, tasks
)
224 if match
.command('remove'):
225 task_id
= int(match
.args()[1])
226 result
= self
.data
.remove_task(task_id
)
229 if match
.command('extra.help'):