import asyncio import requests from aiogram import Dispatcher from aiogram.types import Message from auth import AUTHORIZED_USERS, is_user_auth from config import config def register_open_door_handler(dp: Dispatcher): @dp.message() async def open_door_handler(msg: Message): print( f"DEBUG: Получено сообщение от пользователя {msg.from_user.id}: '{msg.text}'" ) user_id = msg.from_user.id if not is_user_auth(user_id): await msg.answer( "Доступ запрщен. Необходимо предоставить свой номер телефона." ) else: print("OK") phone = AUTHORIZED_USERS.get(user_id) print(AUTHORIZED_USERS) print(f"***user_id={user_id},phone={phone}***") user_conf = config.get("users", {}).get(phone) print(f"***phone={phone}, user_conf={user_conf}***") # allowed_locks = user_conf.get("locks", []) # print(f"***allowed_locks={allowed_locks}***") # if msg.text not in allowed_locks: # print("**********************") # print(f"***{allowed_locks}***") # print(f"***{msg.text}***") # print("**********************") # return lock_conf = config.get("locks", {}).get(msg.text) if not lock_conf: await msg.answer("Информации по замку не найдено") return url = f"http://{lock_conf['ip']}/cgi-bin/ext" auth_info = ("ext", lock_conf["auth_api"]) payload = f"CARD={user_conf['access_card']}&DIR=0" headers = {"Content-Type": "application/x-www-form-urlencoded"} try: print( f"***DEBUG: Отправляю запрос к {url} c payload: {payload} и auth: {auth_info}" ) response = await asyncio.to_thread( requests.post, url, auth=auth_info, data=payload, headers=headers, timeout=5, ) print( f"DEBUG: URL: {url}, status: {response.status_code}, response: {response.text}" ) 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)}")