Fix admin relay message id mapping

This commit is contained in:
InfernoXuaI
2026-05-21 16:30:25 +08:00
parent 93d523d2e3
commit 95f14e3809
2 changed files with 13 additions and 5 deletions
+5 -5
View File
@@ -284,11 +284,11 @@ def rate_limited(user_id: int) -> bool:
return len(bucket) > max_messages
def save_message_map(admin_msg: Message, user_id: int, user_message_id: int | None) -> None:
def save_message_map(admin_chat_id: int, admin_message_id: int, user_id: int, user_message_id: int | None) -> None:
with closing(db()) as conn:
conn.execute(
"INSERT OR REPLACE INTO message_map(admin_chat_id, admin_message_id, user_id, user_message_id, created_at) VALUES(?,?,?,?,?)",
(admin_msg.chat.id, admin_msg.message_id, user_id, user_message_id, now_iso()),
(admin_chat_id, admin_message_id, user_id, user_message_id, now_iso()),
)
conn.commit()
@@ -783,9 +783,9 @@ async def user_message(message: Message) -> None:
first_copy_id = None
for chat_id in all_admin_chat_ids():
sent = await bot.send_message(chat_id, header) # type: ignore[union-attr]
save_message_map(sent, uid, message.message_id)
save_message_map(chat_id, sent.message_id, uid, message.message_id)
copied = await message.copy_to(chat_id, reply_to_message_id=sent.message_id) # type: ignore[arg-type]
save_message_map(copied, uid, message.message_id)
save_message_map(chat_id, copied.message_id, uid, message.message_id)
first_header_id = first_header_id or sent.message_id
first_copy_id = first_copy_id or copied.message_id
mark_inbox_forwarded(inbox_id, first_header_id, first_copy_id)
@@ -1161,7 +1161,7 @@ async def flush_pending_inbox() -> None:
first_id = None
for chat_id in all_admin_chat_ids():
sent = await bot.send_message(chat_id, text)
save_message_map(sent, int(row['user_id']), int(row['user_message_id']) if row['user_message_id'] else None)
save_message_map(chat_id, sent.message_id, int(row['user_id']), int(row['user_message_id']) if row['user_message_id'] else None)
first_id = first_id or sent.message_id
mark_inbox_forwarded(int(row['id']), first_id, None)
except Exception as e:
+8
View File
@@ -176,6 +176,14 @@ class MonitorMessageCleanupTest(unittest.TestCase):
row = conn.execute("SELECT direction, source, text, forwarded FROM inbox_messages WHERE id=?", (outbox_id,)).fetchone()
self.assertEqual(("out", "web:inbox", "reply text", 1), (row["direction"], row["source"], row["text"], row["forwarded"]))
def test_save_message_map_supports_message_id_only_payload(self) -> None:
app.save_message_map(1001, 3003, 2001, 4004)
with closing(sqlite3.connect(app.DB_PATH)) as conn:
row = conn.execute(
"SELECT admin_chat_id, admin_message_id, user_id, user_message_id FROM message_map"
).fetchone()
self.assertEqual((1001, 3003, 2001, 4004), row)
def test_expired_monitor_message_is_deleted_and_removed_from_queue(self) -> None:
sent_message = SimpleNamespace(chat=SimpleNamespace(id=1001), message_id=2002)
app.record_monitor_message(sent_message, "NodeSeek 新帖", delete_after_seconds=60, sent_at_ts=1000)