- carry Matrix room_id through command callbacks - persist pending confirmations by user_id and room_id
56 lines
2.2 KiB
Python
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
|