1
0
forked from kodorvan/stcs
This commit is contained in:
algizn97
2025-08-27 12:56:22 +05:00
parent 78b76b4aa6
commit aec8fea628

View File

@@ -1,5 +1,5 @@
import logging.config import logging.config
import asyncio
from aiogram import F, Router from aiogram import F, Router
from aiogram.filters import CommandStart from aiogram.filters import CommandStart
from aiogram.types import Message, CallbackQuery from aiogram.types import Message, CallbackQuery
@@ -13,23 +13,42 @@ import app.telegram.functions.additional_settings.settings as func_additional_se
import app.telegram.database.requests as rq import app.telegram.database.requests as rq
import app.telegram.Keyboards.reply_keyboards as reply_markup import app.telegram.Keyboards.reply_keyboards as reply_markup
from logger_helper.logger_helper import LOGGING_CONFIG from logger_helper.logger_helper import LOGGING_CONFIG
logging.config.dictConfig(LOGGING_CONFIG) logging.config.dictConfig(LOGGING_CONFIG)
logger = logging.getLogger("handlers") logger = logging.getLogger("handlers")
router = Router() router = Router()
@router.message(CommandStart()) @router.message(CommandStart())
async def start_message(message: Message): async def start_message(message: Message) -> None:
"""
Обработчик команды /start.
Запускает WebSocket для пользователя и инициализирует нового пользователя в БД.
Args:
message (Message): Входящее сообщение с командой /start.
"""
from BybitBot_API import run_ws_for_user
tg_id = message.from_user.id
asyncio.create_task(run_ws_for_user(tg_id, message))
logger.info(f"Получение event loop")
await rq.set_new_user_bybit_api(message.from_user.id) await rq.set_new_user_bybit_api(message.from_user.id)
await func.start_message(message) await func.start_message(message)
@router.message(F.text == "👤 Профиль") @router.message(F.text == "👤 Профиль")
async def profile_message(message: Message): async def profile_message(message: Message) -> None:
"""
Обработчик кнопки 'Профиль'.
Проверяет существование пользователя и отображает профиль.
Args:
message (Message): Сообщение с текстом кнопки.
"""
user = await rq.check_user(message.from_user.id) user = await rq.check_user(message.from_user.id)
if user: if user:
@@ -37,7 +56,14 @@ async def profile_message(message: Message):
@router.message(F.text == "Настройки") @router.message(F.text == "Настройки")
async def settings_msg(message: Message): async def settings_msg(message: Message) -> None:
"""
Обработчик кнопки 'Настройки'.
Проверяет пользователя и отображает меню настроек.
Args:
message (Message): Сообщение с текстом кнопки.
"""
user = await rq.check_user(message.from_user.id) user = await rq.check_user(message.from_user.id)
if user: if user:
@@ -45,17 +71,20 @@ async def settings_msg(message: Message):
@router.callback_query(F.data == "clb_start_chatbot_message") @router.callback_query(F.data == "clb_start_chatbot_message")
async def clb_profile_msg(callback: CallbackQuery): async def clb_profile_msg(callback: CallbackQuery) -> None:
"""
Обработчик колбэка 'clb_start_chatbot_message'.
Если пользователь есть в БД — показывает профиль,
иначе регистрирует нового пользователя и инициализирует настройки.
Args:
callback (CallbackQuery): Полученный колбэк.
"""
user = await rq.check_user(callback.from_user.id) user = await rq.check_user(callback.from_user.id)
username = '' first_name = callback.from_user.first_name or ""
last_name = callback.from_user.last_name or ""
if callback.from_user.first_name == None: username = f"{first_name} {last_name}".strip() or callback.from_user.username or "Пользователь"
username = callback.from_user.last_name
elif callback.from_user.last_name == None:
username = callback.from_user.first_name
else:
username = f'{callback.from_user.first_name} {callback.from_user.last_name}'
if user: if user:
await func.profile_message(callback.from_user.username, callback.message) await func.profile_message(callback.from_user.username, callback.message)
@@ -75,44 +104,82 @@ async def clb_profile_msg(callback: CallbackQuery):
await callback.answer() await callback.answer()
# Настройки торговли
@router.callback_query(F.data == "clb_settings_message") @router.callback_query(F.data == "clb_settings_message")
async def clb_settings_msg(callback: CallbackQuery): async def clb_settings_msg(callback: CallbackQuery) -> None:
"""
Показать главное меню настроек.
Args:
callback (CallbackQuery): полученный колбэк.
"""
await func.settings_message(callback.message) await func.settings_message(callback.message)
await callback.answer() await callback.answer()
@router.callback_query(F.data == "clb_back_to_special_settings_message") @router.callback_query(F.data == "clb_back_to_special_settings_message")
async def clb_back_to_settings_msg(callback: CallbackQuery): async def clb_back_to_settings_msg(callback: CallbackQuery) -> None:
"""
Вернуть пользователя к меню специальных настроек.
Args:
callback (CallbackQuery): полученный колбэк.
"""
await func.settings_message(callback.message) await func.settings_message(callback.message)
await callback.answer() await callback.answer()
@router.callback_query(F.data == "clb_change_main_settings") @router.callback_query(F.data == "clb_change_main_settings")
async def clb_change_main_settings_message(callback: CallbackQuery, state: FSMContext): async def clb_change_main_settings_message(callback: CallbackQuery, state: FSMContext) -> None:
"""
Открыть меню изменения главных настроек.
Args:
callback (CallbackQuery): полученный колбэк.
state (FSMContext): текущее состояние FSM.
"""
await func_main_settings.main_settings_message(callback.from_user.id, callback.message, state) await func_main_settings.main_settings_message(callback.from_user.id, callback.message, state)
await callback.answer() await callback.answer()
@router.callback_query(F.data == "clb_change_risk_management_settings") @router.callback_query(F.data == "clb_change_risk_management_settings")
async def clb_change_risk_management_message(callback: CallbackQuery): async def clb_change_risk_management_message(callback: CallbackQuery) -> None:
"""
Открыть меню изменения настроек управления рисками.
Args:
callback (CallbackQuery): полученный колбэк.
"""
await func_rmanagement_settings.main_settings_message(callback.from_user.id, callback.message) await func_rmanagement_settings.main_settings_message(callback.from_user.id, callback.message)
await callback.answer() await callback.answer()
@router.callback_query(F.data == "clb_change_condition_settings") @router.callback_query(F.data == "clb_change_condition_settings")
async def clb_change_condition_message(callback: CallbackQuery, state: FSMContext): async def clb_change_condition_message(callback: CallbackQuery, state: FSMContext) -> None:
"""
Открыть меню изменения настроек условий.
Args:
callback (CallbackQuery): полученный колбэк.
state (FSMContext): текущее состояние FSM.
"""
await func_condition_settings.main_settings_message(callback.from_user.id, callback.message, state) await func_condition_settings.main_settings_message(callback.from_user.id, callback.message, state)
await callback.answer() await callback.answer()
@router.callback_query(F.data == "clb_change_additional_settings") @router.callback_query(F.data == "clb_change_additional_settings")
async def clb_change_additional_message(callback: CallbackQuery, state: FSMContext): async def clb_change_additional_message(callback: CallbackQuery, state: FSMContext) -> None:
"""
Открыть меню изменения дополнительных настроек.
Args:
callback (CallbackQuery): полученный колбэк.
state (FSMContext): текущее состояние FSM.
"""
await func_additional_settings.main_settings_message(callback.from_user.id, callback.message, state) await func_additional_settings.main_settings_message(callback.from_user.id, callback.message, state)
await callback.answer() await callback.answer()
@@ -129,7 +196,14 @@ list_main_settings = ['clb_change_trading_mode',
@router.callback_query(F.data.in_(list_main_settings)) @router.callback_query(F.data.in_(list_main_settings))
async def clb_main_settings_msg(callback: CallbackQuery, state: FSMContext): async def clb_main_settings_msg(callback: CallbackQuery, state: FSMContext) -> None:
"""
Обработчик колбэков изменения главных настроек с dispatch через match-case.
Args:
callback (CallbackQuery): полученный колбэк.
state (FSMContext): текущее состояние FSM.
"""
await callback.answer() await callback.answer()
try: try:
@@ -158,7 +232,14 @@ list_risk_management_settings = ['clb_change_price_profit',
@router.callback_query(F.data.in_(list_risk_management_settings)) @router.callback_query(F.data.in_(list_risk_management_settings))
async def clb_risk_management_settings_msg(callback: CallbackQuery, state: FSMContext): async def clb_risk_management_settings_msg(callback: CallbackQuery, state: FSMContext) -> None:
"""
Обработчик изменений настроек управления рисками.
Args:
callback (CallbackQuery): полученный колбэк.
state (FSMContext): текущее состояние FSM.
"""
await callback.answer() await callback.answer()
try: try:
@@ -186,7 +267,14 @@ list_condition_settings = ['clb_change_trigger',
@router.callback_query(F.data.in_(list_condition_settings)) @router.callback_query(F.data.in_(list_condition_settings))
async def clb_condition_settings_msg(callback: CallbackQuery, state: FSMContext): async def clb_condition_settings_msg(callback: CallbackQuery, state: FSMContext) -> None:
"""
Обработчик изменений настроек условий трейдинга.
Args:
callback (CallbackQuery): полученный колбэк.
state (FSMContext): текущее состояние FSM.
"""
await callback.answer() await callback.answer()
try: try:
@@ -216,7 +304,14 @@ list_additional_settings = ['clb_change_save_pattern',
@router.callback_query(F.data.in_(list_additional_settings)) @router.callback_query(F.data.in_(list_additional_settings))
async def clb_additional_settings_msg(callback: CallbackQuery, state: FSMContext): async def clb_additional_settings_msg(callback: CallbackQuery, state: FSMContext) -> None:
"""
Обработчик дополнительных настроек бота.
Args:
callback (CallbackQuery): полученный колбэк.
state (FSMContext): текущее состояние FSM.
"""
await callback.answer() await callback.answer()
try: try: