diff --git a/README.md b/README.md index 1d7c874..47ded11 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,13 @@ +# USAGE + +Для развертывания бота необходимо внести свой токен в файл +.env, запись должна иметь вид: BOT_TOKEN=your_token. + +Для того чтобы пользователь мог пользоваться ботом, ему +необходимо поделиться номером телефона нажав на соответствующую +кнопку (номер не будет виден другим пользователям, используется +отправляется единожды для сверки с данными в БД). + # TODO - [x] Написать базовый функционал @@ -10,3 +20,4 @@ - [x] Изменить названия комнта в локальном json - [x] Ограничить логи внутри докера - [x] Избавиться от json файла, переместить токен в .env файл, информацию от замков получать через запрос по API +- [x] Избавиться от модуля requests diff --git a/bot_config.json b/bot_config.json deleted file mode 100644 index 180ecb8..0000000 --- a/bot_config.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "bot_token": "", - "user_api_url": "https://papi.dataekb.ru/check_access", - "locks": { - "2642686605": { - "ip": "10.9.1.25", - "pass": "F901C40A" - }, - "2642179854": { - "ip": "10.9.1.28", - "pass": "F901C40A" - }, - "2634952899": { - "ip": "10.9.1.27", - "pass": "F901C40A" - } - }, - "locks_map": { - "2642686605": "ЦОД3+ЦОД_Т2", - "2642179854": "ЭТАЖ_5", - "2634952899": "ЭТАЖ_4" - } -} diff --git a/handlers/doors_handler.py b/handlers/doors_handler.py index b4e95c3..577399a 100644 --- a/handlers/doors_handler.py +++ b/handlers/doors_handler.py @@ -1,6 +1,4 @@ -import asyncio -import requests - +import aiohttp from aiogram import Dispatcher from aiogram.types import Message @@ -27,24 +25,20 @@ def register_open_door_handler(dp: Dispatcher): return url = f"http://{lock_info['ip']}/cgi-bin/ext" - auth_info = ("ext", lock_info["code"]) + auth_info = aiohttp.BasicAuth(login="ext", password=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}" - ) + async with aiohttp.ClientSession() as session: + async with session.post( + url, auth=auth_info, data=payload, headers=headers, timeout=5 + ) as response: + if response.status == 200: + await msg.answer("Открыто") + else: + await msg.answer( + f"Ошибка при открытии замка. Код ошибки: {response.status}" + ) except Exception as e: await msg.answer(f"Исключение: {str(e)}") diff --git a/locks_api.py b/locks_api.py index 91e6c25..a54307e 100644 --- a/locks_api.py +++ b/locks_api.py @@ -20,7 +20,7 @@ async def fetch_locks() -> dict: if not data or not isinstance(data, list): print("Неверный формат данных о замках, ожидался список.") return {} - locks_dict = data[0] # предполагается, что список содержит один словарь + locks_dict = data[0] return locks_dict except Exception as e: print(f"Ошибка при разборе данных замков: {str(e)}") diff --git a/requirements.txt b/requirements.txt index c49d87d..b8f9bf0 100755 --- a/requirements.txt +++ b/requirements.txt @@ -14,7 +14,6 @@ multidict==6.4.3 propcache==0.3.1 pydantic==2.11.3 pydantic_core==2.33.1 -requests==2.32.3 typing-inspection==0.4.0 typing_extensions==4.13.2 urllib3==2.4.0