The entire database has been changed to PostgresSQL. The entire code has been updated.

This commit is contained in:
algizn97
2025-10-01 15:23:21 +05:00
parent e5a3de4ed8
commit 97662081ce
49 changed files with 7916 additions and 0 deletions

View File

@@ -0,0 +1,164 @@
import logging.config
from aiogram import F, Router
from aiogram.fsm.context import FSMContext
from aiogram.types import CallbackQuery, Message
import app.telegram.keyboards.inline as kbi
import database.request as rq
from app.bybit.get_functions.get_tickers import get_tickers
from app.bybit.profile_bybit import user_profile_bybit
from app.bybit.set_functions.set_leverage import (
set_leverage,
set_leverage_to_buy_and_sell,
)
from app.bybit.set_functions.set_margin_mode import set_margin_mode
from app.bybit.set_functions.set_switch_position_mode import set_switch_position_mode
from app.telegram.states.states import ChangingTheSymbolState
from logger_helper.logger_helper import LOGGING_CONFIG
logging.config.dictConfig(LOGGING_CONFIG)
logger = logging.getLogger("changing_the_symbol")
router_changing_the_symbol = Router(name="changing_the_symbol")
@router_changing_the_symbol.callback_query(F.data == "change_symbol")
async def change_symbol(callback_query: CallbackQuery, state: FSMContext) -> None:
"""
Handler for the "change_symbol" command.
Sends a message with available symbols to choose from.
"""
try:
await state.clear()
await state.set_state(ChangingTheSymbolState.symbol_state)
msg = await callback_query.message.edit_text(
text="Выберите название инструмента без лишних символов (например: BTCUSDT):",
reply_markup=kbi.symbol,
)
await state.update_data(prompt_message_id=msg.message_id)
logger.debug(
"Command change_symbol processed successfully for user: %s",
callback_query.from_user.id,
)
except Exception as e:
await callback_query.answer(
text="Произошла ошибка. Пожалуйста, попробуйте позже."
)
logger.error(
"Error processing command change_symbol for user %s: %s",
callback_query.from_user.id,
e,
)
@router_changing_the_symbol.message(ChangingTheSymbolState.symbol_state)
async def set_symbol(message: Message, state: FSMContext) -> None:
"""
Handler for user input for setting the symbol.
Updates FSM context with the selected symbol and persists the choice in database.
Sends an acknowledgement to user and clears FSM state afterward.
Args:
message (Message): Incoming message from user containing the selected symbol.
state (FSMContext): Finite State Machine context for the current user session.
Logs:
Success or error messages with user identification.
"""
try:
try:
data = await state.get_data()
if "prompt_message_id" in data:
prompt_message_id = data["prompt_message_id"]
await message.bot.delete_message(
chat_id=message.chat.id, message_id=prompt_message_id
)
await message.delete()
except Exception as e:
if "message to delete not found" in str(e).lower():
pass # Ignore this error
else:
raise e
symbol = message.text.upper()
additional_settings = await rq.get_user_additional_settings(
tg_id=message.from_user.id
)
if not additional_settings:
await rq.create_user_additional_settings(tg_id=message.from_user.id)
return
trade_mode = additional_settings.trade_mode or "Merged_Single"
mode = 0 if trade_mode == "Merged_Single" else 3
margin_type = additional_settings.margin_type or "ISOLATED_MARGIN"
leverage = "10"
leverage_to_buy = "10"
leverage_to_sell = "10"
ticker = await get_tickers(tg_id=message.from_user.id, symbol=symbol)
if ticker is None:
await message.answer(
text=f"Инструмент {symbol} не найден.", reply_markup=kbi.symbol
)
return
req = await rq.set_user_symbol(tg_id=message.from_user.id, symbol=symbol)
if not req:
await message.answer(
text="Произошла ошибка при установке инструмента.",
reply_markup=kbi.symbol,
)
return
await user_profile_bybit(
tg_id=message.from_user.id, message=message, state=state
)
res = await set_switch_position_mode(
tg_id=message.from_user.id, symbol=symbol, mode=mode
)
if res == "You have an existing position, so position mode cannot be switched":
if mode == 0:
mode = 3
else:
mode = 0
await set_switch_position_mode(
tg_id=message.from_user.id, symbol=symbol, mode=mode
)
if trade_mode == "Merged_Single":
trade_mode = "Both_Sides"
else:
trade_mode = "Merged_Single"
await rq.set_trade_mode(tg_id=message.from_user.id, trade_mode=trade_mode)
await set_margin_mode(tg_id=message.from_user.id, margin_mode=margin_type)
if margin_type == "ISOLATED_MARGIN":
await set_leverage_to_buy_and_sell(
tg_id=message.from_user.id,
symbol=symbol,
leverage_to_buy=str(leverage_to_buy),
leverage_to_sell=str(leverage_to_sell),
)
else:
await set_leverage(
tg_id=message.from_user.id, symbol=symbol, leverage=str(leverage)
)
await rq.set_leverage(tg_id=message.from_user.id, leverage=str(leverage))
await rq.set_leverage_to_buy_and_sell(
tg_id=message.from_user.id,
leverage_to_buy=str(leverage_to_buy),
leverage_to_sell=str(leverage_to_sell),
)
await rq.set_limit_price(tg_id=message.from_user.id, limit_price=0)
await rq.set_trigger_price(tg_id=message.from_user.id, trigger_price=0)
await state.clear()
except Exception as e:
await message.answer(text="Произошла ошибка. Пожалуйста, попробуйте позже.")
logger.error("Error setting symbol for user %s: %s", message.from_user.id, e)