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,73 @@
import asyncio
import logging.config
from aiogram import F, Router
from aiogram.fsm.context import FSMContext
from aiogram.types import CallbackQuery
import app.telegram.keyboards.inline as kbi
import database.request as rq
from app.bybit.close_positions import cancel_order, close_position
from logger_helper.logger_helper import LOGGING_CONFIG
logging.config.dictConfig(LOGGING_CONFIG)
logger = logging.getLogger("stop_trading")
router_stop_trading = Router(name="stop_trading")
user_trade_tasks = {}
@router_stop_trading.callback_query(F.data == "stop_trading")
async def stop_trading(callback_query: CallbackQuery, state: FSMContext):
try:
await state.clear()
if callback_query.from_user.id in user_trade_tasks:
task = user_trade_tasks[callback_query.from_user.id]
if not task.done():
task.cancel()
del user_trade_tasks[callback_query.from_user.id]
conditional_data = await rq.get_user_conditional_settings(
tg_id=callback_query.from_user.id
)
timer_end = conditional_data.timer_end
symbols = await rq.get_all_symbols(tg_id=callback_query.from_user.id)
async def delay_start():
if timer_end > 0:
await callback_query.message.edit_text(
text=f"Торговля будет остановлена с задержкой {timer_end} мин.",
reply_markup=kbi.cancel_timer,
)
await asyncio.sleep(timer_end * 60)
for symbol in symbols:
auto_trading_data = await rq.get_user_auto_trading(
tg_id=callback_query.from_user.id, symbol=symbol
)
if auto_trading_data is not None and auto_trading_data.auto_trading:
await close_position(tg_id=callback_query.from_user.id, symbol=symbol)
await cancel_order(tg_id=callback_query.from_user.id, symbol=symbol)
await rq.set_auto_trading(
tg_id=callback_query.from_user.id, symbol=symbol, auto_trading=False
)
await callback_query.answer(text="Торговля остановлена")
await rq.set_stop_timer(tg_id=callback_query.from_user.id, timer_end=0)
task = asyncio.create_task(delay_start())
user_trade_tasks[callback_query.from_user.id] = task
logger.debug(
"Command stop_trading processed successfully for user: %s",
callback_query.from_user.id,
)
except Exception as e:
await callback_query.answer(text="Произошла ошибка при остановке торговли")
logger.error(
"Error processing command stop_trading for user %s: %s",
callback_query.from_user.id,
e,
)