예제 #1
0
def rh_factor_change_handler(call: types.CallbackQuery):
    user_id = call.message.chat.id
    rh = int(call.data.split(':')[1])
    # В БД храним резус-фактор как TRUE (+), FALSE (-) и NULL (Не знаю)
    bot.send_message(user_id,
                     RH_CHANGE_SUCCESS,
                     reply_markup=types.ReplyKeyboardRemove())
    bot.send_message(user_id, MAIN_MSG, reply_markup=main_keyboard())
    Donor.update_with_data(user_id, {'rhesus': (False, True, None)[rh]})
예제 #2
0
def apply_request_handler(call: types.CallbackQuery):
    user_id = call.message.chat.id
    bot.edit_message_text(RQ_SEARCH_START,
                          user_id,
                          call.message.message_id,
                          reply_markup=None)
    Request.update_request({'registration_flag': True}, user_id)
    donor_exist = Donor.try_exist(user_id)
    bot.send_message(user_id,
                     MAIN_MSG,
                     reply_markup=main_keyboard(not donor_exist))
예제 #3
0
def rh_factor_handler(call: types.CallbackQuery):
    # Разберём данные из кнопки
    raw_blood_type, raw_rh = call.data.split(',')
    blood_type = int(raw_blood_type.split(':')[1])
    rh_factor = int(raw_rh.split(':')[1])
    Donor.new_donor({
        'id': call.message.chat.id,
        'blood_type': blood_type,
        # В БД резус хранится в виде  TRUE (+), FALSE (-) и NULL (Не знаю)
        'rhesus': (False, True, None)[rh_factor]
    })
    bot.edit_message_text(
        REG_GEO_REQUIRE,
        call.message.chat.id,
        call.message.message_id,
        parse_mode=
        'Markdown',  # т.к в данном сообщении используется разметка, используем эту опцию
        reply_markup=None)
    bot.send_message(call.message.chat.id,
                     REG_GEO_REPLY,
                     reply_markup=add_geophone_keyboard(geo=True))
예제 #4
0
def main_handler(msg_call):
    user_id = None
    if isinstance(msg_call, types.CallbackQuery):
        bot.edit_message_text(BACK_TO_MAIN_DECISION, msg_call.message.chat.id,
                              msg_call.message.message_id)
        user_id = msg_call.message.chat.id
    else:
        user_id = msg_call.chat.id
    # chat_id совпадает с TelegramID
    donor_exist = Donor.try_exist(user_id)
    keyboard = main_keyboard(not donor_exist)
    bot.send_message(user_id, MAIN_MSG, reply_markup=keyboard)
예제 #5
0
def geo_change_handler(msg: types.Message):
    user_id = msg.chat.id
    # В зависимости от сообщения, к которому будет прикреплено местоположение
    # Будем считать, изменяется местоположения пользователя или заявки на поиск донора
    replied_to = reply_to_validation(msg)
    if replied_to == RQ_GEO_REPLY:
        bot.send_message(user_id,
                         RQ_PHONE_REQUIRE,
                         reply_markup=add_back_to_main_inline())
        Request.update_request(
            {
                'longitude': msg.location.longitude,
                'latitude': msg.location.latitude
            }, user_id)
        rq_phone_keyboard = types.ReplyKeyboardMarkup(row_width=1,
                                                      resize_keyboard=True)
        add_geophone_keyboard(rq_phone_keyboard, phone=True)
        skip_button = types.KeyboardButton(RQ_SKIP_PHONE)
        rq_phone_keyboard.add(skip_button)
        bot.send_message(user_id,
                         RQ_PHONE_ACTIONS,
                         reply_markup=rq_phone_keyboard)
    elif replied_to == REG_GEO_REPLY:
        bot.send_message(user_id, SUCCESS_REG, reply_markup=main_keyboard())
        Donor.update_with_data(user_id, {
            'longitude': msg.location.longitude,
            'latitude': msg.location.latitude
        })
    else:
        # Местоположение пользователя
        bot.send_message(user_id,
                         GEO_USER_CHANGE_SUCCESS,
                         reply_markup=types.ReplyKeyboardRemove())
        bot.send_message(user_id, MAIN_MSG, reply_markup=main_keyboard())
        Donor.update_with_data(user_id, {
            'longitude': msg.location.longitude,
            'latitude': msg.location.latitude
        })
예제 #6
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)
예제 #7
0
def blood_type_change_handler(call: types.CallbackQuery):
    user_id = call.message.chat.id
    blood_type = int(call.data.split(':')[1])
    Donor.update_with_data(user_id, {'blood_type': blood_type})
    bot.send_message(user_id, BT_CHANGE_SUCCESS, reply_markup=main_keyboard())