fix AutoSignIn

This commit is contained in:
jxxghp
2024-03-24 08:43:35 +08:00
parent f85b10cf55
commit a172d9b8e3
3 changed files with 90 additions and 25 deletions

View File

@@ -2,7 +2,7 @@
"AutoSignIn": {
"name": "站点自动签到",
"description": "自动模拟登录站点、签到。",
"version": "1.5",
"version": "1.6",
"icon": "signin.png",
"author": "thsrite",
"level": 2

View File

@@ -37,7 +37,7 @@ class AutoSignIn(_PluginBase):
# 插件图标
plugin_icon = "signin.png"
# 插件版本
plugin_version = "1.5"
plugin_version = "1.6"
# 插件作者
plugin_author = "thsrite"
# 作者主页
@@ -651,23 +651,23 @@ class AutoSignIn(_PluginBase):
userid=event.event_data.get("user"))
if self._sign_sites:
self.__do(today=today, type="签到", do_sites=self._sign_sites, event=event)
self.__do(today=today, type_str="签到", do_sites=self._sign_sites, event=event)
if self._login_sites:
self.__do(today=today, type="登录", do_sites=self._login_sites, event=event)
self.__do(today=today, type_str="登录", do_sites=self._login_sites, event=event)
def __do(self, today: datetime, type: str, do_sites: list, event: Event = None):
def __do(self, today: datetime, type_str: str, do_sites: list, event: Event = None):
"""
签到逻辑
"""
yesterday = today - timedelta(days=1)
yesterday_str = yesterday.strftime('%Y-%m-%d')
# 删除昨天历史
self.del_data(key=type + "-" + yesterday_str)
self.del_data(key=type_str + "-" + yesterday_str)
self.del_data(key=f"{yesterday.month}{yesterday.day}")
# 查看今天有没有签到|登录历史
today = today.strftime('%Y-%m-%d')
today_history = self.get_data(key=type + "-" + today)
today_history = self.get_data(key=type_str + "-" + today)
# 查询所有站点
all_sites = [site for site in self.sites.get_indexers() if not site.get("public")] + self.__custom_sites()
@@ -679,7 +679,7 @@ class AutoSignIn(_PluginBase):
# 今日没数据
if not today_history or self._clean:
logger.info(f"今日 {today}{type},开始{type}已选站点")
logger.info(f"今日 {today}{type_str},开始{type_str}已选站点")
if self._clean:
# 关闭开关
self._clean = False
@@ -694,20 +694,20 @@ class AutoSignIn(_PluginBase):
site.get("id") not in already_sites or site.get("id") in retry_sites]
if not no_sites:
logger.info(f"今日 {today}{type},无重新{type}站点,本次任务结束")
logger.info(f"今日 {today}{type_str},无重新{type_str}站点,本次任务结束")
return
# 任务站点 = 需要重试+今日未do
do_sites = no_sites
logger.info(f"今日 {today}{type},开始重试命中关键词站点")
logger.info(f"今日 {today}{type_str},开始重试命中关键词站点")
if not do_sites:
logger.info(f"没有需要{type}的站点")
logger.info(f"没有需要{type_str}的站点")
return
# 执行签到
logger.info(f"开始执行{type}任务 ...")
if type == "签到":
logger.info(f"开始执行{type_str}任务 ...")
if type_str == "签到":
with ThreadPool(min(len(do_sites), int(self._queue_cnt))) as p:
status = p.map(self.signin_site, do_sites)
else:
@@ -715,7 +715,7 @@ class AutoSignIn(_PluginBase):
status = p.map(self.login_site, do_sites)
if status:
logger.info(f"站点{type}任务完成!")
logger.info(f"站点{type_str}任务完成!")
# 获取今天的日期
key = f"{datetime.now().month}{datetime.now().day}"
today_data = self.get_data(key)
@@ -790,13 +790,13 @@ class AutoSignIn(_PluginBase):
if not self._retry_keyword:
# 没设置重试关键词则重试已选站点
retry_sites = self._sign_sites if type == "签到" else self._login_sites
logger.debug(f"下次{type}重试站点 {retry_sites}")
retry_sites = self._sign_sites if type_str == "签到" else self._login_sites
logger.debug(f"下次{type_str}重试站点 {retry_sites}")
# 存入历史
self.save_data(key=type + "-" + today,
self.save_data(key=type_str + "-" + today,
value={
"do": self._sign_sites if type == "签到" else self._login_sites,
"do": self._sign_sites if type_str == "签到" else self._login_sites,
"retry": retry_sites
})
@@ -814,21 +814,21 @@ class AutoSignIn(_PluginBase):
signin_message += retry_msg
signin_message = "\n".join([f'{s[0]}{s[1]}' for s in signin_message if s])
self.post_message(title=f"【站点自动{type}",
self.post_message(title=f"【站点自动{type_str}",
mtype=NotificationType.SiteMessage,
text=f"全部{type}数量: {len(self._sign_sites if type == '签到' else self._login_sites)} \n"
f"本次{type}数量: {len(do_sites)} \n"
f"下次{type}数量: {len(retry_sites) if self._retry_keyword else 0} \n"
text=f"全部{type_str}数量: {len(self._sign_sites if type_str == '签到' else self._login_sites)} \n"
f"本次{type_str}数量: {len(do_sites)} \n"
f"下次{type_str}数量: {len(retry_sites) if self._retry_keyword else 0} \n"
f"{signin_message}"
)
if event:
self.post_message(channel=event.event_data.get("channel"),
title=f"站点{type}完成!", userid=event.event_data.get("user"))
title=f"站点{type_str}完成!", userid=event.event_data.get("user"))
else:
logger.error(f"站点{type}任务失败!")
logger.error(f"站点{type_str}任务失败!")
if event:
self.post_message(channel=event.event_data.get("channel"),
title=f"站点{type}任务失败!", userid=event.event_data.get("user"))
title=f"站点{type_str}任务失败!", userid=event.event_data.get("user"))
# 保存配置
self.__update_config()

