surfaces/adapter/matrix/handlers/confirm.py
Mikhail Putilovskij 35695e043f fix(01-05): align matrix confirmation scope with user and room
- carry Matrix room_id through command callbacks
- persist pending confirmations by user_id and room_id
2026-04-03 12:26:32 +03:00

56 lines
2.2 KiB
Python

from __future__ import annotations
from adapter.matrix.store import clear_pending_confirm, get_pending_confirm
from core.protocol import IncomingCallback, OutgoingMessage
def make_handle_confirm(store=None):
async def handle_confirm(
event: IncomingCallback, auth_mgr, platform, chat_mgr, settings_mgr
) -> list:
if store is None:
return [OutgoingMessage(chat_id=event.chat_id, text="Нет ожидающих подтверждений.")]
room_id = event.payload.get("room_id")
pending = None
if room_id:
pending = await get_pending_confirm(store, event.user_id, room_id)
if not pending:
pending = await get_pending_confirm(store, event.chat_id)
if not pending:
return [OutgoingMessage(chat_id=event.chat_id, text="Нет ожидающих подтверждений.")]
description = pending.get("description", "действие")
if room_id:
await clear_pending_confirm(store, event.user_id, room_id)
else:
await clear_pending_confirm(store, event.chat_id)
return [OutgoingMessage(chat_id=event.chat_id, text=f"Подтверждено: {description}")]
return handle_confirm
def make_handle_cancel(store=None):
async def handle_cancel(
event: IncomingCallback, auth_mgr, platform, chat_mgr, settings_mgr
) -> list:
if store is None:
return [OutgoingMessage(chat_id=event.chat_id, text="Нет ожидающих подтверждений.")]
room_id = event.payload.get("room_id")
pending = None
if room_id:
pending = await get_pending_confirm(store, event.user_id, room_id)
if not pending:
pending = await get_pending_confirm(store, event.chat_id)
if not pending:
return [OutgoingMessage(chat_id=event.chat_id, text="Нет ожидающих подтверждений.")]
if room_id:
await clear_pending_confirm(store, event.user_id, room_id)
else:
await clear_pending_confirm(store, event.chat_id)
return [OutgoingMessage(chat_id=event.chat_id, text="Действие отменено.")]
return handle_cancel