mirror of
https://github.com/olegvodyanov/docbot.git
synced 2025-12-20 08:07:04 +03:00
change logic
This commit is contained in:
parent
e9dc210786
commit
bcd5aa45e3
@ -1,5 +1,5 @@
|
|||||||
from telegram import (
|
from telegram import (
|
||||||
Update, ReplyKeyboardMarkup, ReplyKeyboardRemove,
|
Update, ReplyKeyboardRemove,
|
||||||
InlineKeyboardButton, InlineKeyboardMarkup
|
InlineKeyboardButton, InlineKeyboardMarkup
|
||||||
)
|
)
|
||||||
from telegram.ext import (
|
from telegram.ext import (
|
||||||
@ -32,6 +32,12 @@ PAY_CONSULTATION = 7
|
|||||||
|
|
||||||
STOPPING = 99
|
STOPPING = 99
|
||||||
|
|
||||||
|
|
||||||
|
ACCEPT_PERSONAL_DATA_AGREEMENT_TEXT = (
|
||||||
|
"📝 Пожалуйста, подтвердите, что вы согласны с обработкой ваших персональных данных.\n"
|
||||||
|
"Для этого нажмите кнопку ниже."
|
||||||
|
)
|
||||||
|
|
||||||
keyboard = [
|
keyboard = [
|
||||||
[
|
[
|
||||||
InlineKeyboardButton(
|
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:
|
async def accept_personal_data_agreement(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
||||||
|
|
||||||
keyboard_accept = [
|
keyboard_accept = [
|
||||||
[
|
[
|
||||||
InlineKeyboardButton(
|
InlineKeyboardButton(
|
||||||
@ -71,7 +72,7 @@ async def accept_personal_data_agreement(update: Update, context: ContextTypes.D
|
|||||||
user_data['telegram_id'] = user_id
|
user_data['telegram_id'] = user_id
|
||||||
|
|
||||||
logger.info(f"User {user_id} initiated consultation process.")
|
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):
|
if await get_patient_by_telegram_id(user_id):
|
||||||
await update.message.reply_text(
|
await update.message.reply_text(
|
||||||
@ -94,6 +95,7 @@ async def receive_patient_aceptance(update: Update, context: ContextTypes.DEFAUL
|
|||||||
|
|
||||||
user_data = context.user_data
|
user_data = context.user_data
|
||||||
await update.callback_query.answer()
|
await update.callback_query.answer()
|
||||||
|
|
||||||
if update.callback_query.data == "accepted":
|
if update.callback_query.data == "accepted":
|
||||||
user_data['accepted'] = True
|
user_data['accepted'] = True
|
||||||
user_id = user_data['telegram_id']
|
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:
|
async def enter_patient_phone(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
||||||
await update.callback_query.answer()
|
await update.callback_query.answer()
|
||||||
user_data = context.user_data
|
user_id = context.user_data['telegram_id']
|
||||||
user_id = user_data['telegram_id']
|
|
||||||
|
|
||||||
patient = await get_patient_by_telegram_id(user_id)
|
patient = await get_patient_by_telegram_id(user_id)
|
||||||
has_phone = False
|
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}")
|
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(
|
await update.callback_query.edit_message_text(
|
||||||
text="Пожалуйста, введите ваш номер телефона для записи на консультацию:"
|
text="Пожалуйста, введите ваш номер телефона для записи на консультацию:"
|
||||||
)
|
)
|
||||||
return ENTER_PATIENT_PHONE
|
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(
|
await update.callback_query.edit_message_text(
|
||||||
text="Введите серийный номер врача, к которому вы хотите записаться на консультацию:",
|
text="Введите серийный номер врача, к которому вы хотите записаться на консультацию:",
|
||||||
parse_mode="Markdown"
|
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)
|
# await update_patient_phone(telegram_id=user_id, phone=phone)
|
||||||
|
|
||||||
logger.info((f"receive_patient_phone User {user_id} provided 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
|
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(
|
await update.message.reply_text(
|
||||||
f"Ваш номер телефона: {phone}\n"
|
text=f"Ваш номер телефона: {phone}\n"
|
||||||
"Введите серийный номер врача, к которому вы хотите записаться на консультацию:",
|
"Если хотите изменить номер телефона, то нажмите кнопку Назад\n"
|
||||||
parse_mode="Markdown"
|
"Если всё ок, то введите номер врача.",
|
||||||
|
parse_mode="Markdown",
|
||||||
|
reply_markup=InlineKeyboardMarkup(keyboard)
|
||||||
)
|
)
|
||||||
return ENTER_DOCTOR_NUMBER
|
return ENTER_DOCTOR_NUMBER
|
||||||
|
|
||||||
|
|
||||||
async def receive_doctor_number(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
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(
|
await update_patient_phone(telegram_id=user_id, phone=patient_phone)
|
||||||
f"Вы ввели серийный номер врача: {doctor_number}\n"
|
logger.info((f"Saved patient's phone number {patient_phone}"))
|
||||||
"Введите дату и время консультации в формате ДД.ММ.ГГ ЧЧ:ММ, например, 01.01.23 12:00.",
|
|
||||||
parse_mode="Markdown"
|
|
||||||
)
|
|
||||||
|
|
||||||
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
|
return ENTER_CONSULTATION_DATE
|
||||||
|
|
||||||
|
|
||||||
async def receive_consultation_date(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
async def receive_consultation_date(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
||||||
consultation_date_time = update.message.text.strip()
|
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(
|
await update.message.reply_text(
|
||||||
f"Чтобы оплатить консультацию перейдите по ссылке {link}.",
|
text=f"Вы ввели следующую дату консультации: {consultation_date_time}\n"
|
||||||
|
"Если хотите изменить дату консультации, то нажмите кнопку Назад\n"
|
||||||
|
"Если всё ок, то нажмите Продолжить.",
|
||||||
parse_mode="Markdown",
|
parse_mode="Markdown",
|
||||||
reply_markup=ReplyKeyboardRemove()
|
reply_markup=InlineKeyboardMarkup(keyboard)
|
||||||
)
|
)
|
||||||
|
|
||||||
return PAY_CONSULTATION
|
return PAY_CONSULTATION
|
||||||
|
|
||||||
|
|
||||||
async def pay_consultation(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
async def pay_consultation(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
||||||
await update.message.reply_text(
|
user_id = context.user_data['telegram_id']
|
||||||
"💳 Пожалуйста, оплатите консультацию по следующей ссылке: [Оплата](https://example.com/pay)",
|
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"
|
parse_mode="Markdown"
|
||||||
)
|
)
|
||||||
|
|
||||||
return ConversationHandler.END
|
return ConversationHandler.END
|
||||||
|
|
||||||
|
|
||||||
@ -242,8 +291,15 @@ def get_consultation_handler() -> ConversationHandler:
|
|||||||
PROCEED_WITH_CONSULTATION: [CallbackQueryHandler(choose_consultation_type)],
|
PROCEED_WITH_CONSULTATION: [CallbackQueryHandler(choose_consultation_type)],
|
||||||
SELECT_CONSULTATION_TYPE: [CallbackQueryHandler(enter_patient_phone)],
|
SELECT_CONSULTATION_TYPE: [CallbackQueryHandler(enter_patient_phone)],
|
||||||
ENTER_PATIENT_PHONE: [MessageHandler(filters=None, callback=receive_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)],
|
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()],
|
STOPPING: [get_start_handler()],
|
||||||
},
|
},
|
||||||
fallbacks=[get_cancel_handler()],
|
fallbacks=[get_cancel_handler()],
|
||||||
|
|||||||
@ -19,7 +19,7 @@ def main():
|
|||||||
bot_instance = ExtBot(token=settings.BOT_TOKEN)
|
bot_instance = ExtBot(token=settings.BOT_TOKEN)
|
||||||
app = (
|
app = (
|
||||||
ApplicationBuilder()
|
ApplicationBuilder()
|
||||||
.bot(bot_instance) # явно передаём наш Bot
|
.bot(bot_instance)
|
||||||
.persistence(persistence)
|
.persistence(persistence)
|
||||||
.concurrent_updates(concurrent_updates=False)
|
.concurrent_updates(concurrent_updates=False)
|
||||||
.build()
|
.build()
|
||||||
@ -33,8 +33,9 @@ def main():
|
|||||||
app.add_handler(get_verify_handler())
|
app.add_handler(get_verify_handler())
|
||||||
app.add_handler(get_help_handler())
|
app.add_handler(get_help_handler())
|
||||||
app.add_handler(get_unknown_handler())
|
app.add_handler(get_unknown_handler())
|
||||||
logger.debug("Все хэндлеры зарегистрированы, запускаем polling")
|
app.add_error_handler(get_start_handler())
|
||||||
|
|
||||||
|
logger.debug("Все хэндлеры зарегистрированы, запускаем polling")
|
||||||
app.run_polling()
|
app.run_polling()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user