add 自动更新Cookie

This commit is contained in:
jxxghp
2023-06-15 12:37:10 +08:00
parent 9155c44041
commit 9efb2007fc
10 changed files with 445 additions and 112 deletions

View File

@ -121,7 +121,7 @@ class DownloadChain(ChainBase):
f"{_torrent.title} - {_torrent.enclosure}{error_msg}")
self.post_message(
title="添加下载任务失败:%s %s"
% (_media.title_year, _meta.get_season_episode_string()),
% (_media.title_year, _meta.season_episode),
text=f"站点:{_torrent.site_name}\n"
f"种子名称:{_meta.org_string}\n"
f"种子链接:{_torrent.enclosure}\n"

View File

@ -1,77 +0,0 @@
from app.chain import ChainBase
from app.db.site_oper import SiteOper
class SiteManageChain(ChainBase):
"""
站点远程管理处理链
"""
_sites: SiteOper = None
def __init__(self):
super().__init__()
self._siteoper = SiteOper()
def process(self):
"""
查询所有站点,发送消息
"""
site_list = self._siteoper.list()
if not site_list:
self.post_message(title="没有维护任何站点信息!")
title = f"共有 {len(site_list)} 个站点,回复 `/site_disable` `[id]` 禁用站点,回复 `/site_enable` `[id]` 启用站点:"
messages = []
for site in site_list:
if site.render:
render_str = "🧭"
else:
render_str = ""
if site.is_active:
messages.append(f"{site.id}. [{site.name}]({site.url}){render_str}")
else:
messages.append(f"{site.id}. {site.name} 🈲️")
# 发送列表
self.post_message(title=title, text="\n".join(messages))
def disable(self, arg_str):
"""
禁用站点
"""
if not arg_str:
return
arg_str = arg_str.strip()
if not arg_str.isdigit():
return
site_id = int(arg_str)
site = self._siteoper.get(site_id)
if not site:
self.post_message(title=f"站点编号 {site_id} 不存在!")
return
# 禁用站点
self._siteoper.update(site_id, {
"is_active": False
})
# 重新发送消息
self.process()
def enable(self, arg_str):
"""
启用站点
"""
if not arg_str:
return
arg_str = arg_str.strip()
if not arg_str.isdigit():
return
site_id = int(arg_str)
site = self._siteoper.get(site_id)
if not site:
self.post_message(title=f"站点编号 {site_id} 不存在!")
return
# 禁用站点
self._siteoper.update(site_id, {
"is_active": True
})
# 重新发送消息
self.process()

134
app/chain/site_message.py Normal file
View File

@ -0,0 +1,134 @@
from app.chain import ChainBase
from app.core.config import settings
from app.db.site_oper import SiteOper
from app.helper.cookie import CookieHelper
from app.log import logger
class SiteMessageChain(ChainBase):
"""
站点远程管理处理链
"""
_siteoper: SiteOper = None
_cookiehelper: CookieHelper = None
def __init__(self):
super().__init__()
self._siteoper = SiteOper()
self._cookiehelper = CookieHelper()
def process(self):
"""
查询所有站点,发送消息
"""
site_list = self._siteoper.list()
if not site_list:
self.post_message(title="没有维护任何站点信息!")
title = f"共有 {len(site_list)} 个站点,回复对应指令操作:" \
f"\n- 禁用站点:/site_disable [id]" \
f"\n- 启用站点:/site_enable [id]" \
f"\n- 更新站点Cookie/site_cookie [id] [username] [password]"
messages = []
for site in site_list:
if site.render:
render_str = "🧭"
else:
render_str = ""
if site.is_active:
messages.append(f"{site.id}. [{site.name}]({site.url}){render_str}")
else:
messages.append(f"{site.id}. {site.name}")
# 发送列表
self.post_message(title=title, text="\n".join(messages))
def disable(self, arg_str):
"""
禁用站点
"""
if not arg_str:
return
arg_str = arg_str.strip()
if not arg_str.isdigit():
return
site_id = int(arg_str)
site = self._siteoper.get(site_id)
if not site:
self.post_message(title=f"站点编号 {site_id} 不存在!")
return
# 禁用站点
self._siteoper.update(site_id, {
"is_active": False
})
# 重新发送消息
self.process()
def enable(self, arg_str):
"""
启用站点
"""
if not arg_str:
return
arg_str = arg_str.strip()
if not arg_str.isdigit():
return
site_id = int(arg_str)
site = self._siteoper.get(site_id)
if not site:
self.post_message(title=f"站点编号 {site_id} 不存在!")
return
# 禁用站点
self._siteoper.update(site_id, {
"is_active": True
})
# 重新发送消息
self.process()
def get_cookie(self, arg_str: str):
"""
使用用户名密码更新站点Cookie
"""
err_title = "请输入正确的命令格式:/site_cookie [id] [username] [password]" \
"[id]为站点编号,[uername]为站点用户名,[password]为站点密码"
if not arg_str:
self.post_message(title=err_title)
return
arg_str = arg_str.strip()
args = arg_str.split()
if len(args) != 3:
self.post_message(title=err_title)
return
site_id = args[0]
if not site_id.isdigit():
self.post_message(title=err_title)
return
# 站点ID
site_id = int(site_id)
# 站点信息
site_info = self._siteoper.get(site_id)
if not site_info:
self.post_message(title=f"站点编号 {site_id} 不存在!")
return
# 用户名
username = args[1]
# 密码
password = args[2]
# 更新站点Cookie
result = self._cookiehelper.get_site_cookie_ua(
url=site_info.url,
username=username,
password=password,
proxies=settings.PROXY if site_info.proxy else None
)
if result:
cookie, ua, msg = result
if not cookie:
logger.error(msg)
self.post_message(title=f"{site_info.name}】 Cookie&UA更新失败",
text=f"错误原因:{msg}")
return
self._siteoper.update(site_id, {
"cookie": cookie,
"ua": ua
})
self.post_message(title=f"{site_info.name}】 Cookie&UA更新成功")

View File

@ -303,7 +303,8 @@ class SubscribeChain(ChainBase):
if not subscribes:
self.post_message(title='没有任何订阅!')
return
title = f"共有 {len(subscribes)} 个订阅,回复 `/subscribe_delete` `[id]` 删除订阅:"
title = f"共有 {len(subscribes)} 个订阅,回复对应指令操作: " \
f"\n- 删除订阅:/subscribe_delete [id]"
messages = []
for subscribe in subscribes:
if subscribe.type == MediaType.MOVIE.value:
@ -313,8 +314,8 @@ class SubscribeChain(ChainBase):
tmdb_link = f"https://www.themoviedb.org/tv/{subscribe.tmdbid}"
messages.append(f"{subscribe.id}. [{subscribe.name}{subscribe.year}]({tmdb_link}) "
f"{subscribe.season}"
f"{subscribe.total_episode - (subscribe.lack_episode or subscribe.total_episode)}"
f"/{subscribe.total_episode}")
f"_{subscribe.total_episode - (subscribe.lack_episode or subscribe.total_episode)}"
f"/{subscribe.total_episode}_")
# 发送列表
self.post_message(title=title, text='\n'.join(messages))