""" Построение текста постов. Только текстовая логика — без отправки, без 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