diff --git a/main.py b/main.py index c4af353..3ed8c4f 100644 --- a/main.py +++ b/main.py @@ -52,6 +52,14 @@ def templates_list_text() -> str: parts.append(f"{tid} — {label}" if label else tid) return ", ".join(parts) if parts else "нет макетов" +def _format_delta_ms(delta: timedelta) -> str: + """HH:MM:SS.mmm, не допускаем отрицательных значений.""" + total_ms = int(max(delta.total_seconds(), 0) * 1000) + hours, rem = divmod(total_ms, 3_600_000) + minutes, rem = divmod(rem, 60_000) + seconds, milliseconds = divmod(rem, 1_000) + return f"{hours:02d}:{minutes:02d}:{seconds:02d}.{milliseconds:03d}" + def minutes_until_break(now: datetime | None = None) -> str: """Логика расписания перекуров.""" if now is None: @@ -72,14 +80,12 @@ def minutes_until_break(now: datetime | None = None) -> str: end_dt = dt_for(end_t) if now < start_dt or (start_dt <= now < end_dt): - minutes = int((end_dt - now).total_seconds() // 60) - return f"{minutes} минут до перекура" + return f"{_format_delta_ms(end_dt - now)} до перекура" if br_minutes: break_end = end_dt + timedelta(minutes=br_minutes) if end_dt <= now < break_end: - remaining = int((break_end - now).total_seconds() // 60) - return f"Идёт перекур, осталось {remaining} минут" + return f"Идёт перекур, осталось {_format_delta_ms(break_end - now)}" return "Пары закончились, перекур только завтра."