| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -17,6 +17,7 @@ import re | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton, WebAppInfo | 
					 | 
					 | 
					 | 
					from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton, WebAppInfo | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import logging | 
					 | 
					 | 
					 | 
					import logging | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from aiogram.types import ReplyKeyboardRemove | 
					 | 
					 | 
					 | 
					from aiogram.types import ReplyKeyboardRemove | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					from aiogram.utils.callback_data import CallbackData | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					TOKEN = '7907319434:AAEEM55xbWHhp5uPAlJ5AS2vNoleES_z_Kk' | 
					 | 
					 | 
					 | 
					TOKEN = '7907319434:AAEEM55xbWHhp5uPAlJ5AS2vNoleES_z_Kk' | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -144,6 +145,13 @@ whatsapp = InlineKeyboardMarkup(row_width=1).add( | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					) | 
					 | 
					 | 
					 | 
					) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					# Обработчик команды /menu | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					@dp.message_handler(Command("menu")) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					async def show_menu(message: types.Message): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    await message.answer("В настоящее время я, как Ваш виртуальный помощник, активно развиваюсь." | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                     " В ближайшее время у меня появятся новые функции и возможности." | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                     " А пока Вы можете ознакомиться с текущим меню.", reply_markup=main_menu) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# Обработка нажатий на инлайн-кнопки | 
					 | 
					 | 
					 | 
					# Обработка нажатий на инлайн-кнопки | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					@dp.callback_query_handler(lambda c: c.data.startswith("menu_") or c.data == "main_menu") | 
					 | 
					 | 
					 | 
					@dp.callback_query_handler(lambda c: c.data.startswith("menu_") or c.data == "main_menu") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					async def handle_main_menu(call: types.CallbackQuery): | 
					 | 
					 | 
					 | 
					async def handle_main_menu(call: types.CallbackQuery): | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -156,8 +164,8 @@ async def handle_main_menu(call: types.CallbackQuery): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     " В ближайшее время у меня появятся новые функции и возможности." | 
					 | 
					 | 
					 | 
					                                     " В ближайшее время у меня появятся новые функции и возможности." | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     " А пока Вы можете ознакомиться с текущим меню.", reply_markup=main_menu) | 
					 | 
					 | 
					 | 
					                                     " А пока Вы можете ознакомиться с текущим меню.", reply_markup=main_menu) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    elif call.data == "menu_contacts": | 
					 | 
					 | 
					 | 
					    elif call.data == "menu_contacts": | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        await call.message.edit_text("Клиники им. проф. Е.Н.Оленевой\n\n" | 
					 | 
					 | 
					 | 
					        await call.message.edit_text("<b>Клиники им. проф. Е.Н.Оленевой</b>\n\n" | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "Клиника УХО•ГОРЛО•НОС\n" | 
					 | 
					 | 
					 | 
					                                     "Клиника <b>УХО•ГОРЛО•НОС</b>\n" | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "Записаться на приём, задать вопрос:\n" | 
					 | 
					 | 
					 | 
					                                     "Записаться на приём, задать вопрос:\n" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "📞 +7 (342) 207-03-03\n\n" | 
					 | 
					 | 
					 | 
					                                     "📞 +7 (342) 207-03-03\n\n" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "Больше информации о клинике и врачах на нашем <a href='https://perm.oclinica.ru/lor'>🔗САЙТЕ</a>\n" | 
					 | 
					 | 
					 | 
					                                     "Больше информации о клинике и врачах на нашем <a href='https://perm.oclinica.ru/lor'>🔗САЙТЕ</a>\n" | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -165,7 +173,7 @@ async def handle_main_menu(call: types.CallbackQuery): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "(ост. Строительный факультет)\n" | 
					 | 
					 | 
					 | 
					                                     "(ост. Строительный факультет)\n" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "<a href='https://tinyurl.com/286a8tv7'>Построить маршрут</a>\n\n"                                 | 
					 | 
					 | 
					 | 
					                                     "<a href='https://tinyurl.com/286a8tv7'>Построить маршрут</a>\n\n"                                 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "--------------\n\n" | 
					 | 
					 | 
					 | 
					                                     "--------------\n\n" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "Клиника лечения КАШЛЯ•АЛЛЕРГИИ\n" | 
					 | 
					 | 
					 | 
					                                     "Клиника лечения <b>КАШЛЯ•АЛЛЕРГИИ</b>\n" | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "Записаться на приём, задать вопрос:\n" | 
					 | 
					 | 
					 | 
					                                     "Записаться на приём, задать вопрос:\n" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "📞 +7 (342) 200-02-03\n\n" | 
					 | 
					 | 
					 | 
					                                     "📞 +7 (342) 200-02-03\n\n" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "Больше информации о клинике и врачах на нашем <a href='https://perm.oclinica.ru/allergo'>🔗САЙТЕ</a>\n\n" | 
					 | 
					 | 
					 | 
					                                     "Больше информации о клинике и врачах на нашем <a href='https://perm.oclinica.ru/allergo'>🔗САЙТЕ</a>\n\n" | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -173,7 +181,7 @@ async def handle_main_menu(call: types.CallbackQuery): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "(ост. Г. Звезда)\n" | 
					 | 
					 | 
					 | 
					                                     "(ост. Г. Звезда)\n" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "<a href='https://tinyurl.com/9a9w5pdu'>Построить маршрут</a>\n\n" | 
					 | 
					 | 
					 | 
					                                     "<a href='https://tinyurl.com/9a9w5pdu'>Построить маршрут</a>\n\n" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "--------------\n\n" | 
					 | 
					 | 
					 | 
					                                     "--------------\n\n" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "Центр ДИАГНОСТИКИ И РЕАБИЛИТАЦИИ \n" | 
					 | 
					 | 
					 | 
					                                     "Центр <b>ДИАГНОСТИКИ И РЕАБИЛИТАЦИИ</b> \n" | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "📞 +7 (342) 287-16-94\n\n" | 
					 | 
					 | 
					 | 
					                                     "📞 +7 (342) 287-16-94\n\n" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "Больше информации о клинике и врачах на нашем <a href='https://cdr.oclinica.ru/'>🔗САЙТЕ</a>\n\n" | 
					 | 
					 | 
					 | 
					                                     "Больше информации о клинике и врачах на нашем <a href='https://cdr.oclinica.ru/'>🔗САЙТЕ</a>\n\n" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                     "📍 г. Пермь, ул. Пермь, ул. Г. Звезда, 31А\n" | 
					 | 
					 | 
					 | 
					                                     "📍 г. Пермь, ул. Пермь, ул. Г. Звезда, 31А\n" | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -738,7 +746,31 @@ def find_patient_by_id(telegram_id): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                return None  # Возвращаем None, если номер неправильной длины | 
					 | 
					 | 
					 | 
					                return None  # Возвращаем None, если номер неправильной длины | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return None | 
					 | 
					 | 
					 | 
					    return None | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					# Коллбек-дата для кнопок | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					patient_callback = CallbackData("patient", "index") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					@dp.message_handler(Command("patients")) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					async def show_patients(message: types.Message): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    telegram_id = message.from_user.id | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    patients = find_patients_by_id(telegram_id) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    if not patients: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        await message.answer("Пациенты с вашим Telegram ID не найдены.") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        return | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    keyboard = InlineKeyboardMarkup(row_width=3)  # Теперь 2 кнопки в строке | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    buttons = [ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        InlineKeyboardButton( | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            text=patient["ФИО"], | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            callback_data=patient_callback.new(index=index) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        ) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        for index, patient in enumerate(patients) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    ] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    # Добавляем кнопки в клавиатуру по 2 в строке | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    keyboard.add(*buttons) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    await message.answer("Выберите пациента:", reply_markup=keyboard) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def authorize_google(): | 
					 | 
					 | 
					 | 
					def authorize_google(): | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |