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 logging.config.dictConfig(LOGGING_CONFIG) logger = logging.getLogger("balance") 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) client = HTTP( api_key=api_key, api_secret=secret_key ) if api_key == 'None' or secret_key == 'None': await message.answer('⚠️ Подключите платформу для торговли', reply_markup=inline_markup.connect_bybit_api_message) return 0 try: response = client.get_wallet_balance(accountType='UNIFIED') if response['retCode'] == 0: 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: logger.error(f"Ошибка при получении общего баланса: {e}") await message.answer('⚠️ Ошибка при получении баланса') return 0