From bdf46124bdebecde26fe13d114e8319aeafcb934 Mon Sep 17 00:00:00 2001 From: Jarno Rankinen Date: Wed, 26 Oct 2022 22:49:22 +0300 Subject: [PATCH] cam.py: need to be bot owner for config commands, 'action snapshot' gets image from Motion, alias 'now' for 'action snapshot' --- modules/cam.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/modules/cam.py b/modules/cam.py index 936d646..965a676 100644 --- a/modules/cam.py +++ b/modules/cam.py @@ -6,12 +6,13 @@ import requests class MatrixModule(BotModule): def __init__(self,name): super().__init__(name) - self.motionurl = 'http://192.168.1.220:8080' + self.motionurl = 'http://localhost:8080' self.allowed_cmds = { 'config': ['list','set','get','write'], 'detection': ['status','connection','start','pause'], 'action': ['eventstart','eventend','snapshot','restart','quit','end'] } + self.restricted_cmds = ['list','set','get','write','start','pause','restart','quit','end'] self.helptext = """Control the motion daemon. Available commands: - config list|set|get|write @@ -60,16 +61,23 @@ class MatrixModule(BotModule): except ValueError: cmdindex = 0 camid = '0' - if args[cmdindex] not in self.allowed_cmds: + category = args[cmdindex] + ## Quick commands start + if category == 'now': + await self.get_snapshot(camid, bot, room, event) + return + ## Quick commands end + if category not in self.allowed_cmds: await bot.send_text(room, f'Unknown category: "{args[1]}"', event) return - category = args[cmdindex] cmdindex = cmdindex + 1 if args[cmdindex] not in self.allowed_cmds[category]: await bot.send_text(room, f'Unknown command: "{args[cmdindex]}"', event) return command = args[cmdindex] req_url = f'{self.motionurl}/{camid}/{category}/{command}' + if command in self.restricted_cmds: + bot.must_be_owner(event) if category == 'config' and command == 'get': queryparam = args[cmdindex + 1] req_url = f'{req_url}?query={queryparam}' @@ -77,8 +85,15 @@ class MatrixModule(BotModule): param = args[cmdindex + 1] value = args[cmdindex + 2] req_url = f'{req_url}?{param}={value}' + if camid != 0 and command == 'snapshot': + await self.get_snapshot(camid, bot, room, event) resp = requests.get(req_url).text await bot.send_text(room, resp, event) + async def get_snapshot(self, camid, bot, room, event): + imgurl = f"{self.motionurl.replace(':8080',':8081')}/{camid}/current" + self.logger.info(f"Fetching image from {imgurl}") + await bot.upload_and_send_image(room, imgurl, event) + def help(self): return self.helptext.splitlines()[0]