def start_search_aud(bot, message, storage, tz): # ID пользователя chat_id = message.chat.id # Создаём ключ по значению ID пользователя aud_list[chat_id] = [] # Зарашиваем данные о пользователе из базы user = storage.get_user(chat_id=chat_id) # Условие для проверки наличия пользователя в базе if user: # Запуск стейта со значением SEARCH msg = bot.send_message( chat_id=chat_id, text='Введите интересующую аудитрию\n' 'Например: Ж-317, или Ж317', reply_markup=keyboards.make_keyboard_main_menu()) bot.register_next_step_handler(msg, search_aud, bot=bot, tz=tz, storage=storage) else: bot.send_message(chat_id=chat_id, text='Привет\n') bot.send_message(chat_id=chat_id, text='Для начала пройдите небольшую регистрацию😉\n') bot.send_message( chat_id=chat_id, text='Выберите институт', reply_markup=keyboards.make_inline_keyboard_choose_institute( storage.get_institutes()))
async def start_search(bot: Bot, ans: Message, state): chat_id = ans.from_id aud_list[chat_id] = [] await ans.answer( 'Введите интересующую аудитрию\n' 'Например: Ж-317, или Ж317', keyboard=keyboards.make_keyboard_main_menu()) await bot.state_dispenser.set(ans.peer_id, state.AUD_SEARCH)
async def start_search(bot: Bot, ans: Message, state, storage): # ID пользователя chat_id = ans.from_id # Создаём ключ по значению ID пользователя Condition_request[chat_id] = [] # Зарашиваем данные о пользователе из базы user = storage.get_vk_user(chat_id=chat_id) # Условие для проверки наличия пользователя в базе if user: # Запуск стейта со значением SEARCH await bot.state_dispenser.set(ans.peer_id, state.SEARCH) await ans.answer( 'Введите название группы или фамилию преподавателя\n' 'Например: ИБб-18-1 или Маринов', keyboard=keyboards.make_keyboard_main_menu()) else: await ans.answer('Привет\n') await ans.answer('Для начала пройдите небольшую регистрацию😉\n') await ans.answer('Выберите институт.', keyboard=keyboards.make_keyboard_institutes( storage.get_institutes()))
def start_search(bot, message, storage, tz): data = message.chat.id message_id = message.message_id # ID пользователя chat_id = message.chat.id # Создаём ключ по значению ID пользователя Condition_request[chat_id] = [] # Зарашиваем данные о пользователе из базы user = storage.get_user(chat_id=chat_id) # Условие для проверки наличия пользователя в базе if user: # Запуск стейта со значением SEARCH msg = bot.send_message( chat_id=chat_id, text='Введите название группы или фамилию преподавателя\n' 'Например: ИБб-18-1 или Маринов', reply_markup=keyboards.make_keyboard_main_menu()) bot.register_next_step_handler(msg, search, bot=bot, tz=tz, storage=storage) else: bot.send_message(chat_id=chat_id, text='Привет\n') bot.send_message(chat_id=chat_id, text='Для начала пройдите небольшую регистрацию😉\n') bot.send_message( chat_id=chat_id, text='Выберите институт', reply_markup=keyboards.make_inline_keyboard_choose_institute( storage.get_institutes()))
def search_aud(message, bot, storage, tz, last_msg=None): """Регистрация преподавателя""" global aud_list chat_id = message.chat.id message_id = message.message_id data = message message = message.text all_found_aud = [] all_results = [] prep_list = [] page = 0 if data.content_type == 'sticker': message = '' if last_msg: bot.delete_message(data.chat.id, data.message_id - 1) if ('На текущую неделю' == message or 'На следующую неделю' == message): return if not storage.get_schedule_aud(message) and len(message.replace(' ', '')) < 15: # Отправляем запросы в базу посимвольно for item in message: # Получаем все результаты запроса на каждый символ request_item_all = storage.get_schedule_aud(item) # Проходим по каждому результату запроса одного символа for i in range(len(request_item_all)): # Обращаемся к результатам у которых есть ключ "aud" request_item = request_item_all[i]['aud'] # Записывем все совпадения (Значения ключа "aud") prep_list.append(request_item) request_item = [] request_item_all = [] # Выделение наиболее повторяющихся элементов(а). Фактически результат запроса пользователя. qty_most_common = 0 prep_list_set = set(prep_list) for item in prep_list_set: qty = prep_list.count(item) if qty > qty_most_common: qty_most_common = qty # Переменная с результатом сортировки if message.replace(' ', '').lower() in item.replace('-', '').lower(): all_results.append(item.lower()) if storage.get_schedule_aud(message) and not all_results: # Результат запроса по аудам request_aud = storage.get_schedule_aud(message) # Циклы нужны для общего поиска. Здесь мы удаляем старые ключи в обоих реквестах и создаём один общий ключ, как для групп, так и для преподов for i in request_aud: i['search_aud'] = i.pop('aud') # Записываем слово, которое ищем request_word = message last_request = request_aud[-1] # Эти циклы записывают группы и преподов в нижнем регистре для удобной работы с ними for i in request_aud: all_found_aud.append(i['search_aud'].lower()) # Формируем полный багаж для пользователя list_search = [page, request_word, all_found_aud] # Записываем все данные под ключом пользователя aud_list[chat_id] = list_search # Выводим результат поиска с клавиатурой (кливиатур формируется по поисковому запросу) if len(request_aud) > 10: requests = request_aud[:10 * (page + 1)] more_than_10 = True msg = bot.send_message( chat_id=chat_id, text='Результат поиска', reply_markup=keyboards.make_keyboard_search_group_aud( last_request=last_request, page=page, more_than_10=more_than_10, requests=requests)) bot.register_next_step_handler(msg, search_aud, bot=bot, storage=storage, tz=tz, last_msg=msg) else: msg = bot.send_message( chat_id=chat_id, text='Результат поиска', reply_markup=keyboards.make_keyboard_search_group_aud( last_request=last_request, page=page, more_than_10=False, requests=request_aud)) bot.register_next_step_handler(msg, search_aud, bot=bot, storage=storage, tz=tz, last_msg=msg) if all_results and aud_list[chat_id] == []: all_found_aud = all_results request_word = data list_search = [page, request_word, all_found_aud] aud_list[chat_id] = list_search kb_all_results = keyboa_maker(items=all_found_aud, copy_text_to_callback=True, items_in_row=3) msg = bot.send_message(chat_id=chat_id, reply_markup=kb_all_results, text="Результат поиска") bot.register_next_step_handler(msg, search_aud, bot=bot, storage=storage, tz=tz, last_msg=msg) else: if len(aud_list[chat_id]) == 3: pass elif all_results: kb_all_results = keyboa_maker(items=all_found_aud, copy_text_to_callback=True, items_in_row=3) bot.send_message(chat_id=chat_id, reply_markup=kb_all_results, text="Результат поиска") else: msg = bot.send_message( chat_id=chat_id, text='Проверьте правильность ввода 😕', reply_markup=keyboards.make_keyboard_main_menu()) bot.register_next_step_handler(msg, search_aud, bot=bot, storage=storage, tz=tz, last_msg=msg) return return
def handler_buttons_aud(bot, message, storage, tz): """Обрабатываем колбэк преподавателя""" global aud_list chat_id = message.message.chat.id message_id = message.message.message_id data = json.loads(message.data) all_found_aud = [] if data['menu_aud'] == 'main': bot.send_message(chat_id=chat_id, text='Вы покинули поиск', reply_markup=keyboards.make_keyboard_start_menu()) bot.delete_message(chat_id, message_id) bot.clear_step_handler_by_chat_id(chat_id=chat_id) return if not aud_list[chat_id] and len(aud_list[chat_id]) != 0: aud_list[chat_id][1] = '' page = aud_list[chat_id][0] request_aud = storage.get_schedule_aud(aud_list[chat_id][1]) # Циклы нужны для общего поиска. Здесь мы удаляем старые ключи в обоих реквестах и создаём один общий ключ, как для групп, так и для преподов for i in request_aud: i['search_aud'] = i.pop('aud') # Записываем слово, которое ищем request_word = aud_list[chat_id][1] last_request = request_aud[-1] # Эти циклы записывают группы и преподов в нижнем регистре для удобной работы с ними for i in request_aud: all_found_aud.append(i['search_aud'].lower()) # Формируем полный багаж для пользователя list_search = [page, request_word, all_found_aud] # Записываем все данные под ключом пользователя aud_list[chat_id] = list_search if data['menu_aud'].lower() in aud_list[chat_id][2]: bot.delete_message(message_id=message_id, chat_id=chat_id) aud_list[chat_id][1] = data['menu_aud'].lower() des = message.data.split(":")[1].replace("}", "").replace('"', '') msg = bot.send_message(chat_id=chat_id, text=f'Выберите неделю для аудитории{des}', reply_markup=keyboards. make_keyboard_choose_schedule_for_aud_search()) bot.register_next_step_handler(msg, choose_week, bot=bot, storage=storage, tz=tz, last_msg=msg) elif data['menu_aud'] == 'back': more_than_10 = False if len(request_aud) > 10: requests = request_aud[10 * (page - 1):10 * page] more_than_10 = True if aud_list[chat_id][0] - 1 == 0: bot.delete_message(message_id=message_id, chat_id=chat_id) bot.send_message( chat_id=chat_id, text=f'Результат поиска', reply_markup=keyboards.make_keyboard_search_group_aud( last_request=last_request, page=page - 1, requests=requests, more_than_10=more_than_10)) else: bot.edit_message_reply_markup( message_id=message_id, chat_id=chat_id, reply_markup=keyboards.make_keyboard_search_group_aud( last_request=last_request, page=page - 1, requests=requests, more_than_10=more_than_10)) aud_list[chat_id][0] -= 1 elif data['menu_aud'] == 'next': bot.delete_message(message_id=message_id, chat_id=chat_id) more_than_10 = False if len(request_aud) > 10: requests = request_aud[10 * (page + 1):10 * (page + 2)] more_than_10 = True bot.send_message(chat_id=chat_id, text=f'Результат поиска', reply_markup=keyboards.make_keyboard_search_group_aud( last_request=last_request, page=page + 1, requests=requests, more_than_10=more_than_10)) aud_list[chat_id][0] += 1 else: msg = bot.send_message( chat_id=chat_id, text='Проверьте правильность ввода 😞', reply_markup=keyboards.make_keyboard_main_menu()) bot.register_next_step_handler(msg, search_aud, bot=bot, storage=storage, tz=tz, last_msg=msg)
def search(message, bot, storage, tz, last_msg=None): """Регистрация преподавателя""" global Condition_request data = message chat_id = message.chat.id message = message.text all_found_groups = [] all_found_prep = [] page = 0 if data.content_type == 'sticker': message = '' if last_msg: try: bot.delete_message(last_msg.chat.id, last_msg.message_id) except Exception as e: pass if storage.get_search_list(message) or storage.get_search_list_prep( message): # Результат запроса по группам request_group = storage.get_search_list(message) # Результат запроса по преподам request_prep = storage.get_search_list_prep(message) # Циклы нужны для общего поиска. Здесь мы удаляем старые ключи в обоих реквестах и создаём один общий ключ, # как для групп, так и для преподов for i in request_group: i['found_prep'] = i.pop('name') for i in request_prep: i['found_prep'] = i.pop('prep_short_name') # Записываем слово, которое ищем request_word = message # Склеиваем результаты двух запросов для общего поиска request = request_group + request_prep last_request = request[-1] # Отправляем в функцию данные для создания клавиатуры # Эти циклы записывают группы и преподов в нижнем регистре для удобной работы с ними for i in request_group: all_found_groups.append(i['found_prep'].lower()) for i in request_prep: all_found_prep.append(i['found_prep'].lower()) # Создаём общий список all_found_results = all_found_groups + all_found_prep # Формируем полный багаж для пользователя list_search = [page, request_word, all_found_results] # Записываем все данные под ключом пользователя Condition_request[chat_id] = list_search # Выводим результат поиска с клавиатурой (кливиатур формируется по поисковому запросу) if len(request) > 10: requests = request[:10 * (page + 1)] more_than_10 = True msg = bot.send_message( chat_id=chat_id, text='Результат поиска', reply_markup=keyboards.make_keyboard_search_group( last_request=last_request, page=page, more_than_10=more_than_10, requests=requests)) bot.register_next_step_handler(msg, search, bot=bot, storage=storage, tz=tz, last_msg=msg) else: msg = bot.send_message( chat_id=chat_id, text='Результат поиска', reply_markup=keyboards.make_keyboard_search_group( last_request=last_request, page=page, more_than_10=False, requests=request)) bot.register_next_step_handler(msg, search, bot=bot, storage=storage, tz=tz, last_msg=msg) elif ('На текущую неделю' == message or 'На следующую неделю' == message): group = Condition_request[chat_id][1] request_word = Condition_request[chat_id][1] request_group = storage.get_search_list(request_word) request_prep = storage.get_search_list_prep(request_word) # Если есть запрос для группы, то формируем расписание для группы, а если нет, то для препода if request_group: schedule = storage.get_schedule(group=group) elif request_prep: schedule = request_prep[0] if not schedule: bot.send_message( chat_id=chat_id, text='Расписание временно недоступно\nПопробуйте позже⏱') return schedule = schedule['schedule'] week = find_week() # меняем неделю if message == 'На следующую неделю': week = 'odd' if week == 'even' else 'even' week_name = 'четная' if week == 'odd' else 'нечетная' if request_group: schedule_str = full_schedule_in_str(schedule, week=week) elif request_prep: schedule_str = full_schedule_in_str_prep(schedule, week=week) # Проверяем, что расписание сформировалось if isinstance(schedule_str, APIError): schedule_processing.sending_schedule_is_not_available( bot=bot, chat_id=chat_id) return bot.send_message(chat_id=chat_id, text=f'Расписание {group}\n' f'Неделя: {week_name}', reply_markup=keyboards.make_keyboard_start_menu()) # Отправка расписания schedule_processing.sending_schedule(bot=bot, chat_id=chat_id, schedule_str=schedule_str) bot.clear_step_handler_by_chat_id(chat_id=chat_id) elif 'Экзамены' == message: group = Condition_request[chat_id][1] request_word = Condition_request[chat_id][1] request_group = storage.get_search_list(request_word) request_prep = storage.get_search_list_prep(request_word) # Объявляем переменную с расписанием экзаменов группы или препода if request_group: schedule_str = groups_exam(group) elif request_prep: schedule_str = groups_exam(group) # При отсутствии расписания выводится соответствующее предупреждение if not schedule_str: bot.send_message( chat_id=chat_id, text='Расписание экзаменов отсутствует😇\nПопробуйте позже⏱') return # Задаем расписанию экзаменов вид для подачи пользователю schedule_exams = schedule_view_exams(schedule=schedule_str) # Проверяем, что расписание сформировалось if isinstance(schedule_exams, APIError): schedule_processing.sending_schedule_is_not_available( bot=bot, chat_id=chat_id) return # Отправка расписания schedule_processing.sending_schedule(bot=bot, chat_id=chat_id, schedule_str=schedule_exams) bot.clear_step_handler_by_chat_id(chat_id=chat_id) elif 'Основное меню' == message: bot.send_message(chat_id=chat_id, text='Основное меню', reply_markup=keyboards.make_keyboard_start_menu()) bot.clear_step_handler_by_chat_id(chat_id=chat_id) return else: msg = bot.send_message( chat_id=chat_id, text='Проверьте правильность ввода 😞', reply_markup=keyboards.make_keyboard_main_menu()) bot.register_next_step_handler(msg, search, bot=bot, storage=storage, tz=tz, last_msg=msg) return
def handler_buttons(bot, message, storage, tz): """Обрабатываем колбэк преподавателя""" global Condition_request chat_id = message.message.chat.id message_id = message.message.message_id data = json.loads(message.data) if data['prep_list'] == 'main': bot.send_message(chat_id=chat_id, text='Основное меню', reply_markup=keyboards.make_keyboard_start_menu()) try: bot.delete_message(message_id=message_id, chat_id=chat_id) except Exception as e: pass bot.clear_step_handler_by_chat_id(chat_id=chat_id) return # TODO: Если разберетесь для чего эта строка - удалите её try: if not Condition_request.get(chat_id) and len( Condition_request.get(chat_id)) != 0: Condition_request[chat_id][1] = '' except Exception as e: pass page = Condition_request[chat_id][0] request_word = Condition_request[chat_id][1] # Выходим из цикла поиска преподавателя по ФИО bot.clear_step_handler_by_chat_id(chat_id=chat_id) # Результат запроса по группам request_group = storage.get_search_list(request_word) # Результат запроса по преподам request_prep = storage.get_search_list_prep(request_word) # Циклы нужны для общего поиска. Здесь мы удаляем старые ключи в обоих реквестах и создаём один общий ключ, # как для групп, так и для преподов for i in request_group: i['found_prep'] = i.pop('name') for i in request_prep: i['found_prep'] = i.pop('prep_short_name') # Склеиваем результаты двух запросов для общего поиска request = request_group + request_prep last_request = request[-1] if data['prep_list'].lower() in Condition_request[chat_id][2]: try: bot.delete_message(message_id=message_id, chat_id=chat_id) except Exception as e: pass Condition_request[chat_id][1] = data['prep_list'] des = message.data.split(":")[1].replace("}", "").replace('"', '') if "-" in data['prep_list'].lower(): msg = bot.send_message( chat_id=chat_id, text=f'Выберите неделю для {des}', reply_markup=keyboards.make_keyboard_choose_schedule()) else: msg = bot.send_message( chat_id=chat_id, text=f'Выберите неделю для {des}', reply_markup=keyboards. make_keyboard_choose_schedule_for_aud_search()) bot.register_next_step_handler(msg, search, bot=bot, storage=storage, tz=tz, last_msg=msg) elif data['prep_list'] == 'back': more_than_10 = False if len(request) > 10: requests = request[10 * (page - 1):10 * page] more_than_10 = True if Condition_request[chat_id][0] - 1 == 0: try: bot.delete_message(message_id=message_id, chat_id=chat_id) except Exception as e: pass bot.send_message(chat_id=chat_id, text=f'Первая страница поиска:', reply_markup=keyboards.make_keyboard_search_group( last_request=last_request, page=page - 1, requests=requests, more_than_10=more_than_10)) else: bot.edit_message_reply_markup( message_id=message_id, chat_id=chat_id, reply_markup=keyboards.make_keyboard_search_group( last_request=last_request, page=page - 1, requests=requests, more_than_10=more_than_10)) Condition_request[chat_id][0] -= 1 elif data['prep_list'] == 'next': try: bot.delete_message(message_id=message_id, chat_id=chat_id) except Exception as e: pass more_than_10 = False if len(request) > 10: requests = request[10 * (page + 1):10 * (page + 2)] more_than_10 = True bot.send_message(chat_id=chat_id, text=f'Следующая страница', reply_markup=keyboards.make_keyboard_search_group( last_request=last_request, page=page + 1, requests=requests, more_than_10=more_than_10)) Condition_request[chat_id][0] += 1 # Регистрируем преподавателя по выбранной кнопке else: msg = bot.send_message( chat_id=chat_id, text='Проверьте правильность ввода 😞', reply_markup=keyboards.make_keyboard_main_menu()) bot.register_next_step_handler(msg, search, bot=bot, storage=storage, tz=tz, last_msg=msg)
async def search(bot: Bot, ans: Message, storage): """Стейт поиска по аудиториям""" global aud_list # Чат ID пользователя chat_id = ans.from_id # Данные ввода data = ans.text # Соответствия по группам all_found_aud = [] # Соответствия для преподов # Задаём состояние для первой страницы page = 1 prep_list = [] all_results = [] if not storage.get_schedule_aud(data) and len(ans.text.replace(' ', '')) < 15: # Отправляем запросы в базу посимвольно for item in data: # Получаем все результаты запроса на каждый символ request_item_all = storage.get_schedule_aud(item) # Проходим по каждому результату запроса одного символа for i in range(len(request_item_all)): # Обращаемся к результатам у которых есть ключ "aud" request_item = request_item_all[i]['aud'] # Записывем все совпадения (Значения ключа "aud") prep_list.append(request_item) request_item = [] request_item_all = [] # Выделение наиболее повторяющихся элементов(а). Фактически результат запроса пользователя. qty_most_common = 0 prep_list_set = set(prep_list) for item in prep_list_set: qty = prep_list.count(item) if qty > qty_most_common: qty_most_common = qty # Переменная с результатом сортировки if ans.text.replace(' ', '').lower() in item.replace('-', '').lower(): all_results.append(item.lower()) # Условие для первичного входа пользователя if storage.get_schedule_aud( data) and aud_list[chat_id] == [] and not all_results: # Результат запроса по аудам request_aud = storage.get_schedule_aud(data) # Циклы нужны для общего поиска. Здесь мы удаляем старые ключи в обоих реквестах и создаём один общий ключ, как для групп, так и для преподов for i in request_aud: i['search'] = i.pop('aud') # Записываем слово, которое ищем request_word = data # Отправляем в функцию данные для создания клавиатуры keyboard = keyboards.make_keyboard_search_group(page, request_aud) # Эти циклы записывают группы и преподов в нижнем регистре для удобной работы с ними for i in request_aud: all_found_aud.append(i['search'].lower()) # Формируем полный багаж для пользователя list_search = [page, request_word, all_found_aud] # Записываем все данные под ключом пользователя aud_list[chat_id] = list_search # Выводим результат поиска с клавиатурой (кливиатур формируется по поисковому запросу) await ans.answer("Результат поиска", keyboard=keyboard) return if all_results and aud_list[chat_id] == []: all_found_aud = all_results request_word = data keyboard = keyboards.make_keyboard_search_group(page, all_found_aud) list_search = [page, request_word, all_found_aud] aud_list[chat_id] = list_search await ans.answer("Результат поиска", keyboard=keyboard) # Здесь уловия для выхода в основное меню elif data == "Основное меню": del aud_list[ans.from_id] await ans.answer("Основное меню", keyboard=keyboards.make_keyboard_start_menu()) await bot.state_dispenser.delete(ans.peer_id) # Здесь уловие для слова "Дальше" elif data == "Дальше": page = aud_list[ans.from_id][0] aud_list[ans.from_id][0] += 1 request_word = aud_list[ans.from_id][1] request_aud = storage.get_schedule_aud(request_word) for i in request_aud: i['search'] = i.pop('aud') request_aud = request_aud[26 * page:] keyboard = keyboards.make_keyboard_search_group(page + 1, request_aud) await ans.answer(f"Страница {page + 1}", keyboard=keyboard) # По аналогии со словом "<==Назад", только обратный процесс elif data == "<==Назад": aud_list[ans.from_id][0] -= 1 page = aud_list[ans.from_id][0] request_word = aud_list[ans.from_id][1] request_aud = storage.get_schedule_aud(request_word) for i in request_aud: i['search'] = i.pop('aud') request_aud = request_aud[26 * (page - 1):] keyboard = keyboards.make_keyboard_search_group(page, request_aud) await ans.answer(f"Страница {page}", keyboard=keyboard) # Условие для вывода расписания для группы и преподавателя по неделям elif ('На текущую неделю' == data or 'На следующую неделю' == data): group = aud_list[ans.from_id][1] request_word = aud_list[ans.from_id][1] request_aud = storage.get_schedule_aud(request_word) # Если есть запрос для группы, то формируем расписание для группы, а если нет, то для препода schedule = request_aud[0] if schedule['schedule'] == []: await schedule_processing.sending_schedule_is_not_available(ans=ans ) return schedule = schedule['schedule'] week = find_week() # меняем неделю if data == 'На следующую неделю': week = 'odd' if week == 'even' else 'even' week_name = 'четная' if week == 'odd' else 'нечетная' aud = request_word schedule_str = full_schedule_in_str_prep(schedule, week=week, aud=aud) # Проверяем, что расписание сформировалось if isinstance(schedule_str, APIError): await schedule_processing.sending_schedule_is_not_available(ans=ans ) await bot.state_dispenser.delete(ans.peer_id) return await ans.answer(f'Расписание {group}\n' f'Неделя: {week_name}', keyboard=keyboards.make_keyboard_start_menu()) # Отправка расписания await schedule_processing.sending_schedule(ans=ans, schedule_str=schedule_str) await bot.state_dispenser.delete(ans.peer_id) # Условия для завершения поиска, тобишь окончательный выбор пользователя elif storage.get_schedule_aud(data) and data.lower() in ( i for i in aud_list[ans.from_id][2]): choose = data aud_list[ans.from_id][1] = choose request_word = aud_list[ans.from_id][1] request_aud = storage.get_schedule_aud(request_word) for i in request_aud: i['search'] = i.pop('aud') await ans.answer( f"Выберите неделю для аудитории {choose}", keyboard=keyboards.make_keyboard_choose_schedule_for_aud_search()) return # Для того, чтобы во время найденного запроса можно было повторить поиск else: if aud_list[ans.from_id] and storage.get_schedule_aud(data): # Результат запроса по аудам request_aud = storage.get_schedule_aud(data) # Циклы нужны для общего поиска. Здесь мы удаляем старые ключи в обоих реквестах и создаём один общий ключ, как для групп, так и для преподов for i in request_aud: i['search'] = i.pop('aud') # Записываем слово, которое ищем request_word = data # Отправляем в функцию данные для создания клавиатуры keyboard = keyboards.make_keyboard_search_group(page, request_aud) # Эти циклы записывают группы и преподов в нижнем регистре для удобной работы с ними for i in request_aud: all_found_aud.append(i['search'].lower()) # Формируем полный багаж для пользователя list_search = [page, request_word, all_found_aud] # Записываем все данные под ключом пользователя aud_list[chat_id] = list_search # Выводим результат поиска с клавиатурой (кливиатур формируется по поисковому запросу) await ans.answer("Результат поиска", keyboard=keyboard) else: try: if len(aud_list[chat_id]) == 3: aud_list[chat_id] = [] finally: if all_results: keyboard = keyboards.make_keyboard_search_group( page, all_results) await ans.answer("Результат поиска", keyboard=keyboard) else: await ans.answer( 'Поиск не дал результатов 😕', keyboard=keyboards.make_keyboard_main_menu()) return