@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()
  • Вопрос задан
  • 4527 просмотров
Пригласить эксперта
Ответы на вопрос 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)
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
28 нояб. 2024, в 11:54
50000 руб./за проект
23 нояб. 2024, в 07:32
75000 руб./за проект
28 нояб. 2024, в 11:38
5000 руб./за проект