diff --git a/BybitBot_API.py b/BybitBot_API.py index 6e3c9d7..60ef27f 100644 --- a/BybitBot_API.py +++ b/BybitBot_API.py @@ -1,24 +1,25 @@ import asyncio - +import logging.config from aiogram import Bot, Dispatcher from aiogram.filters import Command, CommandStart from aiogram.types import Message from app.telegram.database.models import async_main -from app.telegram.handlers.handlers import router -from app.telegram.functions.main_settings.settings import router_main_settings +from app.telegram.handlers.handlers import router +from app.telegram.functions.main_settings.settings import router_main_settings from app.telegram.functions.risk_management_settings.settings import router_risk_management_settings from app.telegram.functions.condition_settings.settings import condition_settings_router from app.services.Bybit.functions.Add_Bybit_API import router_register_bybit_api from app.services.Bybit.functions.functions import router_functions_bybit_trade +from logger_helper.logger_helper import LOGGING_CONFIG +from config import TOKEN_TG_BOT_1, TOKEN_TG_BOT_2, TOKEN_TG_BOT_3 -from config import TOKEN_TG_BOT +logging.config.dictConfig(LOGGING_CONFIG) +logger = logging.getLogger("main") -from app.telegram.logs import logger - -bot = Bot(token=TOKEN_TG_BOT) +bot = Bot(token=TOKEN_TG_BOT_1) dp = Dispatcher() async def main(): @@ -35,6 +36,7 @@ async def main(): if __name__ == '__main__': try: + logger.info("Bot is on") asyncio.run(main()) except KeyboardInterrupt: - print("Bot is off") + logger.info("Bot is off") diff --git a/app/services/Bybit/functions/Add_Bybit_API.py b/app/services/Bybit/functions/Add_Bybit_API.py index 21761b0..5b4f614 100644 --- a/app/services/Bybit/functions/Add_Bybit_API.py +++ b/app/services/Bybit/functions/Add_Bybit_API.py @@ -1,5 +1,6 @@ from aiogram import F, Router - +import logging.config +from logger_helper.logger_helper import LOGGING_CONFIG import app.telegram.Keyboards.inline_keyboards as inline_markup import app.telegram.Keyboards.reply_keyboards as reply_markup @@ -10,6 +11,9 @@ from aiogram.types import Message, CallbackQuery from aiogram.fsm.state import State, StatesGroup from aiogram.fsm.context import FSMContext +logging.config.dictConfig(LOGGING_CONFIG) +logger = logging.getLogger("add_bybit_api") + router_register_bybit_api = Router() class state_reg_bybit_api(StatesGroup): diff --git a/app/services/Bybit/functions/balance.py b/app/services/Bybit/functions/balance.py index 89daef4..3168bc0 100644 --- a/app/services/Bybit/functions/balance.py +++ b/app/services/Bybit/functions/balance.py @@ -1,12 +1,29 @@ import app.telegram.database.requests as rq import app.telegram.Keyboards.inline_keyboards as inline_markup - +import logging.config +from logger_helper.logger_helper import LOGGING_CONFIG from pybit.unified_trading import HTTP -import logging -logging.basicConfig(level=logging.DEBUG) +logging.config.dictConfig(LOGGING_CONFIG) +logger = logging.getLogger("balance") -async def get_balance(tg_id, message): + +async def get_balance(tg_id: int, message) -> float: + """ + Асинхронно получает общий баланс пользователя на Bybit. + + Процедура: + - Получает API ключ и секрет пользователя из базы данных. + - Если ключи не заданы, отправляет пользователю сообщение с предложением подключить платформу. + - Создает клиент Bybit с ключами. + - Запрашивает общий баланс по типу аккаунта UNIFIED. + - Если ответ успешен, возвращает баланс в виде float. + - При ошибках API или исключениях логирует ошибку и уведомляет пользователя. + + :param tg_id: int - идентификатор пользователя Telegram + :param message: объект сообщения для отправки ответов пользователю + :return: float - общий баланс пользователя; 0 при ошибке или отсутствии ключей + """ api_key = await rq.get_bybit_api_key(tg_id) secret_key = await rq.get_bybit_secret_key(tg_id) @@ -16,7 +33,8 @@ async def get_balance(tg_id, message): ) if api_key == 'None' or secret_key == 'None': - await message.answer('⚠️ Подключите платформу для торговли', reply_markup=inline_markup.connect_bybit_api_markup) + await message.answer('⚠️ Подключите платформу для торговли', + reply_markup=inline_markup.connect_bybit_api_markup) return 0 try: @@ -25,9 +43,10 @@ async def get_balance(tg_id, message): total_balance = response['result']['list'][0].get('totalWalletBalance', '0') return total_balance else: + logger.error(f"Ошибка API: {response.get('retMsg')}") await message.answer(f"⚠️ Ошибка API: {response.get('retMsg')}") return 0 except Exception as e: - logging.error(f"Ошибка при получении общего баланса: {e}") + logger.error(f"Ошибка при получении общего баланса: {e}") await message.answer('⚠️ Ошибка при получении баланса') - return 0 \ No newline at end of file + return 0