diff --git a/app/bot.py b/app/bot.py index 5802968..41007fc 100644 --- a/app/bot.py +++ b/app/bot.py @@ -291,8 +291,30 @@ class BotUI: lines.append(f" {profiles.resumen(n)}") lines.append("\nmadrugón = de esos minutos, los que te levantas antes " "por la entrada de la mañana. Tu histórico real: 4 minutos, moda 38%.") + real = self._histograma_real() + if real: + lines.append("\n" + real) return "\n".join(lines) + def _histograma_real(self) -> str: + """Lo que hay sorteado ahora mismo, para poder ver el efecto del cambio.""" + from collections import Counter + hoy = self.svc.today() + c: Counter = Counter() + for i in range(60): + for r in self.svc.store.get_plan(hoy + timedelta(days=i)): + t = datetime.fromisoformat(r["target"]) + if r["typ"] == ENTRADA and (t.hour, t.minute) == (9, 0): + c[datetime.fromisoformat(r["planned_at"]).strftime("%H:%M")] += 1 + if not c: + return "" + tot = sum(c.values()) + filas = "\n".join( + f" {h} {'█' * n} {n}" for h, n in sorted(c.items())) + return (f"Tus próximos {tot} días ya sorteados (entrada de la mañana)\n" + f"{filas}\n {len(c)} horas distintas · la más repetida " + f"{max(c.values())} de {tot} ({round(100 * max(c.values()) / tot)}%)") + def _perfil_teclado(self) -> InlineKeyboardMarkup: actual = self.svc.store.get("perfil", profiles.DEFECTO) botones = [InlineKeyboardButton( diff --git a/app/daemon.py b/app/daemon.py index d9758da..db72f1e 100644 --- a/app/daemon.py +++ b/app/daemon.py @@ -27,7 +27,7 @@ logger = logging.getLogger(__name__) ANNOUNCE_LEAD = timedelta(minutes=12) # cuanta antelacion tiene el killswitch MAX_SLEEP = 60.0 REPLAN_HOUR = 4 # hora a la que se planifica el dia -HORIZON_DAYS = 21 # dias que se planifican por adelantado +HORIZON_DAYS = 35 # dias que se planifican por adelantado class Service: