v0.6.2: Sunday cleanup recap as separate follow-up message

The Sunday emby-cleaner recap used to be appended to the same digest body
and shared the (N/M) byte-length splitting. Now it ships as its own
message after the main digest, keeping the daily-digest content focused
on what's new and the cleanup recap on what was removed.

Closes maubot-media#1.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Maddox 2026-05-11 20:39:39 -04:00
parent f8f89b794e
commit 87eef44d93
2 changed files with 21 additions and 16 deletions

View file

@ -1,6 +1,6 @@
maubot: 0.3.1
id: com.3ddbrewery.media
version: 0.6.1
version: 0.6.2
license: MIT
modules:
- media_bot

View file

@ -1659,8 +1659,8 @@ class MediaBot(Plugin):
Skips the Completed section entirely when every finished release is
already represented in Recently Added; skips Queued when both arrs are
empty; splits long bodies (e.g. Sunday cleanup recap) across numbered
messages so Matrix clients don't truncate.
empty. On Sundays, the emby-cleaner recap goes out as a separate
follow-up message so the main digest stays focused on what's new.
"""
cutoff = datetime.now(timezone.utc).timestamp() - 86400
emby_uid = self._any_emby_uid("")
@ -1704,16 +1704,16 @@ class MediaBot(Plugin):
local = _local_now()
is_sunday = local.weekday() == 6 # Mon=0..Sun=6
today_str = local.strftime("%A, %b %d")
lines = [f"**📰 Daily digest — {today_str}**", ""]
lines.append(f"**🆕 Recently added ({len(added)}):**")
digest_lines = [f"**📰 Daily digest — {today_str}**", ""]
digest_lines.append(f"**🆕 Recently added ({len(added)}):**")
for it in added[:8]:
lines.append("- " + self._fmt_emby_item(it))
digest_lines.append("- " + self._fmt_emby_item(it))
if not added:
lines.append("- (nothing in the last sweep)")
digest_lines.append("- (nothing in the last sweep)")
if nzb_unique or qbt_unique:
lines.append("")
lines.append(
digest_lines.append("")
digest_lines.append(
f"**✅ Also completed (not yet in {self._media_label()}): "
f"{len(nzb_unique) + len(qbt_unique)}** "
f"(NZBGet: {len(nzb_unique)} · qBt: {len(qbt_unique)})"
@ -1721,21 +1721,26 @@ class MediaBot(Plugin):
for h in nzb_unique[:5]:
name = h.get("Name") or h.get("NZBName") or "?"
size_mb = h.get("FileSizeMB") or 0
lines.append(f"- *{name}* — {size_mb / 1024:.1f} GB")
digest_lines.append(f"- *{name}* — {size_mb / 1024:.1f} GB")
for t in qbt_unique[:5]:
lines.append(f"- *{t.get('name','?')}* — {_human_bytes(t.get('size') or 0)}")
digest_lines.append(f"- *{t.get('name','?')}* — {_human_bytes(t.get('size') or 0)}")
if s_q or r_q:
lines.append("")
lines.append(f"**📥 Queued: {len(s_q)} TV · {len(r_q)} movies**")
digest_lines.append("")
digest_lines.append(f"**📥 Queued: {len(s_q)} TV · {len(r_q)} movies**")
await self._send_chunked(room, digest_lines)
if is_sunday:
cleaner_lines = await self._fetch_emby_cleaner_recap()
if cleaner_lines:
lines.append("")
lines.append("**🧹 Weekly cleanup (emby-cleaner):**")
lines.extend(cleaner_lines)
cleanup_lines = ["**🧹 Weekly cleanup (emby-cleaner):**"]
cleanup_lines.extend(cleaner_lines)
await self._send_chunked(room, cleanup_lines)
async def _send_chunked(self, room: str, lines: list[str]) -> None:
"""Pack `lines` into chunks ≤ 3000 chars and send them as separate
messages, prefixing with `(N/M)` only when more than one chunk."""
chunks = self._chunk_lines(lines)
total = len(chunks)
for idx, chunk in enumerate(chunks, 1):