feat(telegram): candidate list/delete/clear commands

私聊新增 /candidate [页码](待决策列表)、/candi_del(标题按钮逐条删除,删后原地重建键盘、可翻页连续删)、/candi_clear(全部/待决策/取消)。重构 handle_callback 为前缀分派(cdel/cpage/cclr,保留 add/ign/blk/fav);repository 加 list_pending_candidates/delete_all_candidates;LibraryService 加 pending_candidates/delete_candidate/clear_candidates 并刷看板缓存。
This commit is contained in:
kairee committed 2026-11-01 20:45:57 +08:00
1 parent c6790f0ba1
commit 4a9c37f2f3
9 files changed
+473 -23

No files matched your search

+26
View File
@@ -302,6 +302,32 @@ class LibraryService:
message=f"已拉黑 UP,并忽略该 UP 的 {rejected} 条待决策候选",
)
# ------------------------------------------------------------ candidate admin
def pending_candidates(self) -> list[dict[str, Any]]:
return self.repo.list_pending_candidates()
def delete_candidate(self, aid: int) -> dict[str, Any] | None:
"""删除单条候选;返回被删记录(不存在则 None)。"""
aid = int(aid)
candidate = self.repo.get_candidate(aid)
if candidate is None:
return None
self.repo.delete_candidate(aid)
self.repo.bump_cache_version("videos")
self._log("info", "candidate.delete", aid=aid)
return candidate
def clear_candidates(self, *, pending_only: bool = False) -> int:
"""删除候选(``pending_only=True`` 只删待决策);返回删除数。"""
removed = self.repo.delete_all_candidates(pending_only=pending_only)
if removed:
self.repo.bump_cache_version("videos")
self._log(
"info", "candidate.clear", pending_only=pending_only, removed=removed,
)
return removed
# ------------------------------------------------------------ internals
def _result_from_outcome(self, outcome, *, title: str, up_name: str) -> IngestResult: