diff --git a/bot.py b/bot.py index 1f6c417..c43b9f6 100644 --- a/bot.py +++ b/bot.py @@ -68,6 +68,7 @@ class Bot: self, adjust_perspective=True, timeout: float = 10.0, + chat_action_fn=None, ) -> List[cv2.typing.MatLike]: privacy_mode = self.tapo.getPrivacyMode() @@ -99,9 +100,11 @@ class Bot: aruco_params = aruco.DetectorParameters() t0 = time.time() + last_chat_action = 0 print("Taking image with ArUco markers...") while len(aruco_corners) < 4: - if time.time() - t0 > timeout: + delta = time.time() - t0 + if delta > timeout: a = self.last_aruco_corners.copy() a.update(aruco_corners) aruco_corners = a @@ -117,6 +120,11 @@ class Bot: self.tapo.setDayNightMode("auto") return [pretty_image] + if delta - last_chat_action > 3: + last_chat_action = delta + if chat_action_fn: + chat_action_fn() + ret, annotated_image = vcap.read() if not ret: continue @@ -189,9 +197,15 @@ class Bot: return [warped, annotated_image] async def _photo_command(self, chat_id: int, adjust_perspective: bool = True): - await self.bot.send_chat_action(chat_id=chat_id, action="upload_photo") + async def chat_action_fn(): + await self.bot.send_chat_action(chat_id=chat_id, action="upload_photo") - photos = await self.take_photo(adjust_perspective=adjust_perspective) + await chat_action_fn() + + photos = await self.take_photo( + adjust_perspective=adjust_perspective, + chat_action_fn=lambda: asyncio.run(chat_action_fn()) + ) jpegs = [cv2.imencode(".jpg", photo)[1].tobytes() for photo in photos] media = [ @@ -319,7 +333,7 @@ class Bot: ) async def take_photo( - self, adjust_perspective=True, timeout=10.0 + self, adjust_perspective=True, timeout=10.0, chat_action_fn=None ) -> List[cv2.typing.MatLike]: item_state = await self._get_item_state() if item_state == "OFF": @@ -328,7 +342,7 @@ class Bot: try: return await asyncio.get_event_loop().run_in_executor( - self.executor, self._take_photo_blocking, adjust_perspective, timeout + self.executor, self._take_photo_blocking, adjust_perspective, timeout, chat_action_fn ) finally: if item_state == "OFF":