get_last_message - получение последнего сообщения в группе
This commit is contained in:
1 parent
5c9f382a7c
commit
b6b1abcd2f
5 files changed
+56
-3
No files matched your search
@@ -0,0 +1,6 @@
|
|||||||
|
Доступные бесплатные модели Tokenator
|
||||||
|
- free-glm-5.3-flash
|
||||||
|
- free-gpt-6-astra
|
||||||
|
- free-claude-opus-5.5
|
||||||
|
- free-gemini-4-argon
|
||||||
|
- free-minimax-m3.1-flash
|
||||||
Binary file not shown.
@@ -1,9 +1,8 @@
|
|||||||
{
|
{
|
||||||
"news.skysamara.ru/sky.test": {
|
"news.skysamara.ru/kraft.vehicles": {
|
||||||
"last_seen": null,
|
"last_seen": null,
|
||||||
"my_ids": [
|
"my_ids": [
|
||||||
"<179302383962.14856.2029190571264960217@test.com>",
|
"<179309410867.8416.14900092104000530043@gmail.com>"
|
||||||
"<179302423690.14856.15120990572980229485@test.com>"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -335,6 +335,38 @@ def read_thread(server: str = DEFAULT_SERVER, group: str = "",
|
|||||||
return {"error": str(e)}
|
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 = "",
|
def post_reply(server: str = DEFAULT_SERVER, group: str = "",
|
||||||
reply_to_msg_id: str = "", body: str = "",
|
reply_to_msg_id: str = "", body: str = "",
|
||||||
sender_name: str = "", sender_email: 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)
|
scan_group = register_mcp_tool(scan_group)
|
||||||
read_thread = register_mcp_tool(read_thread)
|
read_thread = register_mcp_tool(read_thread)
|
||||||
|
get_last_message = register_mcp_tool(get_last_message)
|
||||||
post_reply = register_mcp_tool(post_reply)
|
post_reply = register_mcp_tool(post_reply)
|
||||||
list_groups = register_mcp_tool(list_groups)
|
list_groups = register_mcp_tool(list_groups)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# Профиль персонажа: Виктор
|
||||||
|
**Роль:** Опытный автолюбитель.
|
||||||
|
**Стиль общения:** Краткий, лаконичный, точный, экспертный. Избегать лишних слов и рассуждений.
|
||||||
|
**Личность:** Знающий, уверенный в себе.
|
||||||
|
**Контактные данные (для цитирования):**
|
||||||
|
* **Имя:** Виктор
|
||||||
|
* **Почта:** viksam63@gmail.com
|
||||||
|
|
||||||
|
---
|
||||||
|
**Регламент работы с контекстом ветки `kraft.vehicles`:**
|
||||||
|
1. Все ответы должны имитировать участие в обсуждении темы транспорта/автомобилей.
|
||||||
|
2. При ответе на чужое сообщение, всегда цитировать релевантную часть исходного сообщения или ссылаться на него косвенно (например: "Как верно подметил [Имя]").
|
||||||
|
3. Ответы должны быть максимально информативными при минимальном объеме текста.
|
||||||
|
|
||||||
|
**Контекстная отсылка:** Этот профиль был создан после успешной симуляции ответа в группу `kraft.vehicles` на сервере `news.skysamara.ru`, с использованием Messadge-ID: `<11bpmjd$vft$1@news.kraft-s.ru>`.
|
||||||
Reference in new issue
Block a user