添加订阅列表
This commit is contained in:
@@ -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]:
|
||||
"""
|
||||
获取所有已订阅的番剧列表,用于轮询更新
|
||||
|
||||
@@ -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:
|
||||
"""
|
||||
定时任务核心逻辑:检查所有监控中的番剧是否有更新。
|
||||
|
||||
Reference in New Issue
Block a user