Задать вопрос
@enabl3

Как в aiogram получить ответ с inline кнопки?

Всем привет, подскажите пожалуйста.
Как в библиотеке aiogram, если пользователь должен ввести либо текст либо нажать на кнопку. Обработать нажатие кнопки?

Отправляю это сообщение по нажатию на кнопку "жалоба", где нужно либо описать жалобу либо нажать на кнопку "Отмена", что бы выйти.

# States
class Step(StatesGroup):
claim = State()

elif call.data == "claim":
        await call.message.edit_text(text="Жалоба")
        await Step.claim.set()
        await call.message.answer("Опиши подробно свою жалобу", reply_markup=keyboards.cancelKeyboard)


а тут обрабатываю полученное сообщение:
как сюда добавить еще обработчик кнопки "отмена", так как нажимая на неё, на ней висят часики и ничего не происходит.
Знаю что в коде ниже ничего про неё не написано, но пробовал по разному - не вышло ничего.
@dp.message_handler(state=Step.claim)
async def process_message(message: Message, state: FSMContext):
    async with state.proxy() as data:
        data['claim'] = message.text
        claim = data['claim']
        await bot.send_message(CLAIMS_ID, claim)
        await message.reply(text="Жалоба отправлена")
        await state.finish()
  • Вопрос задан
  • 4617 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
dabudi
@dabudi
2*2=5
Я бы наверное как-то так сделал обработку жалобы

import telebot
bot = telebot.TeleBot('токен') 



@bot.message_handler(commands=['start'])
def start(message):
    keyboard = types.InlineKeyboardMarkup()
    keyboard.add(types.InlineKeyboardButton(text='Оставить жалобу', callback_data='ZHALOBA'))            
    bot.send_message(message.chat.id, 'Главное меню', reply_markup=keyboard) 


@bot.callback_query_handler(func=lambda call: True)
def ans(call):
    if call.data == 'ZHALOBA':
        func1(call.message, call)

def func1(message, call):
    keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
    keyboard.add(*[types.KeyboardButton(name) for name in ['Назад']])
    bot.send_message(message.chat.id, "Отправьте мне текст для жалобы", reply_markup=keyboard)
@bot.message_handler(content_types=['text'])
def test(message):
    if message.text == 'Назад':
        start(message)
        
    elif message.text != None:
        zhaloba = message.text

if __name__ == '__main__':
    while True:
        try:
            bot.polling(none_stop=True)
        except:
            time.sleep(5)
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