您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
SparkAi 无感知自动签到
- // ==UserScript==
- // @name SparkAi 自动签到
- // @icon https://ai.sparkaigf.com/logo.png
- // @namespace https://github.com/NPC2000
- // @version 1.0.0
- // @description SparkAi 无感知自动签到
- // @author NPC
- // @match https://ai.sparkaigf.com/*
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- // 获取并解析 Authorization 令牌
- const secretToken = localStorage.getItem('SECRET_TOKEN');
- let token;
- if (secretToken) {
- try {
- const parsedToken = JSON.parse(secretToken); // 解析 JSON
- token = parsedToken.data; // 提取 data 字段中的令牌
- } catch (e) {
- console.error('无法解析 SECRET_TOKEN:', e);
- return;
- }
- } else {
- console.error('未找到 SECRET_TOKEN');
- return;
- }
- // 确保 token 存在
- if (!token) {
- console.error('未找到有效的 Authorization 令牌');
- return;
- }
- // 自动获取 X-Website-Domain 和 Fingerprint
- const xWebsiteDomain = document.querySelector('meta[name="x-website-domain"]')?.getAttribute('content') || 'ai.sparkaigf.com';
- // 生成一个随机的 Fingerprint(长度为10的随机数字)
- const randomFingerprint = Math.floor(Math.random() * 9000000000) + 1000000000;
- const fingerprint = document.querySelector('meta[name="fingerprint"]')?.getAttribute('content') || randomFingerprint.toString() ;
- // 获取用户信息
- const parsedToken = JSON.parse(atob(token.split('.')[1])); // 解码 JWT 获取用户信息
- const username = parsedToken.username; // 获取用户名
- // 获取当前日期
- const today = new Date().toISOString().split('T')[0]; // 格式化为 YYYY-MM-DD
- // 从 localStorage 检查此用户是否已经签到
- const lastSignInDate = localStorage.getItem(`lastSignIn_${username}`);
- if (lastSignInDate === today) {
- console.log(`用户 ${username} 今天已经签到,跳过签到`);
- return; // 如果用户今天已经签到,直接返回
- }
- // 定义签到的 URL 和请求体
- const signInUrl = 'https://ai.sparkaigf.com/api/signin/sign';
- const requestBody = JSON.stringify({}); // 请求体为空的 JSON 对象
- // 发送 POST 请求
- fetch(signInUrl, {
- method: 'POST',
- headers: {
- 'Authorization': `Bearer ${token}`, // 使用从 localStorage 中解析的 Authorization 令牌
- 'Content-Type': 'application/json',
- 'X-Website-Domain': xWebsiteDomain, // 自动获取的自定义头部字段
- 'Fingerprint': fingerprint, // 自动获取的自定义头部字段
- },
- body: requestBody
- })
- .then(response => response.json()) // 解析为 JSON
- .then(data => {
- console.log('签到请求已发送');
- console.log(data); // 打印返回的响应,以便检查是否成功
- // 检查签到是否成功
- if (data.code === 200 || data.message.includes('今日已签到')) {
- console.log(`用户 ${username} 签到成功`);
- // 签到成功后,记录签到日期
- localStorage.setItem(`lastSignIn_${username}`, today);
- } else {
- console.error('签到失败:', data.message);
- }
- })
- .catch((error) => {
- console.error('签到请求失败:', error);
- });
- })();