mirror of
https://github.com/olegvodyanov/docbot.git
synced 2025-12-19 23:57:05 +03:00
change logic
This commit is contained in:
parent
e9dc210786
commit
bcd5aa45e3
@ -1,5 +1,5 @@
|
||||
from telegram import (
|
||||
Update, ReplyKeyboardMarkup, ReplyKeyboardRemove,
|
||||
Update, ReplyKeyboardRemove,
|
||||
InlineKeyboardButton, InlineKeyboardMarkup
|
||||
)
|
||||
from telegram.ext import (
|
||||
@ -32,6 +32,12 @@ PAY_CONSULTATION = 7
|
||||
|
||||
STOPPING = 99
|
||||
|
||||
|
||||
ACCEPT_PERSONAL_DATA_AGREEMENT_TEXT = (
|
||||
"📝 Пожалуйста, подтвердите, что вы согласны с обработкой ваших персональных данных.\n"
|
||||
"Для этого нажмите кнопку ниже."
|
||||
)
|
||||
|
||||
keyboard = [
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
@ -46,13 +52,8 @@ keyboard = [
|
||||
]
|
||||
|
||||
|
||||
ACCEPT_PERSONAL_DATA_AGREEMENT_TEXT = (
|
||||
"📝 Пожалуйста, подтвердите, что вы согласны с обработкой ваших персональных данных.\n"
|
||||
"Для этого нажмите кнопку ниже."
|
||||
)
|
||||
|
||||
|
||||
async def accept_personal_data_agreement(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
||||
|
||||
keyboard_accept = [
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
@ -71,7 +72,7 @@ async def accept_personal_data_agreement(update: Update, context: ContextTypes.D
|
||||
user_data['telegram_id'] = user_id
|
||||
|
||||
logger.info(f"User {user_id} initiated consultation process.")
|
||||
logger.info(f" user exists? {await get_patient_by_telegram_id(user_id)}")
|
||||
logger.info(f"User exists? {await get_patient_by_telegram_id(user_id)}")
|
||||
|
||||
if await get_patient_by_telegram_id(user_id):
|
||||
await update.message.reply_text(
|
||||
@ -94,6 +95,7 @@ async def receive_patient_aceptance(update: Update, context: ContextTypes.DEFAUL
|
||||
|
||||
user_data = context.user_data
|
||||
await update.callback_query.answer()
|
||||
|
||||
if update.callback_query.data == "accepted":
|
||||
user_data['accepted'] = True
|
||||
user_id = user_data['telegram_id']
|
||||
@ -139,8 +141,7 @@ async def choose_consultation_type(update: Update, context: ContextTypes.DEFAULT
|
||||
|
||||
async def enter_patient_phone(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
||||
await update.callback_query.answer()
|
||||
user_data = context.user_data
|
||||
user_id = user_data['telegram_id']
|
||||
user_id = context.user_data['telegram_id']
|
||||
|
||||
patient = await get_patient_by_telegram_id(user_id)
|
||||
has_phone = False
|
||||
@ -149,12 +150,17 @@ async def enter_patient_phone(update: Update, context: ContextTypes.DEFAULT_TYPE
|
||||
|
||||
logger.info(f"User {user_id} has phone: {has_phone}")
|
||||
|
||||
if update.callback_query.data in ["initial_reception"] and not has_phone:
|
||||
if update.callback_query.data == 'back':
|
||||
logger.info(f"User {user_id} requested correction of their phone number")
|
||||
|
||||
if not has_phone:
|
||||
logger.info(f"Ask user {user_id} enter a phone number.")
|
||||
await update.callback_query.edit_message_text(
|
||||
text="Пожалуйста, введите ваш номер телефона для записи на консультацию:"
|
||||
)
|
||||
return ENTER_PATIENT_PHONE
|
||||
elif has_phone:
|
||||
else:
|
||||
logger.info(f"Ask user {user_id} enter a doctor's id.")
|
||||
await update.callback_query.edit_message_text(
|
||||
text="Введите серийный номер врача, к которому вы хотите записаться на консультацию:",
|
||||
parse_mode="Markdown"
|
||||
@ -171,61 +177,104 @@ async def receive_patient_phone(update: Update, context: ContextTypes.DEFAULT_TY
|
||||
# await update_patient_phone(telegram_id=user_id, phone=phone)
|
||||
|
||||
logger.info((f"receive_patient_phone User {user_id} provided phone: {phone}"))
|
||||
await update_patient_phone(telegram_id=user_id, phone=phone)
|
||||
context.user_data['phone'] = phone
|
||||
logger.info((f"receive_patient_phone2 User {user_id} provided phone: {phone}"))
|
||||
|
||||
keyboard = [
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
"Назад",
|
||||
callback_data="back"
|
||||
),
|
||||
]
|
||||
]
|
||||
|
||||
await update.message.reply_text(
|
||||
f"Ваш номер телефона: {phone}\n"
|
||||
"Введите серийный номер врача, к которому вы хотите записаться на консультацию:",
|
||||
parse_mode="Markdown"
|
||||
text=f"Ваш номер телефона: {phone}\n"
|
||||
"Если хотите изменить номер телефона, то нажмите кнопку Назад\n"
|
||||
"Если всё ок, то введите номер врача.",
|
||||
parse_mode="Markdown",
|
||||
reply_markup=InlineKeyboardMarkup(keyboard)
|
||||
)
|
||||
return ENTER_DOCTOR_NUMBER
|
||||
|
||||
|
||||
async def receive_doctor_number(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
||||
doctor_number = update.message.text.strip()
|
||||
user_id = context.user_data['telegram_id']
|
||||
if not context.user_data.get('doctor_number'):
|
||||
patient_phone = context.user_data['phone']
|
||||
doctor_number = update.message.text.strip()
|
||||
context.user_data['doctor_number'] = doctor_number
|
||||
|
||||
await update.message.reply_text(
|
||||
f"Вы ввели серийный номер врача: {doctor_number}\n"
|
||||
"Введите дату и время консультации в формате ДД.ММ.ГГ ЧЧ:ММ, например, 01.01.23 12:00.",
|
||||
parse_mode="Markdown"
|
||||
)
|
||||
await update_patient_phone(telegram_id=user_id, phone=patient_phone)
|
||||
logger.info((f"Saved patient's phone number {patient_phone}"))
|
||||
|
||||
logger.info(f"phone is {context.user_data['phone']}")
|
||||
await update.message.reply_text(
|
||||
text=f"Вы ввели серийный номер врача: {doctor_number}\n"
|
||||
"Введите дату и время консультации в формате ДД.ММ.ГГ ЧЧ:ММ, например, 01.01.23 12:00.",
|
||||
parse_mode="Markdown"
|
||||
)
|
||||
else:
|
||||
logger.info(f"User {user_id} requested correction of their consultation date")
|
||||
await update.callback_query.answer()
|
||||
await update.callback_query.edit_message_text(
|
||||
text="Введите дату и время консультации в формате ДД.ММ.ГГ ЧЧ:ММ, например, 01.01.23 12:00.",
|
||||
parse_mode="Markdown"
|
||||
)
|
||||
|
||||
return ENTER_CONSULTATION_DATE
|
||||
|
||||
|
||||
async def receive_consultation_date(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
||||
consultation_date_time = update.message.text.strip()
|
||||
context.user_data['consultation_date_time'] = consultation_date_time
|
||||
|
||||
# Здесь можно добавить логику для сохранения даты консультации в БД
|
||||
# Например, вызов сервиса для создания записи о консультации
|
||||
|
||||
patient = await get_patient_by_telegram_id(context.user_data['telegram_id'])
|
||||
keyboard = [
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
"Назад",
|
||||
callback_data="back"
|
||||
),
|
||||
InlineKeyboardButton(
|
||||
"Продолжить",
|
||||
callback_data="proceed"
|
||||
),
|
||||
]
|
||||
]
|
||||
|
||||
await create_session(
|
||||
telegram_id=context.user_data['telegram_id'],
|
||||
phone=context.user_data['phone'],
|
||||
consultation_date_time=consultation_date_time,
|
||||
patient=patient
|
||||
)
|
||||
link = f"https://example.com/consultation/{context.user_data['telegram_id']}"
|
||||
await update.message.reply_text(
|
||||
f"Чтобы оплатить консультацию перейдите по ссылке {link}.",
|
||||
text=f"Вы ввели следующую дату консультации: {consultation_date_time}\n"
|
||||
"Если хотите изменить дату консультации, то нажмите кнопку Назад\n"
|
||||
"Если всё ок, то нажмите Продолжить.",
|
||||
parse_mode="Markdown",
|
||||
reply_markup=ReplyKeyboardRemove()
|
||||
reply_markup=InlineKeyboardMarkup(keyboard)
|
||||
)
|
||||
|
||||
return PAY_CONSULTATION
|
||||
|
||||
|
||||
async def pay_consultation(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
||||
await update.message.reply_text(
|
||||
"💳 Пожалуйста, оплатите консультацию по следующей ссылке: [Оплата](https://example.com/pay)",
|
||||
user_id = context.user_data['telegram_id']
|
||||
phone = context.user_data['phone']
|
||||
consultation_date_time = context.user_data['consultation_date_time']
|
||||
patient = await get_patient_by_telegram_id(user_id)
|
||||
|
||||
await create_session(
|
||||
telegram_id=user_id,
|
||||
phone=phone,
|
||||
consultation_date_time=consultation_date_time,
|
||||
patient=patient
|
||||
)
|
||||
|
||||
link = f"https://example.com/consultation/{user_id}"
|
||||
await update.callback_query.answer()
|
||||
await update.callback_query.message.reply_text(
|
||||
f"Чтобы оплатить консультацию перейдите по ссылке {link}.",
|
||||
parse_mode="Markdown"
|
||||
)
|
||||
|
||||
return ConversationHandler.END
|
||||
|
||||
|
||||
@ -242,8 +291,15 @@ def get_consultation_handler() -> ConversationHandler:
|
||||
PROCEED_WITH_CONSULTATION: [CallbackQueryHandler(choose_consultation_type)],
|
||||
SELECT_CONSULTATION_TYPE: [CallbackQueryHandler(enter_patient_phone)],
|
||||
ENTER_PATIENT_PHONE: [MessageHandler(filters=None, callback=receive_patient_phone)],
|
||||
ENTER_DOCTOR_NUMBER: [MessageHandler(filters.TEXT & ~filters.COMMAND, receive_doctor_number)],
|
||||
ENTER_DOCTOR_NUMBER: [
|
||||
MessageHandler(filters.TEXT & ~filters.COMMAND, receive_doctor_number),
|
||||
CallbackQueryHandler(enter_patient_phone, pattern="^" + "back" + "$")
|
||||
],
|
||||
ENTER_CONSULTATION_DATE: [MessageHandler(filters=None, callback=receive_consultation_date)],
|
||||
PAY_CONSULTATION: [
|
||||
CallbackQueryHandler(pay_consultation, pattern="^" + "proceed" + "$"),
|
||||
CallbackQueryHandler(receive_doctor_number, pattern="^" + "back" + "$")
|
||||
],
|
||||
STOPPING: [get_start_handler()],
|
||||
},
|
||||
fallbacks=[get_cancel_handler()],
|
||||
|
||||
@ -19,7 +19,7 @@ def main():
|
||||
bot_instance = ExtBot(token=settings.BOT_TOKEN)
|
||||
app = (
|
||||
ApplicationBuilder()
|
||||
.bot(bot_instance) # явно передаём наш Bot
|
||||
.bot(bot_instance)
|
||||
.persistence(persistence)
|
||||
.concurrent_updates(concurrent_updates=False)
|
||||
.build()
|
||||
@ -33,8 +33,9 @@ def main():
|
||||
app.add_handler(get_verify_handler())
|
||||
app.add_handler(get_help_handler())
|
||||
app.add_handler(get_unknown_handler())
|
||||
logger.debug("Все хэндлеры зарегистрированы, запускаем polling")
|
||||
app.add_error_handler(get_start_handler())
|
||||
|
||||
logger.debug("Все хэндлеры зарегистрированы, запускаем polling")
|
||||
app.run_polling()
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user