View File

@@ -0,0 +1,65 @@
from typing import Tuple
from urllib.parse import urljoin
from ruamel.yaml import CommentedMap
from app.core.config import settings
from app.log import logger
from app.plugins.autosignin.sites import _ISiteSigninHandler
from app.utils.http import RequestUtils
class MTorrent(_ISiteSigninHandler):
"""
m-team签到
"""
# 匹配的站点Url每一个实现类都需要设置为自己的站点Url
site_url = "m-team"
@classmethod
def match(cls, url: str) -> bool:
"""
根据站点Url判断是否匹配当前站点签到类大部分情况使用默认实现即可
:param url: 站点Url
:return: 是否匹配如匹配则会调用该类的signin方法
"""
return True if cls.site_url in url.split(".") else False
def signin(self, site_info: CommentedMap) -> Tuple[bool, str]:
"""
执行签到操作,馒头实际没有签到,访问一下用户详情页面即可
:param site_info: 站点信息含有站点Url、站点Cookie、UA等信息
:return: 签到结果信息
"""
site = site_info.get("name")
site_cookie = site_info.get("cookie")
ua = site_info.get("ua")
proxy = site_info.get("proxy")
render = site_info.get("render")
url = site_info.get("url")
if render:
# 获取页面html
html_text = self.get_page_source(url=url,
cookie=site_cookie,
ua=ua,
proxy=proxy,
render=render)
if not html_text:
logger.error(f"{site} 模拟登录失败,请检查站点连通性")
return False, '模拟登录失败,请检查站点连通性'
if "登 錄" in html_text:
logger.error(f"{site} 模拟登录失败Cookie已失效")
return False, '模拟登录失败Cookie已失效'
return True, '模拟登录成功'
else:
res = RequestUtils(cookies=site_cookie,
ua=ua,
timeout=60,
proxies=settings.PROXY if proxy else None
).post_res(url=urljoin(url, "api/member/profile"))
if res:
logger.info(f'{site}】模拟登录成功')
return True, f'模拟登录成功'
else:
logger.error(f"{site} 模拟登录失败,{res.status_code if res else '网络错误'}")
return False, f"模拟登录失败,{res.status_code if res else '网络错误'}"