feat(task-7): verify matrix per-room context routing
This commit is contained in:
parent
c11c8ecfbf
commit
07c5078934
2 changed files with 56 additions and 3 deletions
|
|
@ -190,8 +190,11 @@ class MatrixBot:
|
||||||
user=sender,
|
user=sender,
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
chat_id = await resolve_chat_id(self.runtime.store, room.room_id, sender)
|
local_chat_id = await resolve_chat_id(self.runtime.store, room.room_id, sender)
|
||||||
incoming = from_room_event(event, room_id=room.room_id, chat_id=chat_id)
|
dispatch_chat_id = local_chat_id
|
||||||
|
if not body.startswith("!"):
|
||||||
|
dispatch_chat_id = (room_meta or {}).get("platform_chat_id") or local_chat_id
|
||||||
|
incoming = from_room_event(event, room_id=room.room_id, chat_id=dispatch_chat_id)
|
||||||
if incoming is None:
|
if incoming is None:
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
|
|
@ -206,7 +209,7 @@ class MatrixBot:
|
||||||
)
|
)
|
||||||
outgoing = [
|
outgoing = [
|
||||||
OutgoingMessage(
|
OutgoingMessage(
|
||||||
chat_id=chat_id,
|
chat_id=dispatch_chat_id,
|
||||||
text="Сервис временно недоступен. Попробуйте ещё раз позже."
|
text="Сервис временно недоступен. Попробуйте ещё раз позже."
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -253,6 +253,56 @@ async def test_bot_assigns_platform_chat_id_for_existing_managed_room():
|
||||||
runtime.dispatcher.dispatch.assert_awaited_once()
|
runtime.dispatcher.dispatch.assert_awaited_once()
|
||||||
|
|
||||||
|
|
||||||
|
async def test_bot_routes_plain_messages_via_platform_chat_id():
|
||||||
|
runtime = build_runtime(platform=MockPlatformClient())
|
||||||
|
await set_room_meta(
|
||||||
|
runtime.store,
|
||||||
|
"!chat1:example.org",
|
||||||
|
{
|
||||||
|
"chat_id": "C1",
|
||||||
|
"matrix_user_id": "@alice:example.org",
|
||||||
|
"platform_chat_id": "matrix:ctx-1",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
client = SimpleNamespace(user_id="@bot:example.org")
|
||||||
|
bot = MatrixBot(client, runtime)
|
||||||
|
bot._send_all = AsyncMock()
|
||||||
|
runtime.dispatcher.dispatch = AsyncMock(return_value=[])
|
||||||
|
room = SimpleNamespace(room_id="!chat1:example.org")
|
||||||
|
event = SimpleNamespace(sender="@alice:example.org", body="hello")
|
||||||
|
|
||||||
|
await bot.on_room_message(room, event)
|
||||||
|
|
||||||
|
dispatched = runtime.dispatcher.dispatch.await_args.args[0]
|
||||||
|
assert dispatched.chat_id == "matrix:ctx-1"
|
||||||
|
assert dispatched.text == "hello"
|
||||||
|
|
||||||
|
|
||||||
|
async def test_bot_keeps_commands_on_local_chat_id():
|
||||||
|
runtime = build_runtime(platform=MockPlatformClient())
|
||||||
|
await set_room_meta(
|
||||||
|
runtime.store,
|
||||||
|
"!chat1:example.org",
|
||||||
|
{
|
||||||
|
"chat_id": "C1",
|
||||||
|
"matrix_user_id": "@alice:example.org",
|
||||||
|
"platform_chat_id": "matrix:ctx-1",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
client = SimpleNamespace(user_id="@bot:example.org")
|
||||||
|
bot = MatrixBot(client, runtime)
|
||||||
|
bot._send_all = AsyncMock()
|
||||||
|
runtime.dispatcher.dispatch = AsyncMock(return_value=[])
|
||||||
|
room = SimpleNamespace(room_id="!chat1:example.org")
|
||||||
|
event = SimpleNamespace(sender="@alice:example.org", body="!rename New")
|
||||||
|
|
||||||
|
await bot.on_room_message(room, event)
|
||||||
|
|
||||||
|
dispatched = runtime.dispatcher.dispatch.await_args.args[0]
|
||||||
|
assert dispatched.chat_id == "C1"
|
||||||
|
assert dispatched.command == "rename"
|
||||||
|
|
||||||
|
|
||||||
async def test_bot_leaves_existing_platform_chat_id_unchanged():
|
async def test_bot_leaves_existing_platform_chat_id_unchanged():
|
||||||
runtime = build_runtime(platform=MockPlatformClient())
|
runtime = build_runtime(platform=MockPlatformClient())
|
||||||
await set_room_meta(
|
await set_room_meta(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue