From ff9c35041eb663a3d58579d42b982323619f28f9 Mon Sep 17 00:00:00 2001 From: KoWming <1075151242@qq.com> Date: Wed, 17 Dec 2025 10:13:21 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=A2=9E=E5=8A=A0=E7=AD=BE=E5=88=B0?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=E6=9C=BA=E5=88=B6=E9=98=B2=E6=AD=A2=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E7=AD=BE=E5=88=B0=EF=BC=8C=E5=A2=9E=E5=BC=BA=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=81=A5=E5=A3=AE=E6=80=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 ++- plugins/invitessignin/__init__.py | 39 ++++++++++++++++++++++--------- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 5e6d6db..b03dfce 100644 --- a/package.json +++ b/package.json @@ -466,13 +466,14 @@ "name": "药丸签到", "description": "药丸论坛签到。", "labels": "站点", - "version": "2.0.1", + "version": "2.0.2", "icon": "invites.png", "author": "thsrite", "level": 2, "v2": true, "release": true, "history": { + "v2.0.2": "增加签到检测机制防止重复签到,增强代码健壮性。", "v2.0.1": "尝试修复签到失败问题,新增使用代理、Cookie自动更新功能", "v2.0.0": "修复签到失败问题,新增账户登录签到功能、新增签到失败重试机制,美化界面UI", "v1.4.1": "更新签到域名前缀", diff --git a/plugins/invitessignin/__init__.py b/plugins/invitessignin/__init__.py index 89c8834..35a7150 100644 --- a/plugins/invitessignin/__init__.py +++ b/plugins/invitessignin/__init__.py @@ -23,7 +23,7 @@ class InvitesSignin(_PluginBase): # 插件图标 plugin_icon = "invites.png" # 插件版本 - plugin_version = "2.0.1" + plugin_version = "2.0.2" # 插件作者 plugin_author = "thsrite" # 作者主页 @@ -99,7 +99,7 @@ class InvitesSignin(_PluginBase): self._scheduler.print_jobs() self._scheduler.start() - def _get_proxies(self): + def __get_proxies(self): """ 获取代理设置 """ @@ -129,23 +129,23 @@ class InvitesSignin(_PluginBase): } # 获取代理 - proxies = self._get_proxies() + proxies = self.__get_proxies() # 尝试获取新session,禁止重定向以便捕获Set-Cookie response = RequestUtils(headers=headers, proxies=proxies).get_res(url="https://invites.fun", allow_redirects=False) if not response: return None - # 1. 优先尝试从Set-Cookie响应头中提取 + # 1. 优先尝试从 response.cookies 中获取 (requests 自动处理) + if response.cookies.get('flarum_session'): + return response.cookies.get('flarum_session') + + # 2. 作为备用,尝试从 Set-Cookie 响应头中提取 cookies = response.headers.get('Set-Cookie', '') session_match = re.search(r'flarum_session=([^;]+)', cookies) if session_match: return session_match.group(1) - # 2. 如果没有Set-Cookie,检查是否本身已经有了session (某些情况下可能直接返回了页面) - if response.cookies.get('flarum_session'): - return response.cookies.get('flarum_session') - return None def __get_remember_value(self, cookie: str) -> str: @@ -187,7 +187,7 @@ class InvitesSignin(_PluginBase): } # 获取代理 - proxies = self._get_proxies() + proxies = self.__get_proxies() response_get = RequestUtils(headers=headers_get, proxies=proxies).get_res('https://invites.fun/') if not response_get or response_get.status_code != 200: @@ -327,6 +327,23 @@ class InvitesSignin(_PluginBase): def __signin(self): """药丸签到""" + # 1. 检查今日是否已签到 + try: + history = self.get_data('history') or [] + if history: + # 按时间倒序排序 + history = sorted(history, key=lambda x: x.get("date") or "", reverse=True) + last_checkin = history[0] + last_date = last_checkin.get("date", "") + if last_date: + # 获取今日日期字符串 YYYY-MM-DD + today_str = datetime.now().strftime('%Y-%m-%d') + if last_date.startswith(today_str): + logger.info(f"今日已签到 ({last_date}),跳过本次任务") + return + except Exception as e: + logger.warning(f"检查签到历史失败: {e}") + for attempt in range(self._retry_count): logger.info(f"开始第 {attempt + 1} 次签到尝试") @@ -391,7 +408,7 @@ class InvitesSignin(_PluginBase): logger.info("成功刷新session") # 获取代理 - proxies = self._get_proxies() + proxies = self.__get_proxies() # 4. 使用新cookie获取csrfToken和userId res = RequestUtils(cookies=new_cookie, proxies=proxies).get_res(url="https://invites.fun") @@ -502,7 +519,7 @@ class InvitesSignin(_PluginBase): return False # 获取代理 - proxies = self._get_proxies() + proxies = self.__get_proxies() # 执行签到请求 checkin_url = f'https://invites.fun/api/users/{user_id}'