175 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
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,
 | 
						|
        )
 |