diff --git a/app/plugins/autosignin/__init__.py b/app/plugins/autosignin/__init__.py index 8d355d85..bad4cd0d 100644 --- a/app/plugins/autosignin/__init__.py +++ b/app/plugins/autosignin/__init__.py @@ -72,6 +72,7 @@ class AutoSignIn(_PluginBase): _clean: bool = False _start_time: int = None _end_time: int = None + _auto_cf: int = 0 def init_plugin(self, config: dict = None): self.sites = SitesHelper() @@ -91,6 +92,7 @@ class AutoSignIn(_PluginBase): self._sign_sites = config.get("sign_sites") or [] self._login_sites = config.get("login_sites") or [] self._retry_keyword = config.get("retry_keyword") + self._auto_cf = config.get("auto_cf") self._clean = config.get("clean") # 过滤掉已删除的站点 @@ -206,6 +208,7 @@ class AutoSignIn(_PluginBase): "sign_sites": self._sign_sites, "login_sites": self._login_sites, "retry_keyword": self._retry_keyword, + "auto_cf": self._auto_cf, "clean": self._clean, } ) @@ -333,7 +336,7 @@ class AutoSignIn(_PluginBase): 'component': 'VCol', 'props': { 'cols': 12, - 'md': 4 + 'md': 3 }, 'content': [ { @@ -350,7 +353,7 @@ class AutoSignIn(_PluginBase): 'component': 'VCol', 'props': { 'cols': 12, - 'md': 4 + 'md': 3 }, 'content': [ { @@ -366,7 +369,7 @@ class AutoSignIn(_PluginBase): 'component': 'VCol', 'props': { 'cols': 12, - 'md': 4 + 'md': 3 }, 'content': [ { @@ -378,6 +381,23 @@ class AutoSignIn(_PluginBase): } } ] + }, + { + 'component': 'VCol', + 'props': { + 'cols': 12, + 'md': 3 + }, + 'content': [ + { + 'component': 'VTextField', + 'props': { + 'model': 'auto_cf', + 'label': '自动优选', + 'placeholder': '0为不开启,命中重试关键词达到数量自动进行Cloudflare IP优选' + } + } + ] } ] }, @@ -443,6 +463,25 @@ class AutoSignIn(_PluginBase): ] } ] + }, + { + 'component': 'VRow', + 'content': [ + { + 'component': 'VCol', + 'props': { + 'cols': 12, + }, + 'content': [ + { + 'component': 'VAlert', + 'props': { + 'text': '自动Cloudflare IP优选,0=不开启,命中重试关键词数量大于该数量时自动执行Cloudflare IP优选。(需要开启且则正确配置Cloudflare IP优选插件和自定义Hosts插件)' + } + } + ] + } + ] } ] } @@ -450,6 +489,7 @@ class AutoSignIn(_PluginBase): "enabled": False, "notify": True, "cron": "", + "auto_cf": 0, "onlyonce": False, "clean": False, "queue_cnt": 5, @@ -724,6 +764,10 @@ class AutoSignIn(_PluginBase): "retry": retry_sites }) + # 自动Cloudflare IP优选 + if self._auto_cf and self._auto_cf > 0 and retry_msg and len(retry_msg) > self._auto_cf: + EventManager().send_event(EventType.CloudFlareSpeedTest, {}) + # 发送通知 if self._notify: # 签到详细信息 登录成功、签到成功、已签到、仿真签到成功、失败--命中重试 diff --git a/app/plugins/cloudflarespeedtest/__init__.py b/app/plugins/cloudflarespeedtest/__init__.py index f520999a..32c64a45 100644 --- a/app/plugins/cloudflarespeedtest/__init__.py +++ b/app/plugins/cloudflarespeedtest/__init__.py @@ -14,6 +14,7 @@ from python_hosts import Hosts, HostsEntry from requests import Response from app.core.config import settings +from app.core.event import eventmanager from app.log import logger from app.plugins import _PluginBase from app.schemas.types import EventType, NotificationType @@ -154,7 +155,8 @@ class CloudflareSpeedTest(_PluginBase): # 执行优选命令,-dd不测速 if SystemUtils.is_windows(): cf_command = f'cd \"{self._cf_path}\" && CloudflareST {self._additional_args} -o \"{self._result_file}\"' + ( - f' -f \"{self._cf_ipv4}\"' if self._ipv4 else '') + (f' -f \"{self._cf_ipv6}\"' if self._ipv6 else '') + f' -f \"{self._cf_ipv4}\"' if self._ipv4 else '') + ( + f' -f \"{self._cf_ipv6}\"' if self._ipv6 else '') else: cf_command = f'cd {self._cf_path} && chmod a+x {self._binary_name} && ./{self._binary_name} {self._additional_args} -o {self._result_file}' + ( f' -f {self._cf_ipv4}' if self._ipv4 else '') + (f' -f {self._cf_ipv6}' if self._ipv6 else '') @@ -313,7 +315,7 @@ class CloudflareSpeedTest(_PluginBase): # 重装后数据库有版本数据,但是本地没有则重装 if not install_flag and release_version == self._version and not Path( f'{self._cf_path}/{self._binary_name}').exists() and not Path( - f'{self._cf_path}/CloudflareST.exe').exists(): + f'{self._cf_path}/CloudflareST.exe').exists(): logger.warn(f"未检测到CloudflareSpeedTest本地版本,重新安装") install_flag = True @@ -757,3 +759,10 @@ class CloudflareSpeedTest(_PluginBase): self._scheduler = None except Exception as e: logger.error("退出插件失败:%s" % str(e)) + + @eventmanager.register(EventType.CloudFlareSpeedTest) + def auto_cloudflare_speedtest(self, event): + """ + 触发Cloudflare IP优选 + """ + self.__cloudflareSpeedTest() diff --git a/app/schemas/types.py b/app/schemas/types.py index 95c964d5..0acf1cc9 100644 --- a/app/schemas/types.py +++ b/app/schemas/types.py @@ -46,6 +46,8 @@ class EventType(Enum): NameRecognizeResult = "name.recognize.result" # 目录监控同步 DirectorySync = "directory.sync" + # Cloudflare IP优选 + CloudFlareSpeedTest = "cloudflare.speedtest" # 系统配置Key字典