Sc3ric

glhf

Jul 18th, 2024 (edited)
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.88 KB | None | 0 0
  1. # need to do some mapping
  2.  
  3. SOME_CONST_DEFINES_DICTS_FOR_CALLBACK_DATA_BY_I = [
  4.     None,
  5.     ...,
  6.     forms_of_education, # mapped
  7.     institutes, # mapped
  8.     ...
  9. ]
  10. SOME_CONST_DEFINES_DICTS_FOR_CALLBACK_EDIT_BY_I = [
  11.     ...
  12. ]
  13.  
  14.  
  15.  
  16. # Global funcs
  17.  
  18. # -------------------
  19.  
  20. def get_go_back_state(i: int):
  21.     go_back_state = getattr(PersonalInfo, SET_INFO_STATE_PREFIX + personal_info_query_names[i - 1])
  22.  
  23.     if i == 0:
  24.         go_back_state = SubmitApplication.start_menu
  25.  
  26.     return go_back_state
  27.  
  28. def get_set_info_state(i: int):
  29.     set_info_state = getattr(PersonalInfo, SET_INFO_STATE_PREFIX + personal_info_query_names[(_i + 1) % n])
  30.  
  31.     if i + 1 == n:
  32.         set_info_state = PersonalInfo.personal_info_received
  33.  
  34.     return set_info_state
  35.  
  36. def get_message(is_message: boolean, message_or_callback: types.Message | types.CallbackQuery):
  37.     if is_message:
  38.         return message_or_callback
  39.     return message_or_callback.message
  40.  
  41.  
  42.  
  43.  
  44. def _set_info_database_wrapped(i: int, is_message: boolean):
  45.     async def _set_info_database(message_or_callback: types.Message | types.CallbackQuery):
  46.         message = get_message(is_message, message_or_callback)
  47.         text = ''
  48.  
  49.         if is_message:
  50.             text = message.text
  51.         else:
  52.             text = SOME_CONST_DEFINES_DICTS_FOR_CALLBACK_DATA_BY_I[i].get(message_or_callback.data.removeprefix(personal_info_query_names[i] + '_'))
  53.  
  54.         success = True
  55.  
  56.         try:
  57.             func: function = getattr(database, SET_INFO_DB_PREFIX + personal_info_query_name)
  58.             func(id, text)
  59.         except Exception as e:
  60.             logging.exception(e, exc_info=True)
  61.             await message.answer(responses["something_went_wrong"],
  62.                                  parse_mode="HTML")
  63.             success = False
  64.  
  65.         if success and not is_message:
  66.             await message.edit_text(text=SOME_CONST_DEFINES_DICTS_FOR_CALLBACK_EDIT_BY_I[i], parse_mode="HTML")
  67.  
  68.         return success
  69.  
  70.     return _set_info_database
  71.  
  72. def info_go_back_wrapped(i: int, is_message):
  73.     async def info_go_back(message_or_callback: types.Message | types.CallbackQuery, state: FSMContext):
  74.         message = get_message(is_message, message_or_callback)
  75.  
  76.         await state.set_state(get_go_back_state(i))
  77.         await message.delete()
  78.         await message.answer(text=responses["action_cancelled"],
  79.                             reply_markup=personal_info_reply_markup[i],
  80.                             parse_mode="HTML",
  81.                             disable_web_page_preview=True)
  82.  
  83.     return info_go_back
  84.  
  85. def set_info_wrapped(i: int, is_message: boolean):
  86.     set_info_database = _set_info_database_wrapped(i, is_message)
  87.  
  88.     async def set_info(message_or_callback: types.Message | types.CallbackQuery, state: FSMContext):
  89.         message = get_message(is_message, message_or_callback)
  90.  
  91.         if await set_info_database(message_or_callback):
  92.             await state.set_state(get_set_info_state(i))
  93.             await message.answer(text=responses[personal_info_responses[i]],
  94.                                 reply_markup=personal_info_reply_markup[i+1],
  95.                                 parse_mode="HTML")
  96.  
  97.     return set_info
  98.  
  99. def change_info_wrapped(i: int, is_message: boolean):
  100.     set_info_database = _set_info_database_wrapped(i, is_message)
  101.  
  102.     async def change_info(message_or_callback: types.Message | types.CallbackQuery, state: FSMContext):
  103.         message = get_message(is_message, message_or_callback)
  104.  
  105.         if await set_info_database(message_or_callback):
  106.             await state.set_state(SubmitApplication.start_menu)
  107.             await message.answer(text=responses[personal_info_query_names[i] + CHANGE_INFO_TEXT_POSTFIX],
  108.                                 reply_markup=keyboards.APPLICATION_MENU,
  109.                                 parse_mode="HTML")
  110.  
  111.     return change_info
  112.  
  113. # -------------------
  114.  
Advertisement
Add Comment
Please, Sign In to add comment