get_last_message - получение последнего сообщения в группе

This commit is contained in:
ysv committed 2026-10-27 14:23:34 +03:00
1 parent 5c9f382a7c
commit b6b1abcd2f
5 files changed
+56 -3

No files matched your search

Binary file not shown.
+2 -3
View File
@@ -1,9 +1,8 @@
{
"news.skysamara.ru/sky.test": {
"news.skysamara.ru/kraft.vehicles": {
"last_seen": null,
"my_ids": [
"<179302383962.14856.2029190571264960217@test.com>",
"<179302423690.14856.15120990572980229485@test.com>"
"<179309410867.8416.14900092104000530043@gmail.com>"
]
}
}
+33
View File
@@ -335,6 +335,38 @@ def read_thread(server: str = DEFAULT_SERVER, group: str = "",
return {"error": str(e)}
def get_last_message(server: str = DEFAULT_SERVER, group: str = "",
port: int = DEFAULT_PORT) -> dict:
"""
ПОСЛЕДНЕЕ СООБЩЕНИЕ: запрашивает у NNTP-сервера максимальный номер статьи
в группе и возвращает это сообщение целиком: номер, Message-ID, тему,
автора, дату и тело (очищенное от цитат).
"""
if not group:
return {"error": "Не указана группа (group)"}
try:
with _connect(server, port) as s:
_, count, first, last, _ = s.group(group)
count, last = int(count), int(last)
if count == 0:
return {"status": "empty", "group": group,
"error": "В группе нет сообщений"}
msg = email.message_from_bytes(b"\n".join(s.article(str(last))[1].lines),
policy=email_policy)
msgid = (msg.get("Message-ID") or f"<local-{last}>").strip()
return {"status": "ok", "group": group, "num": last, "msgid": msgid,
"subject": _decode(msg.get("Subject", "")),
"from": _decode(msg.get("From", "")),
"date": _parse_date(str(msg.get("Date", ""))),
"body": _clean_quotes(_extract_body(msg))}
except Exception as e:
return {"status": "error", "group": group,
"error": f"Ошибка получения последнего сообщения: {e}"}
def post_reply(server: str = DEFAULT_SERVER, group: str = "",
reply_to_msg_id: str = "", body: str = "",
sender_name: str = "", sender_email: str = "",
@@ -403,6 +435,7 @@ def list_groups(server: str = DEFAULT_SERVER,
# Безопасная централизованная регистрация инструментов через прокси-функцию
scan_group = register_mcp_tool(scan_group)
read_thread = register_mcp_tool(read_thread)
get_last_message = register_mcp_tool(get_last_message)
post_reply = register_mcp_tool(post_reply)
list_groups = register_mcp_tool(list_groups)