import asyncio import requests from aiogram import Dispatcher from aiogram.types import Message from auth import AUTHORIZED_USERS, is_user_auth from locks_api import get_lock_by_label def register_open_door_handler(dp: Dispatcher): @dp.message() async def open_door_handler(msg: Message): user_id = msg.from_user.id if not is_user_auth(user_id): await msg.answer("Доступ запрещён. Предоставьте номер телефона.") return user_data = AUTHORIZED_USERS.get(user_id) if not user_data: await msg.answer("Ошибка авторизации.") return lock_info = await get_lock_by_label(msg.text) if not lock_info: await msg.answer("Информация по замку не найдена.") return url = f"http://{lock_info['ip']}/cgi-bin/ext" auth_info = ("ext", lock_info["code"]) payload = f"CARD={user_data['card']}&DIR=0" headers = {"Content-Type": "application/x-www-form-urlencoded"} try: response = await asyncio.to_thread( requests.post, url, auth=auth_info, data=payload, headers=headers, timeout=5, ) if response.status_code == 200: await msg.answer("Открыто") else: await msg.answer( f"Ошибка при открытии замка. Код ошибки: {response.status_code}" ) except Exception as e: await msg.answer(f"Исключение: {str(e)}")