// ==UserScript== // @name 网站自动签到 // @namespace https://docs.scriptcat.org/ // @version 0.3.1 // @description 我自用的网站自动签到工具 // @icon data:image/png;base64,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 // @author Linch // @match https://framehdr.com/* // @match https://www.kungal.com/* // @match https://www.acfun.cn/* // @match https://www.hdsay.net/* // @grant GM_addStyle // @grant GM_xmlhttpRequest // @grant unsafeWindow // @grant GM_getValue // @grant GM_setValue // @tag AcFun // @tag 帧影 // @tag framehdr // @tag 鲲Galgame // @tag kungal // @tag 自动签到 // @run-at document-end // @noframes // @license MIT // ==/UserScript== // 一个轻量级的 message 提示实现 class MessageService { constructor() { // 创建一个容器来放所有的提示 this.container = document.createElement('div'); this.container.style.cssText = ` position: fixed; top: 20px; left: 50%; transform: translateX(-50%); display: flex; flex-direction: column; align-items: center; z-index: 9999; `; document.body.appendChild(this.container); } show(text, type = 'success') { const p = document.createElement('p'); // 基础的样式,你可以按需调整颜色、大小等 const bgColor = type === 'success' ? '#52c41a' : '#ff4d4f'; p.style.cssText = ` margin: 10px; padding: 10px 20px; background-color: ${bgColor}; color: #fff; border-radius: 4px; box-shadow: 0 4px 12px rgba(0,0,0,0.15); font-size: 14px; animation: fadeIn 0.3s; `; p.textContent = text; this.container.appendChild(p); // 3秒后自动消失 setTimeout(() => { if (p.parentNode) { p.style.opacity = '0'; p.style.transition = 'opacity 0.3s'; setTimeout(() => p.remove(), 300); } }, 3000); } } (function() { 'use strict'; function getRandom(array) { if (array.length === 0) { return undefined; // 数组为空时返回 undefined } const randomIndex = Math.floor(Math.random() * array.length); return array[randomIndex]; } /** * 封装 GM_xmlhttpRequest 为 Promise * @template T - 期望的响应数据类型 * @param {GMTypes.XHRDetails} options - GM_xmlhttpRequest 的配置选项 * @returns {Promise} 直接返回解析后的 JSON 数据 * @throws {Error} 当 HTTP 状态非 2xx 或 JSON 解析失败时抛出错误 */ function gmRequest(options) { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ ...options, onload: (resp) => { if (resp.status === 401) { reject(new Error(NEED_LOGIN)); return; } let data; try { data = JSON.parse(resp.responseText); } catch { data = resp.responseText; // 降级为原始文本 } if (resp.status >= 200 && resp.status < 300) { resolve(data); // 成功:返回解析后的数据 } else { // 失败:reject 包含状态码和响应体 const err = new Error(`HTTP ${resp.status}`); err.status = resp.status; err.responseData = data; // 携带响应内容 reject(err); } }, onerror: (err) => reject(new Error(`网络错误:${err.error || err}`)) }); }); } class HDSayModule { static parseSignStatus(htmlString) { const parser = new DOMParser(); const doc = parser.parseFromString(htmlString, 'text/html'); // 1. 获取两个状态元素 const greenSpan = Array.from(doc.querySelectorAll('span')).find( span => span.textContent.trim().includes('今日已签到') ); const graySpan = Array.from(doc.querySelectorAll('span')).find( span => span.textContent.trim().includes('今日未签到') ); // 2. 优先检查绿色元素:如果没有 display:none 说明已签到 if (greenSpan) { const greenStyle = greenSpan.getAttribute('style') || ''; if (!greenStyle.includes('display:none')) { return true; // ✅ 已签到 } } // 3. 备用检查灰色元素:如果灰色是隐藏的(display:none),说明已签到 if (graySpan) { const grayStyle = graySpan.getAttribute('style') || ''; if (grayStyle.includes('display:none')) { return true; // ✅ 已签到 } } // 4. 否则视为未签到 return false; } static getRandomMood() { const moods = ['1', '3', '10', '4', '5', '8', '9']; return getRandom(moods); } static getVerificationToken(htmlString) { const parser = new DOMParser(); const doc = parser.parseFromString(htmlString, 'text/html'); const tokenInput = doc.querySelector('form#fm_MemberSign input[name="__RequestVerificationToken"]'); return tokenInput ? tokenInput.value : null; } } const message = new MessageService(); var NEED_LOGIN="您还未登录,登录后自动签到"; var SITES = [ // 帧影 framehdr { name: "帧影 framehdr", test: function(h) { return h.endsWith('framehdr.com/') || h.endsWith('framehdr.com/index.php'); }, run: function() { window.setTimeout(async function(){ const preload = unsafeWindow._ckPreload; if (!preload) { message.show(NEED_LOGIN, 'error'); return; } const hasCheckedToday = preload.has_checked_today; const points = preload.points || 0; const totalDays = preload.total_days || 0; const continuousDays = preload.continuous_days || 0; if (hasCheckedToday) { message.show(`今日已签到,📊 当前积分: ${points},累计签到: ${totalDays} 天,连续签到: ${continuousDays} 天`); return; } let csrfToken = preload.csrf_token || unsafeWindow._ckCsrfToken || ''; try { if (!csrfToken) { const now = new Date(); const year = now.getFullYear(); const month = now.getMonth() + 1; const initData = await gmRequest({ method: 'GET', url: `https://framehdr.com/api/checkin.php?action=init&year=${year}&month=${month}` }); csrfToken = initData.data.csrf_token; } const formData = new URLSearchParams(); formData.append('csrf_token', csrfToken); const checkInData = await gmRequest({ method: 'POST', url: 'https://framehdr.com/api/checkin.php?action=checkin', data: formData, responseType: 'json' }); if (checkInData.code === 0 && checkInData.success) { message.show('🎉 签到成功!'); } else { message.show(`⚠️ ${checkInData.message}`, 'error'); } } catch (err){ message.show(`⚠️ 签到失败:${err.message}`, 'error'); } }, 1000); } }, // 鲲Galgame { name: "鲲Galgame", test: function(h){ return h.indexOf("kungal") !== -1; }, run: function(){ window.setTimeout(async () => { try { await gmRequest({ method: 'GET', url: `https://www.kungal.com/api/auth/me` }); await gmRequest({ method: 'POST', url: `https://www.kungal.com/api/user/check-in`, }); message.show('🎉 签到成功!'); } catch (err) { message.show(`⚠️ ${err.responseData?.message || err.message}`, 'error'); } }, 2000); }}, // Acfun { name: "Acfun", test: function(h){ return h.indexOf("acfun.cn") !== -1 && h.indexOf("acfun.cn/login") === -1 && h.indexOf("acfun.cn/reg"); }, run: function(){ window.setTimeout(async () => { try { await gmRequest({ method: 'GET', url: `https://www.acfun.cn/rest/pc-direct/user/personalBasicInfo`, }); const data = await gmRequest({ method: 'GET', url: 'https://www.acfun.cn/rest/pc-direct/user/signIn', }); message.show(`🎉 ${data.msg}`); } catch (err) { message.show(`⚠️ ${err.responseData?.message || err.message}`, 'error'); } }, 2000); } }, // HDSay高清乐园 { name: "HDSay.net", test: function(h){ return h.indexOf("hdsay.net") !== -1 }, run: function() { window.setTimeout(async () => { try { const userId = unsafeWindow.abp?.session?.userId; if (!userId) { message.show(NEED_LOGIN, 'error'); return; } const signPage = await gmRequest({ method: 'GET', url: `https://www.hdsay.net/member/sign` }); const checked = HDSayModule.parseSignStatus(signPage); if (checked) { message.show('⚠️ 今日已签到', 'error'); return; } const verificationToken = HDSayModule.getVerificationToken(signPage); if (!verificationToken) { message.show(`⚠️ 获取授权码失败,无法签到`, 'error'); return; } const moodWords = await gmRequest({ method: 'GET', url: `https://www.hdsay.net/api/services/app/PublicBasicDict/GetBasicDictItemsByCode?code=MoodWords&_=${new Date().getTime()}`, }); const moodWord = getRandom(moodWords.result); const preSign = await gmRequest({ method: 'GET', url: `https://www.hdsay.net/api/services/app/ForumMemberSign/GetNewWithUserId?userId=${userId}&_=${new Date().getTime()}` }); if (!preSign.success) { message.show(`⚠️ ${preSign.error?.message || preSign.error}`, 'error'); } const payload = Object.assign({}, preSign.result, { mood: HDSayModule.getRandomMood(), moodWords: moodWord.value, __RequestVerificationToken: verificationToken }); const signResult = await gmRequest({ method: 'POST', url: `https://www.hdsay.net/api/services/app/ForumMemberSign/Create`, headers: { 'Content-Type': 'application/json', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7', 'X-Requested-With': 'XMLHttpRequest', 'Origin': 'https://www.hdsay.net', 'Referer': 'https://www.hdsay.net/member/sign', 'X-Xsrf-Token': unsafeWindow.abp.security?.antiForgery?.getToken() }, data: JSON.stringify(payload) }); if (!signResult.success) { message.show(`⚠️ 签到失败:${signResult.error?.message || signResult.error}`, 'error'); return; } message.show(`🎉 签到成功:[${signResult.result.moodName}] ${signResult.result.moodWords}`); } catch (err) { message.show(`⚠️ ${err.responseData?.message || err.message}`, 'error'); } }, 2000); } } ]; var href = window.location.href; for (var i = 0; i < SITES.length; i++) { if (SITES[i].test(href)) { SITES[i].run(); return; } } })();