1
0
forked from kodorvan/stcs
Files
stcs/app/telegram/handlers/handlers.py
algizn97 89ea511072 Update
2025-08-23 14:34:19 +05:00

233 lines
9.6 KiB
Python

import logging.config
from aiogram import F, Router
from aiogram.filters import CommandStart, Command
from aiogram.types import Message, CallbackQuery
from aiogram.fsm.context import FSMContext
import app.telegram.functions.functions as func # functions
import app.telegram.functions.main_settings.settings as func_main_settings
import app.telegram.functions.risk_management_settings.settings as func_rmanagement_settings
import app.telegram.functions.condition_settings.settings as func_condition_settings
import app.telegram.functions.additional_settings.settings as func_additional_settings
import app.telegram.database.requests as rq
import app.telegram.Keyboards.inline_keyboards as inline_markup
import app.telegram.Keyboards.reply_keyboards as reply_markup
from logger_helper.logger_helper import LOGGING_CONFIG
logging.config.dictConfig(LOGGING_CONFIG)
logger = logging.getLogger("handlers")
router = Router()
@router.message(CommandStart())
async def start_message(message: Message):
await rq.set_new_user_bybit_api(message.from_user.id)
await func.start_message(message)
@router.message(F.text == "👤 Профиль")
async def profile_message(message: Message):
user = await rq.check_user(message.from_user.id)
if user:
await func.profile_message(message.from_user.username, message)
@router.message(F.text == "Настройки")
async def settings_msg(message: Message):
user = await rq.check_user(message.from_user.id)
if user:
await func.settings_message(message)
@router.callback_query(F.data == "clb_start_chatbot_message")
async def clb_profile_msg(callback: CallbackQuery):
user = await rq.check_user(callback.from_user.id)
username = ''
if callback.from_user.first_name == None:
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:
await func.profile_message(callback.from_user.username, callback.message)
else:
await rq.save_tg_id_new_user(callback.from_user.id)
await func_main_settings.reg_new_user_default_main_settings(callback.from_user.id, callback.message)
await func_rmanagement_settings.reg_new_user_default_risk_management_settings(callback.from_user.id,
callback.message)
await func_condition_settings.reg_new_user_default_condition_settings(callback.from_user.id, callback.message)
await func_additional_settings.reg_new_user_default_additional_settings(callback.from_user.id, callback.message)
await callback.message.answer(f'Здравствуйте, {username}!', reply_markup=reply_markup.base_buttons_markup)
await func.profile_message(username, callback.message)
await callback.answer()
# Настройки торговли
@router.callback_query(F.data == "clb_settings_message")
async def clb_settings_msg(callback: CallbackQuery):
await func.settings_message(callback.message)
await callback.answer()
@router.callback_query(F.data == "clb_back_to_special_settings_message")
async def clb_back_to_settings_msg(callback: CallbackQuery):
await func.settings_message(callback.message)
await callback.answer()
@router.callback_query(F.data == "clb_change_main_settings")
async def clb_change_main_settings_message(callback: CallbackQuery, state: FSMContext):
await func_main_settings.main_settings_message(callback.from_user.id, callback.message, state)
await callback.answer()
@router.callback_query(F.data == "clb_change_risk_management_settings")
async def clb_change_risk_management_message(callback: CallbackQuery, state: FSMContext):
await func_rmanagement_settings.main_settings_message(callback.from_user.id, callback.message, state)
await callback.answer()
@router.callback_query(F.data == "clb_change_condition_settings")
async def clb_change_condition_message(callback: CallbackQuery, state: FSMContext):
await func_condition_settings.main_settings_message(callback.from_user.id, callback.message, state)
await callback.answer()
@router.callback_query(F.data == "clb_change_additional_settings")
async def clb_change_additional_message(callback: CallbackQuery, state: FSMContext):
await func_additional_settings.main_settings_message(callback.from_user.id, callback.message, state)
await callback.answer()
# Конкретные настройки каталогов
list_main_settings = ['clb_change_trading_mode',
'clb_change_margin_type',
'clb_change_size_leverage',
'clb_change_starting_quantity',
'clb_change_martingale_factor',
'clb_change_maximum_quantity'
]
@router.callback_query(F.data.in_(list_main_settings))
async def clb_main_settings_msg(callback: CallbackQuery, state: FSMContext):
await callback.answer()
try:
match callback.data:
case 'clb_change_trading_mode':
await func_main_settings.trading_mode_message(callback.message, state)
case 'clb_change_margin_type':
await func_main_settings.margin_type_message(callback.message, state)
case 'clb_change_size_leverage':
await func_main_settings.size_leverage_message(callback.message, state)
case 'clb_change_starting_quantity':
await func_main_settings.starting_quantity_message(callback.message, state)
case 'clb_change_martingale_factor':
await func_main_settings.martingale_factor_message(callback.message, state)
case 'clb_change_maximum_quantity':
await func_main_settings.maximum_quantity_message(callback.message, state)
except Exception as e:
logger.error(f"Error callback in main_settings match-case: {e}")
list_risk_management_settings = ['clb_change_price_profit',
'clb_change_price_loss',
'clb_change_max_risk_deal',
'commission_fee',
]
@router.callback_query(F.data.in_(list_risk_management_settings))
async def clb_risk_management_settings_msg(callback: CallbackQuery, state: FSMContext):
await callback.answer()
try:
match callback.data:
case 'clb_change_price_profit':
await func_rmanagement_settings.price_profit_message(callback.message, state)
case 'clb_change_price_loss':
await func_rmanagement_settings.price_loss_message(callback.message, state)
case 'clb_change_max_risk_deal':
await func_rmanagement_settings.max_risk_deal_message(callback.message, state)
case 'commission_fee':
await func_rmanagement_settings.commission_fee_message(callback.message, state)
except Exception as e:
logger.error(f"Error callback in risk_management match-case: {e}")
list_condition_settings = ['clb_change_trigger',
'clb_change_timer',
'clb_change_filter_volatility',
'clb_change_external_cues',
'clb_change_tradingview_cues',
'clb_change_webhook',
'clb_change_ai_analytics'
]
@router.callback_query(F.data.in_(list_condition_settings))
async def clb_condition_settings_msg(callback: CallbackQuery, state: FSMContext):
await callback.answer()
try:
match callback.data:
case 'clb_change_trigger':
await func_condition_settings.trigger_message(callback.message, state)
case 'clb_change_timer':
await func_condition_settings.timer_message(callback.from_user.id, callback.message, state)
case 'clb_change_filter_volatility':
await func_condition_settings.filter_volatility_message(callback.message, state)
case 'clb_change_external_cues':
await func_condition_settings.external_cues_message(callback.message, state)
case 'clb_change_tradingview_cues':
await func_condition_settings.trading_cues_message(callback.message, state)
case 'clb_change_webhook':
await func_condition_settings.webhook_message(callback.message, state)
case 'clb_change_ai_analytics':
await func_condition_settings.ai_analytics_message(callback.message, state)
except Exception as e:
logger.error(f"Error callback in main_settings match-case: {e}")
list_additional_settings = ['clb_change_save_pattern',
'clb_change_auto_start',
'clb_change_notifications',
]
@router.callback_query(F.data.in_(list_additional_settings))
async def clb_additional_settings_msg(callback: CallbackQuery, state: FSMContext):
await callback.answer()
try:
match callback.data:
case 'clb_change_save_pattern':
await func_additional_settings.save_pattern_message(callback.message, state)
case 'clb_change_auto_start':
await func_additional_settings.auto_start_message(callback.message, state)
case 'clb_change_notifications':
await func_additional_settings.notifications_message(callback.message, state)
except Exception as e:
logger.error(f"Error callback in additional_settings match-case: {e}")