def phone_request_handler(msg: types.Message): user_id = msg.chat.id if msg.contact.user_id: if user_id != msg.contact.user_id: bot.send_message(user_id, RQ_PHONE_CHEATING, reply_markup=types.ReplyKeyboardRemove()) rq_phone_try_again(user_id) else: bot.send_message(user_id, RQ_PHONE_SUCCESS, reply_markup=types.ReplyKeyboardRemove()) Request.update_request({'phone_number': msg.contact.phone_number}, user_id) # Инлайн-клавиатура с кнопкой применения изменения # TODO: Возможно стоит сделать здесь предпросмотр заявки search_apply_keyboard = types.InlineKeyboardMarkup() rq_apply_button = types.InlineKeyboardButton( RQ_START_DONOR_SEARCH, callback_data=RQ_APPLY) search_apply_keyboard.add(rq_apply_button) add_back_to_main_inline(search_apply_keyboard) bot.send_message(user_id, RQ_FINAL_STEP, reply_markup=search_apply_keyboard) else: bot.send_message(user_id, RQ_PHONE_NEED_TELEGRAM, reply_markup=types.ReplyKeyboardRemove()) rq_phone_try_again(user_id)
def start_request_handler(msg: types.Message): user_id = msg.chat.id bot.send_message(user_id, MAIN_REQUEST, reply_markup=types.ReplyKeyboardRemove()) bop_keyboard = types.InlineKeyboardMarkup() proceed_btn = types.InlineKeyboardButton(REQUEST_PROCEED, callback_data=RQ_INIT) bop_keyboard.add(proceed_btn) add_back_to_main_inline(bop_keyboard) bot.send_message(user_id, BACK_OR_PROCEED, reply_markup=bop_keyboard)
def blood_type_handler(call: types.CallbackQuery): inline_data_tmpl = '{},rh:{}'.format(call.data, '{}') rh_keyboard = types.InlineKeyboardMarkup() for rht, desc in RH_TYPES.items(): inline_data = inline_data_tmpl.format(rht) btn = types.InlineKeyboardButton(text=desc, callback_data=inline_data) rh_keyboard.add(btn) add_back_to_main_inline(rh_keyboard) bot.edit_message_text(CHOOSE_RH_TYPE, call.message.chat.id, call.message.message_id, reply_markup=rh_keyboard)
def init_request_handler(call: types.CallbackQuery): # Шаблон для инлайн-данных inline_data_tmpl = 'rq!bt:{}' blood_group_keyboard = types.InlineKeyboardMarkup() for bt, desc in BLOOD_TYPES.items(): inline_data = inline_data_tmpl.format(bt) btn = types.InlineKeyboardButton(text=desc, callback_data=inline_data) blood_group_keyboard.add(btn) add_back_to_main_inline(blood_group_keyboard) bot.edit_message_text(RQ_CHOOSE_BT, call.message.chat.id, call.message.message_id, reply_markup=blood_group_keyboard)
def add_back_to_main_inline(keyboard=None): """ Данная функция добавляет инлайн-кнопку "Назад в главное меню" в отправляемую клавиатуру сообщения и возвращает ее :param keyboard: передаваемая клавиатура :type keyboard: InlineKeyboardMarkup :return: InlineKeyboardMarkup """ if not keyboard: keyboard = types.InlineKeyboardMarkup() back_btn = types.InlineKeyboardButton(TO_MAIN_MENU, callback_data=BACK_TO_MAIN) keyboard.add(back_btn) return keyboard
def rh_changer_handler(call): rh_keyboard = types.InlineKeyboardMarkup() # Шаблон для инлайн-данных inline_data_tmpl = 'rh:{}' # Сформируем инлайн-кнопки for rht, desc in RH_TYPES.items(): inline_data = inline_data_tmpl.format(rht) btn = types.InlineKeyboardButton(text=desc, callback_data=inline_data) rh_keyboard.add(btn) add_back_to_main_inline(rh_keyboard) bot.edit_message_text(CHOOSE_RH_TYPE, call.message.chat.id, call.message.message_id, reply_markup=rh_keyboard)
def start_reg_handler(msg: types.Message): bot.send_message(msg.chat.id, START_REG, reply_markup=types.ReplyKeyboardRemove()) inline_data_tmpl = 'bt:{}' blood_group_keyboard = types.InlineKeyboardMarkup() for bt, desc in BLOOD_TYPES.items(): inline_data = inline_data_tmpl.format(bt) btn = types.InlineKeyboardButton(text=desc, callback_data=inline_data) blood_group_keyboard.add(btn) add_back_to_main_inline(blood_group_keyboard) bot.send_message(msg.chat.id, text=CHOOSE_BLOOD_TYPE, reply_markup=blood_group_keyboard)
def skip_phone_request_handler(msg: types.Message): user_id = msg.chat.id bot.send_message(user_id, RQ_PHONE_SKIPPED, reply_markup=types.ReplyKeyboardRemove()) # Инлайн-клавиатура с кнопкой применения изменения # TODO: Возможно стоит сделать здесь предпросмотр заявки search_apply_keyboard = types.InlineKeyboardMarkup() rq_apply_button = types.InlineKeyboardButton(RQ_START_DONOR_SEARCH, callback_data=RQ_APPLY) search_apply_keyboard.add(rq_apply_button) add_back_to_main_inline(search_apply_keyboard) bot.send_message(user_id, RQ_FINAL_STEP, reply_markup=search_apply_keyboard)
def bt_changer_handler(call: types.CallbackQuery): blood_group_keyboard = types.InlineKeyboardMarkup() # Шаблон для инлайн-данных inline_data_tmpl = 'bt:{}' # Сформируем инлайн-кнопки for bt, desc in BLOOD_TYPES.items(): inline_data = inline_data_tmpl.format(bt) btn = types.InlineKeyboardButton(text=desc, callback_data=inline_data) blood_group_keyboard.add(btn) # Добавим кнопку возврата add_back_to_main_inline(blood_group_keyboard) bot.edit_message_text(CHOOSE_BLOOD_TYPE, call.message.chat.id, call.message.message_id, reply_markup=blood_group_keyboard)
def main_changer(msg: types.Message): change_list = types.InlineKeyboardMarkup() user_raw_data = Donor.get_donor_data(msg.chat.id) # Разберем сырые данные и выведем их в сообщении # Вместе с выводом пользовательских данных удалим клавиатуру главного меню bot.send_message( msg.chat.id, USER_INFO_TMPL.format( bt_fmt=BLOOD_TYPES[user_raw_data[1]], # В БД резус хранится в виде TRUE (+), FALSE (-) и NULL (Не знаю) rh_fmt=RH_TYPES[{ False: 0, True: 1, None: 2 }[user_raw_data[2]]]), reply_markup=types.ReplyKeyboardRemove()) for inline_id, desc in MAIN_CHANGER[1:]: btn = types.InlineKeyboardButton(text=desc, callback_data=inline_id) change_list.add(btn) add_back_to_main_inline(change_list) bot.send_message(msg.chat.id, MAIN_CHANGER[0], reply_markup=change_list)