v1.6.0: max_bot fixes — feature keys, flush→commit, test-run, categories, broadcast page, proxy error handling, deploy scripts
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
from app.settings_cache import SettingsCache
|
||||
from app.conversation import get_or_create_user, get_template_rendered
|
||||
from app.fsm import BotState, FSM
|
||||
from app.keyboards.inline import build_main_menu_buttons
|
||||
|
||||
|
||||
async def handle_sla_status(bot, user_data: dict, db, max_api):
|
||||
max_user_id = user_data["user_id"]
|
||||
text = user_data.get("text", "").strip()
|
||||
|
||||
if FSM.get_state(max_user_id) != BotState.FEATURE_SLA_STATUS:
|
||||
FSM.set_state(max_user_id, BotState.FEATURE_SLA_STATUS)
|
||||
await max_api.send_message(max_user_id,
|
||||
"🔍 **Проверка SLA статуса**\n\n"
|
||||
"Укажите номер или название объекта."
|
||||
)
|
||||
return
|
||||
|
||||
if not text:
|
||||
await max_api.send_message(max_user_id, "Укажите номер или название объекта.")
|
||||
return
|
||||
|
||||
from app.integrations.portal_db import get_object_by_name_or_id, get_sla_for_object, get_last_incident_for_object, get_active_tasks_for_object
|
||||
obj = await get_object_by_name_or_id(db, text)
|
||||
if not obj:
|
||||
await max_api.send_message(max_user_id, "Объект не найден.")
|
||||
FSM.transition(max_user_id, "done")
|
||||
buttons = build_main_menu_buttons()
|
||||
menu_text = await get_template_rendered(db, "main_menu")
|
||||
await max_api.send_message_with_keyboard(max_user_id, menu_text, buttons)
|
||||
return
|
||||
|
||||
sla = await get_sla_for_object(db, obj.id)
|
||||
if not sla:
|
||||
text = await get_template_rendered(db, "sla_not_found")
|
||||
await max_api.send_message(max_user_id, text)
|
||||
else:
|
||||
level_map = {"start": "Базовый", "business": "Оптимальный", "enterprise": "Максимальный"}
|
||||
last_incident = await get_last_incident_for_object(db, obj.id)
|
||||
open_tasks = await get_active_tasks_for_object(db, obj.id)
|
||||
last_visit = last_incident.created_at.strftime("%d.%m.%Y") if last_incident else "—"
|
||||
tasks_count = len(open_tasks)
|
||||
text = await get_template_rendered(db, "sla_found",
|
||||
object_name=obj.name,
|
||||
service_level=level_map.get(sla.service_level, sla.service_level),
|
||||
status=sla.status,
|
||||
price=sla.sla_price_monthly or 0)
|
||||
text += f"\n📅 Последний визит: {last_visit}\n📋 Открытых задач: {tasks_count}"
|
||||
await max_api.send_message(max_user_id, text, format="markdown")
|
||||
|
||||
FSM.transition(max_user_id, "done")
|
||||
buttons = build_main_menu_buttons()
|
||||
menu_text = await get_template_rendered(db, "main_menu")
|
||||
await max_api.send_message_with_keyboard(max_user_id, menu_text, buttons)
|
||||
Reference in New Issue
Block a user