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]})
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))
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))
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)
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 })
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)
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())