44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
"""
|
||
Построение текста постов.
|
||
|
||
Только текстовая логика — без отправки, без Telegram API, без зависимостей.
|
||
Легко тестируется изолированно.
|
||
"""
|
||
|
||
_RESP_SEP = "\n\n─────────────────────"
|
||
|
||
|
||
def build_full_text(
|
||
base_text: str,
|
||
responsible: list[dict],
|
||
events_lines: list[str] | None = None,
|
||
new_count: int = 0,
|
||
) -> str:
|
||
"""
|
||
Собирает итоговый текст поста:
|
||
1. Основной текст (base_text)
|
||
2. «📋 Последние события» — все события кроме последних new_count
|
||
3. «🆕 Новое» — последние new_count событий (из текущего вебхука)
|
||
4. Разделитель + «В работе» — всегда самый последний блок
|
||
"""
|
||
clean = base_text.split(_RESP_SEP)[0]
|
||
result = clean
|
||
|
||
if events_lines:
|
||
if new_count > 0:
|
||
history = events_lines[:-new_count]
|
||
newest = events_lines[-new_count:]
|
||
else:
|
||
history = events_lines
|
||
newest = []
|
||
history = history[-6:]
|
||
if history:
|
||
result += "\n\n📋 *Последние события:*\n" + "\n".join(history)
|
||
if newest:
|
||
result += "\n\n🆕 *Новое:*\n" + "\n".join(newest)
|
||
|
||
if responsible:
|
||
names = ", ".join(r["user_name"] for r in responsible)
|
||
result += _RESP_SEP + f"\n🙋 В работе: {names}"
|
||
|
||
return result
|