Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
0
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
Esempio n. 6
0
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)
Esempio n. 7
0
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)
Esempio n. 8
0
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)
Esempio n. 9
0
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)
Esempio n. 10
0
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)