Обработка Callback
В общем есть библиотека python-telegram-bot-calendar в ней указана функция и обработка callback'ом этой функции.
Из-за машины состояний я не могу поймать callback, а тем более его обработать.
Помогите обработать callback и запихнуть его в машину состояний
Функция билда календаря это star_calendar, а callback - следующая.
Так вот она не вызывается, тк не обрабатывается.
Ссылка на календарь: https://github.com/artembakhanov/python-telegram-bot-calendar
class Form(StatesGroup):
company_name = State()
date_in = State()
date_out = State()
working_day_in = State()
working_day_out = State()
CCNO = State()
purpose_of_the_trip = State()
expense = State()
fare = State()
room_rate = State()
other_cost = State()
total = State()
current_date = State()
async def star_calendar(dp, message):
calendar, step = MyStyleCalendar(min_date=date.today(), max_date=date.today(), locale='ru').build()
LSTEP = {'y': 'год', 'm': 'месяц', 'd': 'день'}
await dp.bot.send_message(message.chat.id,
f"Выберите дату: {LSTEP[step]}",
reply_markup=calendar)
@dp.callback_query_handler(DetailedTelegramCalendar.func(),state=Form.date_in)
async def inline_kb_answer_callback_handler(query):
result, key, step = MyStyleCalendar(min_date=date.today(), locale='ru').process(query.callback_data)
LSTEP = {'y': 'год', 'm': 'месяц', 'd': 'день'}
if not result and key:
await dp.bot.edit_message_text(f"Выберите дату: {LSTEP[step]}",
query.message.chat.id,
query.message.message_id,
reply_markup=key)
elif result:
await dp.bot.edit_message_text(f"Вы выбрали: {result}",
query.message.chat.id,
query.message.message_id)
#Заявление на командировачные расходы
@dp.message_handler(Text(equals='Командировочные расходы', ignore_case=True))
@dp.message_handler(commands=['enter_leave_other'])
async def enter_leaving_day(message):
if db.check_auth(message.from_user.id):
await message.answer('Выберите фирму в которой работаете: ', reply_markup = fix.company_name())
await Form.company_name.set()
else:
await message.answer('Авторизуйтесь! /start')
# Добавляем возможность отмены, если пользователь передумал заполнять
@dp.message_handler(state='*', commands=['cancel'])
@dp.message_handler(Text(equals='отмена', ignore_case=True), state='*')
async def cancel_handler(message: types.Message, state: FSMContext):
current_state = await state.get_state()
if current_state is None:
return await message.answer('Нечего отменять', reply_markup=types.ReplyKeyboardRemove(True))
await state.finish()
await message.answer('Заявка отменена', reply_markup=types.ReplyKeyboardRemove(True))
@dp.message_handler(lambda message: message.text not in [], state=Form.company_name)
async def process_gender_invalid(message: types.Message):
#await create_task(message)
return await message.answer("Вы должны выбрать ответ с кнопок: '\nНажмите /cancel")
@dp.message_handler(state=Form.company_name)
async def process_name_task(message: types.Message, state: FSMContext):
async with state.proxy() as data:
data['company_name'] = message.text
await message.answer('Выберите дату начала поездки', reply_markup=types.ReplyKeyboardRemove(True))
await star_calendar(dp, message)