Не регистрируется хендлер в тг боте

Рейтинг: 0Ответов: 1Опубликовано: 21.05.2023

Мне нужно сделать так, чтобы бот по нажатию кнопки переходил в состояние AdminSendMessages.get_text, а затем ждал от пользователя сообщения и пересылал ему обратно (типичный эхо-бот). Кнопка работает, состояние устанавливается правильно, это видно на выводе через Print. Приветственное слово тоже отправляется, но дальнейший хендлер @dp.message_handler(state=AdminSendMessages.get_text) не регистрирует это состояние, и соответственно код не работает. Почему хендлер не регистрирует состояние и не пускает код работать? Библиотека aiogram. По всякому спрашивал у GPT, в чем ошибка, но она не нашла ничего(( Пишет что код полностью исправен

class AdminSendMessages(StatesGroup):
    get_text = State()
    
async def commands_admin_send_messages(message: types.Message):
    if message.chat.id not in [admin_chat_id, 712433636, vlad_chat_id]:
        await bot.send_message(message.chat.id, text=not_admin)
        return

    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, selective=True)
    markup.add('cancel')

    welcome_text = '''
    Вы собираетесь осуществить массовую рассылку.
    Пожалуйста, введите текст сообщения для рассылки или отправьте "cancel" для отмены.
    '''
    await AdminSendMessages.get_text.set()
    print(f"Текущее состояние: {current_state}")
    await bot.send_message(message.from_user.id, welcome_text, reply_markup=markup, parse_mode='Markdown')
    
@dp.message_handler(state=AdminSendMessages.get_text)
async def process_text_for_mass_sending(message: types.Message, state: FSMContext):
    text = message.text
    await message.answer(text)
    await state.finish()

Ответы

▲ 1

Вы не указали хэндлер, который следит за присылаемыми текстовыми сообщениями

class AdminSendMessages(StatesGroup):
    get_text = State()

@dp.message_handler(content_types='text') # Отслеживает текстовые сообщения
async def commands_admin_send_messages(message: types.Message):
    if message.chat.id not in [admin_chat_id, 712433636, vlad_chat_id]:
        await bot.send_message(message.chat.id, text=not_admin)
        return

    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, selective=True)
    markup.add('cancel')

    welcome_text = '''
    Вы собираетесь осуществить массовую рассылку.
    Пожалуйста, введите текст сообщения для рассылки или отправьте "cancel" для отмены.
    '''
    await AdminSendMessages.get_text.set()
    # print(f"Текущее состояние: {current_state}")
    await bot.send_message(message.from_user.id, welcome_text, reply_markup=markup, parse_mode='Markdown')

@dp.message_handler(state=AdminSendMessages.get_text)
async def process_text_for_mass_sending(message: types.Message, state: FSMContext):
    text = message.text
    await message.answer(text)
    await state.finish()