41 lines
1.9 KiB
Python
41 lines
1.9 KiB
Python
import logging.config
|
||
from pybit.unified_trading import HTTP
|
||
import app.telegram.database.requests as rq
|
||
from logger_helper.logger_helper import LOGGING_CONFIG
|
||
|
||
logging.config.dictConfig(LOGGING_CONFIG)
|
||
logger = logging.getLogger("get_valid_symbol")
|
||
|
||
|
||
async def get_valid_symbols(user_id: int, symbol: str) -> bool:
|
||
"""
|
||
Проверяет существование торговой пары на Bybit в категории 'linear'.
|
||
|
||
Эта функция получает API-ключи пользователя из базы данных и
|
||
с помощью Bybit API проверяет наличие данного символа в списке
|
||
торговых инструментов категории 'linear'.
|
||
|
||
Args:
|
||
user_id (int): Идентификатор пользователя Telegram.
|
||
symbol (str): Торговый символ (валютная пара), например "BTCUSDT".
|
||
|
||
Returns:
|
||
bool: Возвращает True, если торговая пара существует, иначе False.
|
||
|
||
Raises:
|
||
Исключения подавляются и вызывается False, если произошла ошибка запроса к API.
|
||
"""
|
||
api_key = await rq.get_bybit_api_key(user_id)
|
||
secret_key = await rq.get_bybit_secret_key(user_id)
|
||
client = HTTP(api_key=api_key, api_secret=secret_key)
|
||
|
||
try:
|
||
resp = client.get_instruments_info(category='linear', symbol=symbol)
|
||
# Проверка наличия результата и непустого списка инструментов
|
||
if resp.get('retCode') == 0 and resp.get('result') and resp['result'].get('list'):
|
||
return len(resp['result']['list']) > 0
|
||
return False
|
||
except Exception as e:
|
||
logging.error(f"Ошибка при получении списка инструментов: {e}")
|
||
return False
|