@ERC20

Обработчик не видит сообщения aiogram?

Такая проблема: бот не реагирует на клавиатуру или текст, например "1-7" или "x2", в режиах: 'mr' и 'double'. Он реагирует только если я отправляю сообщение в ответ на сообщение бота, где была вызвана клавиатура. В режимах 'wheel' и 'dice' я могу просто ввести "19-36" или же "1" и ставка будет определена без ответа на сообщние. Почему так?

Клавиатуры:
def create_keyboard_wheel():
    return types.ReplyKeyboardMarkup(
        keyboard=[
            [types.KeyboardButton(text="1-18"), types.KeyboardButton(text="19-36")],
            [types.KeyboardButton(text="Черное"), types.KeyboardButton(text="Красное")],
            [types.KeyboardButton(text="Четное"), types.KeyboardButton(text="Нечетное")],
            [types.KeyboardButton(text="1-12"), types.KeyboardButton(text="13-22"), types.KeyboardButton(text="23-36")],
            [types.KeyboardButton(text="Число")],
            [types.KeyboardButton(text="Банк"), types.KeyboardButton(text="Профиль")]
        ],
        resize_keyboard=True,
        one_time_keyboard=False
    )

def create_keyboard_double():
    return types.ReplyKeyboardMarkup(
        keyboard=[
            [types.KeyboardButton(text="2x"), types.KeyboardButton(text="3x")],
            [types.KeyboardButton(text="5x"), types.KeyboardButton(text="40x")],
            [types.KeyboardButton(text="Банк"), types.KeyboardButton(text="Профиль")]
        ],
        resize_keyboard=True,
        one_time_keyboard=False
    )

def create_keyboard_mr():
    return types.ReplyKeyboardMarkup(
        keyboard=[
            [types.KeyboardButton(text="Красное"), types.KeyboardButton(text="Черное")],
            [types.KeyboardButton(text="1-7"), types.KeyboardButton(text="Число"), types.KeyboardButton(text="8-14")],
            [types.KeyboardButton(text="Четное"), types.KeyboardButton(text="Нечетное")],
            [types.KeyboardButton(text="Банк"), types.KeyboardButton(text="Профиль")]
        ],
        resize_keyboard=True,
        one_time_keyboard=False
    )

def create_keyboard_dice():
    return types.ReplyKeyboardMarkup(
        keyboard=[
            [types.KeyboardButton(text="1"), types.KeyboardButton(text="2"), types.KeyboardButton(text="3")],
            [types.KeyboardButton(text="4"), types.KeyboardButton(text="5"), types.KeyboardButton(text="6")],
            [types.KeyboardButton(text="Четное"), types.KeyboardButton(text="Нечетное")],
            [types.KeyboardButton(text="Банк"), types.KeyboardButton(text="Профиль")]
        ],
        resize_keyboard=True,
        one_time_keyboard=False
    )

async def create_dynamic_keyboard(game_choice):
    game_choice = game_choice.lower().replace(' ', '_')

    if game_choice == "wheel":
        return create_keyboard_wheel()
    elif game_choice == "mr":
        return create_keyboard_mr()
    elif game_choice == "dice":
        return create_keyboard_dice()
    elif game_choice == "double":
        return create_keyboard_double()
    else:
        return types.ReplyKeyboardMarkup(
            resize_keyboard=True, one_time_keyboard=False
        )

Вызов клавиатур: 

@dp.callback_query_handler(lambda c: c.data and c.data.startswith('select_game_'))
async def process_game_selection(callback_query: types.CallbackQuery):
    game_choice = callback_query.data.replace('select_game_', '').replace('_', ' ').lower()
    
    chat_id = callback_query.message.chat.id

    async with aiosqlite.connect("database/database.db") as db:
        await db.execute("UPDATE chats SET game_selected = ?, game = ? WHERE chat_id = ?", (True, game_choice, chat_id))
        await db.commit()

    keyboard = await create_dynamic_keyboard(game_choice)

    await callback_query.message.answer(f"Вы выбрали игру: {game_choice}. Теперь вы можете начать делать ставки.\n\n", reply_markup=keyboard)


Обработчик текста:
@dp.message_handler(lambda message: message.text in ["1-7", "8-14", "Четное", "Нечетное", "Число", "Черное", "Красное", "1-18", "19-36", "1-12", "13-22", "23-36", "1", "2", "3", "4", "5", "6", "2x", "3x", "5x", "40x"])
async def place_bet(message: types.Message):
    global betting_active, active_bets

    bet_type = message.text
    user_id = message.from_user.id
    chat_id = message.chat.id
    await register_user(user_id, message.from_user.username)
    game_mode = await get_game_mode(chat_id)
…


Функция регистрации отработчиков:
def register_handlers_result(dp: Dispatcher):
    dp.register_message_handler(place_bet, lambda message: message.text in ["1-7", "8-14", "Четное", "Нечетное", "Число",           "Черное", "Красное", "1-18", "19-36", "1-12", "13-22", "23-36", "1", "2", "3", "4", "5", "6"], state="*")


В main.py:
result.register_handlers_result(dp)

Я добавил логгер, заметил, что он вообще не видит текст именно в режмах "mr" и "double", только в ответ на сообщение. Отработчик текста ведь для всего один, в других режимах он все ставки видит, даже предназначенные для других режимов - выводя ошибку об этом.

Вот как это наглядно. В Wheel я пишу или нажимаю кнопку без ответа на сообщение и он идёт дальше. В double я пишу без ответа - игнор, с ответом - идёт дальше...
6736e21970c1c182452488.jpeg
6736e2233328c288761771.jpeg

Обработчик пробывал менять на:
@dp.message_handler(Text(equals=["1-7", "8-14", "Четное", "Нечетное", "Число", "Черное", "Красное", "1-18", "19-36", "1-12", "13-22", "23-36", "1", "2", "3", "4", "5", "6", "2x", "3x", "5x", "40x"]))
  • Вопрос задан
  • 30 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы