import logging.config from aiogram import 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.helper_functions import is_int_for_timer from app.telegram.states.states import ConditionalSettingsState from logger_helper.logger_helper import LOGGING_CONFIG logging.config.dictConfig(LOGGING_CONFIG) logger = logging.getLogger("conditional_settings") router_conditional_settings = Router(name="conditional_settings") @router_conditional_settings.callback_query( lambda c: c.data == "start_timer" or c.data == "stop_timer" ) async def timer(callback_query: CallbackQuery, state: FSMContext): """ Handles callback queries starting with 'start_timer' or 'stop_timer'. """ try: await state.clear() if callback_query.data == "start_timer": await state.set_state(ConditionalSettingsState.start_timer_state) msg = await callback_query.message.edit_text( "Введите время в минутах для старта торговли:", reply_markup=kbi.back_to_conditions, ) await state.update_data(prompt_message_id=msg.message_id) elif callback_query.data == "stop_timer": await state.set_state(ConditionalSettingsState.stop_timer_state) msg = await callback_query.message.edit_text( "Введите время в минутах для остановки торговли:", reply_markup=kbi.back_to_conditions, ) await state.update_data(prompt_message_id=msg.message_id) else: await callback_query.answer( text="Произошла ошибка. Пожалуйста, попробуйте позже." ) except Exception as e: await callback_query.answer( text="Произошла ошибка. Пожалуйста, попробуйте позже." ) logger.error( "Error processing command timer for user %s: %s", callback_query.from_user.id, e, ) @router_conditional_settings.message(ConditionalSettingsState.start_timer_state) async def start_timer(message: Message, state: FSMContext): """ Handles the start_timer state of the Finite State Machine. """ 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 get_start_timer = message.text value = is_int_for_timer(get_start_timer) if value is False: await message.answer( "Ошибка: введите валидное число.", reply_markup=kbi.back_to_conditions, ) logger.debug( "User %s input invalid (not an valid number): %s", message.from_user.id, get_start_timer, ) return req = await rq.set_start_timer( tg_id=message.from_user.id, timer_start=int(get_start_timer) ) if req: await message.answer( "Таймер успешно установлен.", reply_markup=kbi.back_to_conditions, ) else: await message.answer( "Произошла ошибка. Пожалуйста, попробуйте позже.", reply_markup=kbi.back_to_conditions, ) await state.clear() except Exception as e: await message.answer(text="Произошла ошибка. Пожалуйста, попробуйте позже.") logger.error( "Error processing command start_timer for user %s: %s", message.from_user.id, e, ) @router_conditional_settings.message(ConditionalSettingsState.stop_timer_state) async def stop_timer(message: Message, state: FSMContext): """ Handles the stop_timer state of the Finite State Machine. """ 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 get_stop_timer = message.text value = is_int_for_timer(get_stop_timer) if value is False: await message.answer( "Ошибка: введите валидное число.", reply_markup=kbi.back_to_conditions, ) logger.debug( "User %s input invalid (not an valid number): %s", message.from_user.id, get_stop_timer, ) return req = await rq.set_stop_timer( tg_id=message.from_user.id, timer_end=int(get_stop_timer) ) if req: await message.answer( "Таймер успешно установлен.", reply_markup=kbi.back_to_conditions, ) else: await message.answer( "Произошла ошибка. Пожалуйста, попробуйте позже.", reply_markup=kbi.back_to_conditions, ) await state.clear() except Exception as e: await message.answer(text="Произошла ошибка. Пожалуйста, попробуйте позже.") logger.error( "Error processing command stop_timer for user %s: %s", message.from_user.id, e, )