133 lines
4.1 KiB
Python
133 lines
4.1 KiB
Python
|
|
# Aiogram imports
|
|||
|
|
from aiogram.types import InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup
|
|||
|
|
from aiogram.utils.keyboard import InlineKeyboardBuilder, ReplyKeyboardBuilder
|
|||
|
|
from decouple import config
|
|||
|
|
import pytz
|
|||
|
|
|
|||
|
|
|
|||
|
|
QUESTION_CATEGORIES = [
|
|||
|
|
("💼 Работа", "labor"),
|
|||
|
|
("🛒 Защита прав потребителей", "consumer"),
|
|||
|
|
("🏠 Жилье / аренда", "housing"),
|
|||
|
|
("👪 Семья", "family"),
|
|||
|
|
("💰 Долги / займы", "civil"),
|
|||
|
|
("📄 Договоры", "civil"),
|
|||
|
|
("⚖️ Суд / процесс", "procedural"),
|
|||
|
|
("❓ Другое", "other"),
|
|||
|
|
]
|
|||
|
|
|
|||
|
|
USER_TYPES = [
|
|||
|
|
("Физлицо", "physical_person"),
|
|||
|
|
("ИП", "individual_entrepreneur"),
|
|||
|
|
("ООО", "company"),
|
|||
|
|
]
|
|||
|
|
|
|||
|
|
CATEGORY_BY_TEXT = {text: code for text, code in QUESTION_CATEGORIES}
|
|||
|
|
USER_TYPE_BY_TEXT = {text: code for text, code in USER_TYPES}
|
|||
|
|
USER_TYPE_LABEL_BY_CODE = {code: text for text, code in USER_TYPES}
|
|||
|
|
TZ = pytz.timezone(config("TIMEZONE"))
|
|||
|
|
|
|||
|
|
|
|||
|
|
def get_main_menu_kb() -> ReplyKeyboardMarkup:
|
|||
|
|
builder = ReplyKeyboardBuilder()
|
|||
|
|
|
|||
|
|
builder.row(KeyboardButton(text="⚖️ Задать вопрос"))
|
|||
|
|
builder.row(
|
|||
|
|
KeyboardButton(text="📚 Мои консультации"),
|
|||
|
|
KeyboardButton(text="👤 Профиль"),
|
|||
|
|
)
|
|||
|
|
builder.row(KeyboardButton(text="ℹ️ Помощь"))
|
|||
|
|
|
|||
|
|
return builder.as_markup(resize_keyboard=True, is_persistent=True)
|
|||
|
|
|
|||
|
|
|
|||
|
|
def get_categories_kb() -> ReplyKeyboardMarkup:
|
|||
|
|
builder = ReplyKeyboardBuilder()
|
|||
|
|
|
|||
|
|
for text, _ in QUESTION_CATEGORIES:
|
|||
|
|
builder.add(KeyboardButton(text=text))
|
|||
|
|
|
|||
|
|
builder.add(KeyboardButton(text="↩️ В меню"))
|
|||
|
|
builder.adjust(1)
|
|||
|
|
|
|||
|
|
return builder.as_markup(resize_keyboard=True, is_persistent=True)
|
|||
|
|
|
|||
|
|
|
|||
|
|
def get_back_to_menu_kb() -> ReplyKeyboardMarkup:
|
|||
|
|
builder = ReplyKeyboardBuilder()
|
|||
|
|
builder.row(KeyboardButton(text="↩️ В меню"))
|
|||
|
|
return builder.as_markup(resize_keyboard=True)
|
|||
|
|
|
|||
|
|
|
|||
|
|
def get_profile_kb() -> ReplyKeyboardMarkup:
|
|||
|
|
builder = ReplyKeyboardBuilder()
|
|||
|
|
|
|||
|
|
builder.row(KeyboardButton(text="🌍 Изменить регион"))
|
|||
|
|
builder.row(KeyboardButton(text="👔 Изменить тип пользователя"))
|
|||
|
|
builder.row(KeyboardButton(text="🗑 Удалить мои данные"))
|
|||
|
|
builder.row(KeyboardButton(text="↩️ В меню"))
|
|||
|
|
|
|||
|
|
return builder.as_markup(resize_keyboard=True, is_persistent=True)
|
|||
|
|
|
|||
|
|
|
|||
|
|
def get_user_types_kb() -> ReplyKeyboardMarkup:
|
|||
|
|
builder = ReplyKeyboardBuilder()
|
|||
|
|
|
|||
|
|
for text, _ in USER_TYPES:
|
|||
|
|
builder.add(KeyboardButton(text=text))
|
|||
|
|
|
|||
|
|
builder.add(KeyboardButton(text="↩️ В меню"))
|
|||
|
|
builder.adjust(1)
|
|||
|
|
|
|||
|
|
return builder.as_markup(resize_keyboard=True)
|
|||
|
|
|
|||
|
|
|
|||
|
|
def get_delete_profile_kb() -> ReplyKeyboardMarkup:
|
|||
|
|
builder = ReplyKeyboardBuilder()
|
|||
|
|
|
|||
|
|
builder.row(KeyboardButton(text="✅ Да, удалить"))
|
|||
|
|
builder.row(KeyboardButton(text="↩️ В меню"))
|
|||
|
|
|
|||
|
|
return builder.as_markup(resize_keyboard=True)
|
|||
|
|
|
|||
|
|
|
|||
|
|
def get_consultations_ikb(consultations: list) -> InlineKeyboardMarkup:
|
|||
|
|
builder = InlineKeyboardBuilder()
|
|||
|
|
|
|||
|
|
for consultation in consultations:
|
|||
|
|
title = consultation.title or consultation.category
|
|||
|
|
updated_at = consultation.updated_at.astimezone(TZ).strftime("%d.%m.%Y")
|
|||
|
|
builder.row(
|
|||
|
|
ai_button(
|
|||
|
|
text=f"{title[:48]} — {updated_at}",
|
|||
|
|
callback_data=f"consultation:open:{consultation.id}",
|
|||
|
|
)
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
return builder.as_markup()
|
|||
|
|
|
|||
|
|
|
|||
|
|
def get_consultation_actions_ikb(consultation_id: int) -> InlineKeyboardMarkup:
|
|||
|
|
builder = InlineKeyboardBuilder()
|
|||
|
|
|
|||
|
|
builder.row(
|
|||
|
|
ai_button(
|
|||
|
|
text="🔁 Продолжить",
|
|||
|
|
callback_data=f"consultation:continue:{consultation_id}",
|
|||
|
|
)
|
|||
|
|
)
|
|||
|
|
builder.row(
|
|||
|
|
ai_button(
|
|||
|
|
text="🗑 Удалить",
|
|||
|
|
callback_data=f"consultation:delete:{consultation_id}",
|
|||
|
|
)
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
return builder.as_markup()
|
|||
|
|
|
|||
|
|
|
|||
|
|
def ai_button(text: str, callback_data: str):
|
|||
|
|
from aiogram.types import InlineKeyboardButton
|
|||
|
|
|
|||
|
|
return InlineKeyboardButton(text=text, callback_data=callback_data)
|