添加订阅列表

This commit is contained in:
chenxiangtong
2026-04-15 19:12:56 +08:00
parent 8824f0630f
commit 7b25f437b8
3 changed files with 76 additions and 0 deletions

View File

@@ -181,6 +181,31 @@ class BangumiRepository:
finally:
session.close()
def get_session_subscribed_subjects(self, session_id: str) -> list[BangumiSubject]:
"""
获取指定会话(群组或私聊)的所有已订阅番剧详情。
Args:
session_id: 会话唯一标识unified_msg_origin
Returns:
BangumiSubject 对象列表,包含名称、集数等信息
"""
db_session = self.Session()
try:
subjects = (
db_session.query(BangumiSubject)
.join(Subscription, Subscription.subject_id == BangumiSubject.subject_id)
.filter(Subscription.group_id == str(session_id))
.all()
)
return subjects
except Exception as e:
logger.error(f"获取会话订阅列表失败: {e}")
raise DatabaseError(f"获取会话订阅列表失败: {e}") from e
finally:
db_session.close()
def get_monitored_subjects(self) -> list[BangumiSubject]:
"""
获取所有已订阅的番剧列表,用于轮询更新

View File

@@ -246,6 +246,31 @@ class SubscriptionService:
lines.append("(仅显示前 5 项)")
return "\n".join(lines), None
def list_subscriptions(self, session_id: str) -> str:
"""
列举当前会话的所有订阅番剧,格式化为可读文本。
"""
try:
subjects = self.storage.get_session_subscribed_subjects(session_id)
except DatabaseError as e:
logger.error(f"SubscriptionService.list_subscriptions 失败: {e}")
return f"❌ 查询失败: {e}"
if not subjects:
return "📭 当前会话暂无追番订阅。\n使用 /追番 <关键词> 添加订阅。"
lines = [f"📋 当前追番列表(共 {len(subjects)} 部):"]
for idx, subject in enumerate(subjects, start=1):
name = subject.name or "未知番剧"
subject_id = subject.subject_id
current_ep = subject.current_episode or 0
total_ep = subject.total_episodes or 0
ep_info = f"已更新至第 {current_ep}" if current_ep else "尚未更新"
if total_ep:
ep_info += f"(全 {total_ep} 集)"
lines.append(f"{idx}. 《{name}》(ID: {subject_id}) — {ep_info}")
return "\n".join(lines)
async def check_updates(self) -> None:
"""
定时任务核心逻辑:检查所有监控中的番剧是否有更新。