meet doctor logic

This commit is contained in:
Oleg Oleg 2026-01-09 21:18:22 +04:00
parent 855fbf8d0e
commit ed848bbbca
3 changed files with 49 additions and 21 deletions

View File

@ -1,31 +1,66 @@
from telegram import Update
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import (
ContextTypes,
CommandHandler,
ConversationHandler,
CallbackQueryHandler
)
from docbot.handlers.utils.cancel_handler import get_cancel_handler
from docbot.handlers.start_handler import get_start_handler
from core.logging import logger
GET_TERMS_ACKNOWLEDGED = 1
async def show_terms(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
user_id = context.user_data['user_id']
async def show_tariffs(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
keyboard_tariff = [
[
InlineKeyboardButton(
text="Тариф Новичок\n10 консультаций на месяц\n3990 рублей",
callback_data="tariff:ten:consultations",
url="https://pay.example.com/novice"
),
InlineKeyboardButton(
text="Тариф Безлимит\n100 консультаций на месяц\n5990 рублей",
callback_data="tariff:hundred:consultations",
url="https://pay.example.com/beslimit"
),
]
]
await update.callback_query.message.reply_text(
text="Введите адрес вашей платёжной ссылки, пожалуйста."
text="Оплатить.\n\n"
"Юридический текст: для оказания услуг понадобятся ваши персональные данные:\n\n"
"фио, специальность и Telegram ID.\n\n"
"Нажимая кнопку оплатить, вы соглашаетесь с условиями оферты и обработкой персональных данных\n\n"
"на условиях Политики обработки перс данных (гиперссылка на оферту и Политику)",
reply_markup=InlineKeyboardMarkup(keyboard_tariff)
)
logger.info(f"Ask user {user_id} to enter their payment link.")
return GET_TERMS_ACKNOWLEDGED
def meet_doctor_handler() -> ConversationHandler:
async def send_notification(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
await update.callback_query.message.reply_text(
text="Спасибо вам за доверие!\n\n"
"Бот обработает платеж в течение 10-20 минут и предложит вам регистрацию.\n\n"
"Чек придет вам на почту, если что-то пойдет не так - пишите @help_milana_in_law"
)
return ConversationHandler.END
def meet_doctor_method() -> CommandHandler:
"""Фабрика для регистрации в Application."""
return CommandHandler("payment_methods", show_tariffs)
def get_meet_doctor_handler() -> ConversationHandler:
return ConversationHandler(
entry_points=[get_start_handler()],
entry_points=[meet_doctor_method()],
states={
GET_TERMS_ACKNOWLEDGED: [
CallbackQueryHandler(show_terms, pattern="^(terms:aknowledged)$")
CallbackQueryHandler(send_notification, pattern="^(tariff)$")
],
},
fallbacks=[get_cancel_handler()],

View File

@ -9,16 +9,7 @@ async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
user_id = update.effective_user.id
if await get_doctor(user_id):
keyboard_accept = [
[
InlineKeyboardButton(
"Узнать условия",
callback_data="terms:aknowledged"
),
]
]
text = (
"👋 <b>Добро пожаловать в DocBot!</b>\n"
"Привет, это первый сервис безопасных онлайн-консультаций Докбот.\n\n"
@ -26,11 +17,11 @@ async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
"Бот разработан медицинским юристом Миланой Бессоновой с соблюдением всех строгих законов о персональных данных.\n\n"
"В отличии от других сервисов, Докбот реально защищает врача от избыточного сбора персональных данных, штрафов и возвратов.\n\n"
"Хотите работать законно и безопасно?\n\n"
"Нажмите 'Узнать условия' чтобы ознакомиться с тарифами\n\n"
"Используйте команду /meet, чтобы ознакомиться с тарифами\n\n"
"Юридический текст: для оказания услуг понадобятся ваши персональные данные: фио, специальность и Telegram ID.\n\n"
"Ознакомиться с офертой и условиями Политики обработки перс данных можно тут (гиперссылка на оферту и Политику).\n\n"
)
await context.bot.send_message(chat_id=update.effective_chat.id, text=text, parse_mode=ParseMode.HTML, reply_markup=InlineKeyboardMarkup(keyboard_accept))
await context.bot.send_message(chat_id=update.effective_chat.id, text=text, parse_mode=ParseMode.HTML)
else:
text = (
"👋 <b>Добро пожаловать в DocBot!</b>\n"

View File

@ -1,4 +1,5 @@
from core.logging import logger
from docbot.handlers.doctors.meet_doctor_handler import get_meet_doctor_handler
from telegram.ext import ApplicationBuilder, PicklePersistence, ExtBot
from core.config import settings
@ -39,6 +40,7 @@ def main():
app.add_handler(get_referral_handlers())
app.add_handler(get_verify_handler())
app.add_handler(get_add_payment_method_handler())
app.add_handler(get_meet_doctor_handler())
app.add_handler(get_unknown_handler())