diff --git a/maubot.yaml b/maubot.yaml index 3544e8d..18fded8 100644 --- a/maubot.yaml +++ b/maubot.yaml @@ -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 diff --git a/media_bot/bot.py b/media_bot/bot.py index 9502fbc..4876ba9 100644 --- a/media_bot/bot.py +++ b/media_bot/bot.py @@ -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):