Collect authenticated Qinglong scripts batch

This commit is contained in:
Hermes Agent
2026-05-24 03:53:42 +00:00
parent 0d80b33d25
commit 28d62fef03
86 changed files with 18420 additions and 5 deletions

View File

@@ -0,0 +1,26 @@
# Source: https://github.com/back-101/zyqinglong/blob/main/AiPm.py
# Raw: https://raw.githubusercontent.com/back-101/zyqinglong/main/AiPm.py
# Repo: back-101/zyqinglong
# Path: AiPm.py
# UploadedAt: 2026-03-13T04:15:05Z
# SHA256: 125ff6e463e1279559086f8786cc3a4987223ac41d2923be61bb587ea8e17e5f
# Category: APP版/抓包
# Evidence: cookie/token/authorization/header
# -*- coding=UTF-8 -*-
# @Project QL_TimingScript
# @fileName AiPm.py
# @author Leon
# @EditTime 2026/3/12
# const $ = new Env('AIPM中转站');
# cron: 0 0 12 * * *
from checkin_core import run_checkin
if __name__ == "__main__":
run_checkin(
env_name="aipm_cookies",
base_url="https://emtf.aipm9527.online",
origin="https://emtf.aipm9527.online",
referer="https://emtf.aipm9527.online/console/personal",
notify_title="AIPM",
)

View File

@@ -0,0 +1,26 @@
# Source: https://github.com/back-101/zyqinglong/blob/main/DGB.py
# Raw: https://raw.githubusercontent.com/back-101/zyqinglong/main/DGB.py
# Repo: back-101/zyqinglong
# Path: DGB.py
# UploadedAt: 2026-04-01T04:49:35Z
# SHA256: 088295b00248471126407a7c10abdee790c1800cca0349f240ef4847bb36a7e8
# Category: APP版/抓包
# Evidence: cookie/token/authorization/header
# -*- coding=UTF-8 -*-
# @Project QL_TimingScript
# @fileName AiPm.py
# @author Leon
# @EditTime 2026/3/12
# const $ = new Env('DGB中转站');
# cron: 0 0 12 * * *
from checkin_core import run_checkin
if __name__ == "__main__":
run_checkin(
env_name="dgb_cookies",
base_url="https://freeapi.dgbmc.top",
origin="https://freeapi.dgbmc.top",
referer="https://freeapi.dgbmc.top/console/personal",
notify_title="DGB",
)

View File

@@ -0,0 +1,246 @@
# Source: https://github.com/CN-Grace/QinglongScripts/blob/main/HelloGithub.py
# Raw: https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/HelloGithub.py
# Repo: CN-Grace/QinglongScripts
# Path: HelloGithub.py
# UploadedAt: 2026-05-23T15:48:24Z
# SHA256: 041c84250a0164d2dd96a531bc3bb7a90a4a49ee508c39952a74641b319915f2
# Category: APP版/抓包
# Evidence: cookie/token/authorization/header
#!/usr/bin/env python3
"""
cron: 0 8 1 * *
new Env("HelloGitHub月刊")
HelloGitHub 月刊更新提醒
每月运行一次,检查并发送最新月刊内容。
支持分多条消息发送完整内容,基于字符长度分段。
"""
import json
import os
import re
import time
import requests
from datetime import datetime
from pathlib import Path
from typing import Dict, List, Optional, Tuple
from utils import log_info, log_success, log_warning, log_error, beijing_time_str
from notifier import send as notify_send
# ==================== 用户配置 ====================
STATE_FILE = Path.home() / ".hellogithub_bot_state.json"
PERIODICAL_API = "https://abroad.hellogithub.com/v1/periodical/"
PERIODICAL_PAGE_URL = "https://hellogithub.com/periodical"
MAX_MESSAGE_LENGTH = 3900
def load_last_sent_volume() -> int:
try:
if STATE_FILE.exists():
with open(STATE_FILE, "r", encoding="utf-8") as f:
return json.load(f).get("last_sent_volume", 0)
return 0
except Exception as e:
log_error(f"读取状态文件失败: {e}")
return 0
def save_last_sent_volume(volume_num: int) -> None:
try:
state = {"last_sent_volume": volume_num, "updated_at": datetime.now().isoformat(), "last_run": beijing_time_str()}
with open(STATE_FILE, "w", encoding="utf-8") as f:
json.dump(state, f, ensure_ascii=False, indent=2)
log_success(f"已更新状态文件,最新期数: {volume_num}")
except Exception as e:
log_error(f"保存状态文件失败: {e}")
def get_latest_volume_info() -> Tuple[Optional[int], Optional[str]]:
try:
resp = requests.get(PERIODICAL_API, timeout=10)
resp.raise_for_status()
data = resp.json()
if data.get("success"):
latest = data["volumes"][0]
return latest["num"], latest["lastmod"]
log_error("API 返回 success 为 false")
return None, None
except Exception as e:
log_error(f"请求期数 API 失败: {e}")
return None, None
def extract_build_id() -> Optional[str]:
try:
resp = requests.get(PERIODICAL_PAGE_URL, timeout=10)
resp.raise_for_status()
match = re.search(r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>', resp.text, re.DOTALL)
if match:
next_data = json.loads(match.group(1))
build_id = next_data.get("buildId")
if build_id:
log_info(f"成功获取 buildId: {build_id}")
return build_id
log_error("未找到 buildId")
return None
except Exception as e:
log_error(f"提取 buildId 失败: {e}")
return None
def get_volume_content(volume_num: int, build_id: str) -> Optional[Dict]:
content_api = f"https://hellogithub.com/_next/data/{build_id}/zh/periodical/volume/{volume_num}.json"
try:
data = requests.get(content_api, timeout=10).json()
page_props = data.get("pageProps", {})
volume_data = page_props.get("volumeData") or page_props.get("volume", {})
if not volume_data:
return None
title = volume_data.get("title", f"HelloGitHub 第 {volume_num}")
desc = volume_data.get("desc", "")
categories_data = []
for category_item in volume_data.get("data", []):
formatted_items = []
for item in category_item.get("items", []):
formatted_items.append({
"full_name": item.get("full_name", "未知项目"),
"description": item.get("description", "暂无描述"),
"github_url": item.get("github_url", ""),
"stars": item.get("stars", 0),
"forks": item.get("forks", 0),
"watch": item.get("watch", 0),
"language": item.get("lang", ""),
"homepage": item.get("homepage", ""),
})
if formatted_items:
categories_data.append({"category_name": category_item.get("category_name", "未分类"), "items": formatted_items})
return {"title": title, "description": desc, "categories": categories_data, "total_items": sum(len(c["items"]) for c in categories_data), "volume_num": volume_num}
except Exception as e:
log_error(f"请求内容 API 失败: {e}")
return None
def format_project_info(project: Dict, project_num: int, total_projects: int) -> str:
name = project["full_name"]
desc = project["description"]
stars, forks, watch = project["stars"], project["forks"], project["watch"]
lang = project["language"]
github_url = project["github_url"]
lines = [f" {project_num}/{total_projects}. 【{name}"]
if lang:
lines.append(f" 语言: {lang}")
lines.append(f" 描述: {desc}")
stats = []
if stars > 0: stats.append(f"{stars}")
if forks > 0: stats.append(f"🔀 {forks}")
if watch > 0: stats.append(f"👀 {watch}")
if stats:
lines.append(f" 数据: {' | '.join(stats)}")
if github_url:
lines.append(f" 链接: {github_url}")
lines.append("")
return "\n".join(lines)
def format_category_header(category: Dict, category_num: int, total_categories: int) -> str:
category_name = category["category_name"]
items = category["items"]
return f"\n{'' * 40}\n\n🎯 {category_num}/{total_categories}. {category_name} ({len(items)} 个项目)\n\n"
def create_report_pages(content: Dict) -> List[str]:
if not content:
return []
title = content["title"]
desc = content["description"]
categories = content.get("categories", [])
total_items = content.get("total_items", 0)
volume_num = content.get("volume_num", 0)
total_categories = len(categories)
latest_num, lastmod = get_latest_volume_info()
pub_date = lastmod[:10] if lastmod else beijing_time_str("%Y-%m-%d")
# 标题页
header = f"🚀 {title}\n\n"
if desc:
header += f"📝 {desc}\n\n"
header += f"📅 发布时间: {pub_date}\n🔢 期号: 第 {volume_num}\n📚 项目总数: {total_items}\n🏷️ 分类数量: {total_categories}\n\n{'' * 40}\n"
pages = [header]
all_parts = []
cat_num = 1
for cat in categories:
all_parts.append(format_category_header(cat, cat_num, total_categories))
for i, item in enumerate(cat["items"]):
proj_num = sum(len(c["items"]) for c in categories[:cat_num - 1]) + i + 1
all_parts.append(format_project_info(item, proj_num, total_items))
cat_num += 1
current = ""
for part in all_parts:
if len(current) + len(part) <= MAX_MESSAGE_LENGTH:
current += part
else:
if current:
pages.append(f"📋 第 {volume_num} 期 - 项目详情\n\n{current}")
current = part
if len(part) > MAX_MESSAGE_LENGTH:
pages.append(part)
current = ""
if current:
pages.append(f"📋 第 {volume_num} 期 - 项目详情\n\n{current}")
read_more = f"https://hellogithub.com/zh/periodical/volume/{volume_num}/"
footer = f"\n{'' * 40}\n\n🎉 {title} 完整内容已发送完毕!\n\n📊 本期共 {total_items} 个项目,{total_categories} 个分类\n🔗 在线阅读: {read_more}\n🌟 GitHub: https://github.com/521xueweihan/HelloGitHub"
pages.append(footer)
return pages
def main():
log_info("===== HelloGitHub 月刊检查开始 =====")
last_sent = load_last_sent_volume()
log_info(f"上次发送的期数: {last_sent}")
latest_num, lastmod = get_latest_volume_info()
if not latest_num:
log_error("无法获取最新期数信息,任务终止")
return
log_info(f"最新期数: {latest_num}, 更新时间: {lastmod}")
if latest_num <= last_sent:
log_info(f"没有新刊发布 (最新: {latest_num}, 已发送: {last_sent})")
return
log_info(f"发现新刊! 第 {latest_num}")
build_id = extract_build_id()
if not build_id:
log_error("无法获取 buildId任务终止")
return
content = get_volume_content(latest_num, build_id)
if not content:
log_error(f"无法获取第 {latest_num} 期内容")
return
log_success(f"成功获取第 {latest_num} 期内容,包含 {content.get('total_items', 0)} 个项目")
pages = create_report_pages(content)
log_info(f"共生成 {len(pages)} 条消息")
for i, page_text in enumerate(pages, 1):
log_info(f"正在发送第 {i}/{len(pages)} 条消息 ({len(page_text)} 字符)...")
notify_send(f"HelloGitHub 第 {latest_num} 期 ({i}/{len(pages)})", page_text)
if i < len(pages):
time.sleep(2)
save_last_sent_volume(latest_num)
log_info("===== 任务完成 =====")
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,37 @@
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/Qoo.js
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/Qoo.js
// # Repo: Wenmoux/checkbox
// # Path: scripts/Qoo.js
// # UploadedAt: 2021-10-10T06:20:09Z
// # SHA256: d538c7cb1f22866224e5a1db8be4d8450e58f12b1a583c705a319ea2e59bef4a
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
//Qoo app 个人中心转蛋 没啥用
const axios = require("axios");
function task() {
return new Promise(async (resolve) => {
try {
let token = config.Qoo.token;
await axios.post(`https://api.qoo-app.com/v9/usercard/setcardshare?token=${token}`)
let url = `https://api.qoo-app.com/v9/usercard/signincard?token=${token}`;
let res = await axios.post(url);
if (res.data.code == 200) {
msg = `签到成功✅ 当前共${res.data.data.point}转蛋券`;
if(res.data.data.ret==1) console.log(`签到成功!今日获得${res.data.data.add}`)
} else {
msg = JSON.stringify(res.data);
}
console.log(msg);
} catch (err) {
msg = "签到接口请求出错";
console.log(err);
}
resolve("【Qoo】"+msg );
});
}
module.exports = task;

View File

@@ -0,0 +1,167 @@
# Source: https://github.com/CN-Grace/QinglongScripts/blob/main/SSL.py
# Raw: https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/SSL.py
# Repo: CN-Grace/QinglongScripts
# Path: SSL.py
# UploadedAt: 2026-05-23T16:04:54Z
# SHA256: c1f33bef544c897a6d3ea4c28fde98c6ee9729002ec45451f6197a1348d24589
# Category: APP版/抓包
# Evidence: cookie/token/authorization/header
#!/usr/bin/env python3
"""
cron: 0 0 * * *
new Env("SSL证书检查")
SSL 证书检查脚本
- 批量检查多个域名的 SSL 证书状态
- 获取证书到期时间、剩余天数、颁发者等信息
- 分类显示正常、警告、过期和检查失败的证书
"""
import os
import ssl
import socket
from datetime import datetime, timezone
from typing import List, Dict
from utils import log_info, log_success, log_warning, log_error, beijing_now, beijing_time_str
from notifier import send as notify_send
# ==================== 用户配置 ====================
DOMAINS_TO_CHECK = [d.strip() for d in os.environ.get("SSL_DOMAINS", "").split(",") if d.strip()]
WARNING_THRESHOLD = 30
CONNECTION_TIMEOUT = 10
def get_certificate_info(domain: str) -> Dict:
"""获取单个域名的 SSL 证书信息"""
result = {"domain": domain, "expiry_date": datetime.min, "days_left": -1, "issuer": "", "is_valid": False, "error": None}
try:
hostname = domain if ":" in domain else f"{domain}:443"
host, port = hostname.split(":")
port = int(port)
context = ssl.create_default_context()
with socket.create_connection((host, port), timeout=CONNECTION_TIMEOUT) as sock:
with context.wrap_socket(sock, server_hostname=host) as ssock:
cert = ssock.getpeercert()
expiry_str = cert["notAfter"]
expiry_date = datetime.strptime(expiry_str, "%b %d %H:%M:%S %Y %Z").replace(tzinfo=timezone.utc)
now = datetime.now(timezone.utc)
days_left = (expiry_date - now).days
issuer_dict = dict(x[0] for x in cert["issuer"])
issuer = issuer_dict.get("organizationName", "Unknown")
result.update({"expiry_date": expiry_date, "days_left": days_left, "issuer": issuer, "is_valid": days_left > 0})
log_info(f"{domain} 证书剩余 {days_left}")
except Exception as e:
result["error"] = str(e)
log_error(f"{domain} 检查失败: {e}")
return result
def check_all_domains(domains: List[str]) -> List[Dict]:
"""检查所有域名的 SSL 证书"""
results = []
log_info(f"开始检查 {len(domains)} 个域名的 SSL 证书...")
for domain in domains:
log_info(f"正在检查: {domain}")
cert_info = get_certificate_info(domain)
results.append(cert_info)
if cert_info["is_valid"]:
if cert_info["days_left"] <= WARNING_THRESHOLD:
log_warning(f" ⚠️ {domain} 将在 {cert_info['days_left']} 天后过期")
else:
log_success(f"{domain} 证书正常,剩余 {cert_info['days_left']}")
elif cert_info["error"]:
log_error(f" 🔧 {domain} 检查失败: {cert_info['error']}")
else:
log_error(f"{domain} 证书已过期")
return results
def categorize_certificates(certificates: List[Dict]) -> Dict[str, List[Dict]]:
"""将证书结果分类"""
warning_certs, expired_certs, valid_certs, error_certs = [], [], [], []
for cert in certificates:
if cert["error"] is not None:
error_certs.append(cert)
elif cert["is_valid"]:
if 0 < cert["days_left"] <= WARNING_THRESHOLD:
warning_certs.append(cert)
elif cert["days_left"] > WARNING_THRESHOLD:
valid_certs.append(cert)
else:
expired_certs.append(cert)
return {"warning": warning_certs, "expired": expired_certs, "valid": valid_certs, "error": error_certs}
def format_certificate_report(certificates: List[Dict]) -> str:
"""格式化证书检查报告"""
cats = categorize_certificates(certificates)
lines = [f"🔔 SSL 证书检查报告", "", f"⏰ 检查时间: {beijing_time_str()}", f"📊 总计: {len(certificates)} 个域名", ""]
if cats["expired"]:
lines.append("❌ 已过期的证书:")
for cert in cats["expired"]:
expiry = cert["expiry_date"].strftime("%Y-%m-%d") if cert["expiry_date"] != datetime.min else "未知"
lines.append(f" {cert['domain']} — 已过期 {abs(cert['days_left'])} 天 (到期: {expiry})")
lines.append("")
if cats["warning"]:
lines.append("⚠️ 即将过期的证书 (30天内):")
for cert in cats["warning"]:
expiry = cert["expiry_date"].strftime("%Y-%m-%d")
lines.append(f" {cert['domain']} — 剩余 {cert['days_left']} 天 (到期: {expiry} | 颁发: {cert['issuer']})")
lines.append("")
if cats["valid"]:
lines.append("✅ 证书状态正常:")
for cert in cats["valid"]:
lines.append(f" {cert['domain']} — 剩余 {cert['days_left']}")
lines.append("")
if cats["error"]:
lines.append("🔧 检查失败的域名:")
for cert in cats["error"]:
lines.append(f" {cert['domain']} — 错误: {cert['error']}")
lines.append("")
lines.append("📈 统计信息:")
lines.append(f" ✅ 正常: {len(cats['valid'])}")
lines.append(f" ⚠️ 警告: {len(cats['warning'])}")
lines.append(f" ❌ 过期: {len(cats['expired'])}")
lines.append(f" 🔧 失败: {len(cats['error'])}")
lines.append("")
lines.append("" * 18)
lines.append(f"🕒 执行时间: {beijing_time_str()}")
return "\n".join(lines)
def main():
log_info("=" * 50)
log_info("SSL 证书检查脚本开始执行")
log_info("=" * 50)
cert_results = check_all_domains(DOMAINS_TO_CHECK)
report = format_certificate_report(cert_results)
notify_send("SSL 证书检查报告", report)
cats = categorize_certificates(cert_results)
print(f"\n{'=' * 60}")
print(f"SSL 证书检查完成! 检查域名总数: {len(cert_results)}")
print(f"正常: {len(cats['valid'])} | 警告: {len(cats['warning'])} | 过期: {len(cats['expired'])} | 失败: {len(cats['error'])}")
print("=" * 60)
if cats["expired"] or cats["warning"]:
print("\n⚠️ 需要注意的域名:")
for cert in cats["expired"]:
print(f"{cert['domain']} — 已过期")
for cert in cats["warning"]:
print(f" ⚠️ {cert['domain']} — 剩余 {cert['days_left']} 天到期")
log_info("=" * 50)
log_info(f"脚本执行结束")
log_info("=" * 50)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,26 @@
# Source: https://github.com/back-101/zyqinglong/blob/main/Z-API.py
# Raw: https://raw.githubusercontent.com/back-101/zyqinglong/main/Z-API.py
# Repo: back-101/zyqinglong
# Path: Z-API.py
# UploadedAt: 2026-03-13T04:15:05Z
# SHA256: 2978ef593177e01cc1909a0a71d714a837f3b049687027380de321bfe641634b
# Category: APP版/抓包
# Evidence: cookie/token/authorization/header
# -*- coding=UTF-8 -*-
# @Project QL_TimingScript
# @fileName Z-API.py
# @author Leon
# @EditTime 2026/3/12
# const $ = new Env('Z-API中转站');
# cron: 0 0 12 * * *
from checkin_core import run_checkin
if __name__ == "__main__":
run_checkin(
env_name="zapi_cookies",
base_url="https://zapi.aicc0.com",
origin="https://zapi.aicc0.com",
referer="https://zapi.aicc0.com/console/personal",
notify_title="Z-API",
)

View File

@@ -0,0 +1,261 @@
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/aw.js
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/aw.js
// # Repo: Wenmoux/checkbox
// # Path: scripts/aw.js
// # UploadedAt: 2025-12-09T08:05:01Z
// # SHA256: e1df85787b7fee88ca6371dad4e14db2a71e331346b733c8bd50a4f762080297
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
// 爱吾游戏宝盒全能自动脚本 v4.0 - 兼容依赖版本
// 配置文件字段config.aiwu.*
const axios = require('axios');
const crypto = require('crypto');
// querystring 是 Node.js 内置模块,无需 require
// =====================================================================
// 1. 配置和常量定义
// =====================================================================
const USER_CONFIG = {
VersionCode: config.aiwu.VersionCode || "2050902",
Serial: config.aiwu.Serial || "", // 设备序列号
Phone: config.aiwu.Phone || "",
PhoneCP: config.aiwu.PhoneCP || "",
Channel: config.aiwu.Channel || "25az",
VIPSign: config.aiwu.VIPSign || "",
AppPackageName: config.aiwu.AppPackageName || "com.aiwu.market",
oaid: config.aiwu.oaid || "",
android_id: config.aiwu.android_id || "",
isLogin: config.aiwu.isLogin || "1",
UserId: config.aiwu.UserId || "" // 用户ID
};
const BASE_URL = "https://service.25game.com/v2";
const API = {
TASK: "/User/MyTask.aspx", // 日常任务 & 领奖
BBS: "/BBS/BBSPost.aspx" // 论坛签到
};
const HEADERS = {
'Accept-Language': 'zh-CN,zh;q=0.8',
'User-Agent': 'okhttp-okgo/jeasonlzy',
'Content-Type': 'application/x-www-form-urlencoded',
'Host': 'service.25game.com',
'Connection': 'Keep-Alive',
'Accept-Encoding': 'gzip'
};
// =====================================================================
// 2. 工具函数
// =====================================================================
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// 部分反转字符串
function partialReverse(str) {
let arr = str.split('');
for (let i = 0; i < 16; i += 2) {
let j = 31 - i;
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
return arr.join('');
}
// 生成签名
function generateSignature(params, timestamp) {
const finalParams = { ...params, Time: timestamp };
const sortedKeys = Object.keys(finalParams).sort();
let javaString = "";
sortedKeys.forEach(key => {
let val = finalParams[key];
if (val === undefined || val === null) val = "";
javaString += `${key}=${val}&`;
});
const salt = "Wlb=wlbnb&Key=AppKey";
const remainder = parseInt(timestamp, 10) % 8;
const rawString = `${javaString}${salt}${timestamp}${remainder}`;
const md5Step1 = crypto.createHash('md5').update(rawString).digest('hex');
const reversedStr = partialReverse(md5Step1);
return crypto.createHash('md5').update(reversedStr).digest('hex');
}
// 构建查询字符串
function buildQueryString(data) {
return Object.keys(data)
.map(key => `${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`)
.join('&');
}
// =====================================================================
// 3. 网络请求封装
// =====================================================================
async function sendRequest(apiPath, businessParams = {}) {
const timestamp = Math.floor(Date.now() / 1000).toString();
const requestParams = { ...USER_CONFIG, ...businessParams };
const sign = generateSignature(requestParams, timestamp);
const bodyData = {
...requestParams,
Time: timestamp,
Sign: sign
};
try {
const response = await axios.post(BASE_URL + apiPath, buildQueryString(bodyData), {
headers: HEADERS
});
return response.data;
} catch (error) {
console.error(`[请求异常] ${apiPath}: ${error.message}`);
return null;
}
}
// =====================================================================
// 4. 业务逻辑函数
// =====================================================================
async function runDailyTasks() {
const logs = ["执行日常活跃任务"];
const tasks = [
{ name: "每日签到", act: "DailyLogin" },
{ name: "云游戏打卡", act: "DailyCloudGame" },
{ name: "每日搜索", act: "DailySearchGame" },
{ name: "每日分享", act: "DailyShare" },
{ name: "每日下载", act: "DailyDown" },
];
for (const t of tasks) {
const res = await sendRequest(API.TASK, { Act: t.act });
logs.push(`${t.name}: ${res?.Message || (res ? "完成" : "失败")}`);
await sleep(1200);
}
// 广告需要看2次
for (let i = 1; i <= 2; i++) {
const res = await sendRequest(API.TASK, { Act: 'DailyLookAd' });
logs.push(`观看广告第${i}次: ${res?.Message || "完成"}`);
await sleep(2000);
}
return logs;
}
async function runBbsSign() {
const logs = ["执行论坛版块签到"];
const sessionIds = [5, 6, 12, 13]; // 常见版块ID
for (const id of sessionIds) {
const res = await sendRequest(API.BBS, {
Act: "SignSession",
SessionId: id
});
if (res?.Code === "0") {
logs.push(`签到版块[ID:${id}]: ${res.Message}`);
} else {
logs.push(`签到版块[ID:${id}]: ${res?.Message || "失败"}`);
}
await sleep(1500);
}
return logs;
}
async function runClaimRewards() {
const logs = ["检查并领取奖励"];
const res = await sendRequest(API.TASK, {});
if (!res || !res.Data) {
logs.push("获取任务列表失败");
return logs;
}
let claimCount = 0;
for (const task of res.Data) {
const name = task.TaskNum;
if (name == "每日登录") continue;
const cur = parseInt(task.CompleteNum);
const total = parseInt(task.TotalNum);
const isReceived = (task.isReward === "True");
const taskNo = task.TaskNo;
if (cur >= total && !isReceived && taskNo) {
const claim = await sendRequest(API.TASK, {
TaskNo: taskNo,
Act: 'ReceiveAward'
});
if (claim?.Code === "0") {
logs.push(`领取[${name}]: 成功 金币+${claim.RewardGold}, 经验+${claim.RewardExp}`);
claimCount++;
} else {
logs.push(`领取[${name}]: 失败 ${claim?.Message}`);
}
await sleep(1000);
}
}
if (claimCount === 0) logs.push("没有可领取的奖励");
return logs;
}
// =====================================================================
// 5. 主函数 - 适配checkbox.js模板
// =====================================================================
async function main() {
let result = "【爱吾游戏宝盒】:";
const allLogs = [];
try {
// 验证必要配置
if (!USER_CONFIG.UserId || !USER_CONFIG.Serial) {
return result + "请先配置UserId和Serial参数";
}
// 执行日常任务
const dailyLogs = await runDailyTasks();
allLogs.push(...dailyLogs);
// 执行论坛签到
const bbsLogs = await runBbsSign();
allLogs.push(...bbsLogs);
// 领取奖励
const rewardLogs = await runClaimRewards();
allLogs.push(...rewardLogs);
// 汇总结果
const successCount = allLogs.filter(log =>
log.includes("成功") ||
log.includes("完成") ||
log.includes("金币+")
).length;
result += `任务执行完成,成功项: ${successCount}/${allLogs.length -3}`;
// 将详细日志作为第二行(如果需要)
const detailLogs = allLogs.map(log => ` ${log}`).join('\n');
if (detailLogs) {
result += `\n详细:\n${detailLogs}`;
}
} catch (error) {
console.error("脚本执行出错:", error);
result += "脚本执行异常: " + error.message;
}
return result;
}
// =====================================================================
// 6. 导出模块
// =====================================================================
module.exports = main;

View File

@@ -0,0 +1,90 @@
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/hscy.js
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/hscy.js
// # Repo: Wenmoux/checkbox
// # Path: scripts/hscy.js
// # UploadedAt: 2023-04-01T13:17:21Z
// # SHA256: de58e1b4fb5c45c288f630776a7b58c5712594cc73b6e9a86b3124759fdcb146
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
const axios = require("axios")
const headers = {
Authorization: config.hscy.authorization,
Cookie: `b2_token=${config.hscy.authorization.slice(7)}`
};
let result = "【黑丝次元】:";
let nickname = "";
let nowCredit = 0;
function getUserInfo() {
return new Promise(async (resolve) => {
try {
const url = `https://heisi.moe/wp-json/b2/v1/getUserInfo`;
let res = await axios.post(url, "", {headers});
nickname = res.data.user_data.name;
nowCredit = res.data.user_data.credit;
result += `\n[${nickname}]当前积分:${nowCredit}`;
} catch (err) {
console.log(err)
result += "\n获取用户信息失败 ";
console.log(result);
}
resolve();
});
}
function sign() {
return new Promise(async (resolve) => {
try {
const url = `https://heisi.moe/wp-json/b2/v1/userMission`;
let res = await axios.post(url, "", {headers});
let credit = res.data.credit ? res.data.credit : res.data
console.log(`签到成功,获得:` + credit + "分");
result += ` || 签到成功,获得:` + credit + "分";
} catch (err) {
console.log(err)
result += " || 签到失败,已签到过或其它未知原因!! ";
console.log(result);
}
resolve();
});
}
function submitComment() {
return new Promise(async (resolve) => {
try {
const url = `https://heisi.moe/wp-json/b2/v1/commentSubmit`;
// 0-2500随机评论
let data = `comment_post_ID=${Math.round(Math.random() * (2500 - 0) + 0)}&author=${encodeURI(nickname)}&comment=%E5%A5%BD%E7%9C%8B&comment_parent=0&img%5BimgUrl%5D=&img%5BimgId%5D=`
let res = await axios.post(url, data, {headers});
console.log(`[${nickname}]评论成功`);
result += ` || [${nickname}]评论成功`;
} catch (err) {
console.log(err)
result += " || 评论失败,已评论过或其它未知原因!! ";
console.log(result);
}
resolve();
});
}
function sleep(time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
async function hscy() {
await getUserInfo();
await sleep(1000);
await sign();
await sleep(1000);
for (let i = 0; i < 5; i++) {
await submitComment();
await sleep(61000); // 延迟,否则太快评论不上
}
await getUserInfo();
return result;
}
module.exports = hscy;

View File

@@ -0,0 +1,38 @@
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/ldygo.js
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/ldygo.js
// # Repo: Wenmoux/checkbox
// # Path: scripts/ldygo.js
// # UploadedAt: 2021-04-16T00:43:18Z
// # SHA256: 1c2bfc752df7a9d5a50a1d06e382a940c6fea22656b67da275952fe8e61aed6a
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
//联动云租车每日签到https://m.ldygo.com/app/extension/phoneVoucher.html?inviteCode=JW0hcdmJ
const axios = require("axios");
function ldygo() {
return new Promise(async (resolve) => {
try {
let url =
"https://m.ldygo.com/los/zuche-intf-union.signIn";
const header = {
headers: {
cookie: config.ldygo.cookie,
},
};
const postdata = {"_channel_id":"09","_client_version_no":"2.11.0","timestamp":Math.round(new Date().getTime()/1000).toString()}
let res = await axios.post(url, postdata,header);
if (res.data.responseCode == "000000") {
data = `签到成功! ☁️ + ${res.data.model.points}`;
} else {
data = res.data.responseMsg;
}
console.log(data);
} catch (err) {
console.log(err);
data="签到接口请求出错"
}
resolve("【联动云租车】:" + data);
});
}
module.exports = ldygo;

View File

@@ -0,0 +1,33 @@
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/lkong.js
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/lkong.js
// # Repo: Wenmoux/checkbox
// # Path: scripts/lkong.js
// # UploadedAt: 2021-04-16T00:43:18Z
// # SHA256: 31125817fbd89450962eccb39bdd21d8768afc609a6b7b50c59ae078e842da40
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
const axios = require("axios");
function task() {
return new Promise(async (resolve) => {
try {
let cookie = config.lkong.cookie;
let url = "http://lkong.cn/index.php?mod=ajax&action=punch";
let res = await axios.get(url, { headers: { cookie: cookie } });
if (res.data.punchday) {
msg = `签到成功✅已连签${res.data.punchday}`;
} else {
msg = res.data.error;
}
console.log(msg);
} catch (err) {
msg = "签到接口请求出错";
console.log(err);
}
resolve("【龙空论坛】:" + msg);
});
}
//task()
module.exports = task;

View File

@@ -0,0 +1,74 @@
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/nga.js
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/nga.js
// # Repo: Wenmoux/checkbox
// # Path: scripts/nga.js
// # UploadedAt: 2022-12-29T07:44:16Z
// # SHA256: a31a39d2686a445bba1c94e9887a51f92854932d575a45c27bf8c7ab35850ea9
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
const axios = require("axios");
function ngaGet(lib, act, output = 11, other = null) {
return new Promise(async (resolve) => {
try {
let nga = config.nga;
let url = "https://ngabbs.com/nuke.php";
let res = await axios.post(
url,
`access_uid=${nga.uid}&access_token=${
nga.accesstoken
}& app_id=1010&__act=${act}&__lib=${lib}&__output=${output}&${other}`, {
headers: {
"User-Agent": nga.UA ? nga.UA : "xxxxxx Nga_Official/90409"
}
}
);
console.log(" " + (res.data && res.data.time || res.data.code))
resolve(res.data)
} catch (err) {
console.log(err);
resolve({
error: ["签到接口请求出错"]
})
}
resolve();
});
}
async function task() {
msg = "【NGA】\n"
//签到
let res1 = await ngaGet("check_in", "check_in")
if (res1 && res1.data) {
msg += " 签到:" + res1.data[0];
} else {
console.log(res1);
msg += " 签到:" + (res1.error && res1.error[0]);
}
if (!msg.match(/登录|CLIENT/)) {
await ngaGet("mission", "checkin_count_add", 11, "mid=2&get_success_repeat=1&no_compatible_fix=1")
await ngaGet("mission", "checkin_count_add", 11, "mid=131&get_success_repeat=1&no_compatible_fix=1")
await ngaGet("mission", "checkin_count_add", 11, "mid=30&get_success_repeat=1&no_compatible_fix=1")
console.log("看视频免广告")
await ngaGet("mission", "video_view_task_counter_add_v2_for_adfree_sp1")
for (c of new Array(4)) await ngaGet("mission", "video_view_task_counter_add_v2_for_adfree")
console.log("看视频得N币")
for (c of new Array(5)) await ngaGet("mission", "video_view_task_counter_add_v2")
//分享帖子
console.log("分享帖子 5")
tid = Math.ceil(Math.random() * 12346567) + 12345678
for (c of new Array(5)) await ngaGet("data_query", "topic_share_log_v2", 12, "event=4&tid=" + tid)
console.log("领取分享奖励 1N币")
await ngaGet("mission", "check_mission", 11, "mid=149&get_success_repeat=1&no_compatible_fix=1")
//查询
let {
data: [sign, money, y]
} = await ngaGet("check_in", "get_stat")
msg += ` 连签 ${sign.continued}天 累签 ${sign.sum}\n N币${money.money_n}\n 铜币:${money.money}\n 啊哈:${y[0]}`
}
return msg
}
module.exports = task;

View File

@@ -0,0 +1,42 @@
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/ssly.js
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/ssly.js
// # Repo: Wenmoux/checkbox
// # Path: scripts/ssly.js
// # UploadedAt: 2024-02-15T10:01:01Z
// # SHA256: c6789fe7074c540cd5425bfa4cc2b8b89942eda9f52d6fd931eefb9c42c4f19d
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
const axios = require("axios");
const CryptoJS = require("crypto-js");
//绅士领域 注册时候推荐码填2984317
uid = config.ssly.uid; //抓包看,比如签到的post包里就有u_id,如120487
function ssly() {
return new Promise(async (resolve) => {
try {
let url = `https://sslyapp.site/mz_pbl/app_con/add_sign.php`;
let timestamp = Math.floor((new Date()).getTime()/1000)+"";
timestamp = timestamp.replace(/^\s+|\s+$/g,"");
let mac = CryptoJS.MD5(CryptoJS.SHA1(CryptoJS.MD5(timestamp).toString()).toString()).toString();
let data = `time=${timestamp}&mac=${mac}&u_id=${uid}`;
let res = await axios.post(url, data);
if (res.data.state == 0) {
msg = res.data.erro;
} else if (res.data.state == 1) {
msg = res.data.sms;
} else {
console.log(res.data);
msg = "签到失败,原因未知";
}
console.log(msg);
} catch (err) {
console.log(err);
msg = "签到接口请求失败";
}
resolve("【绅士领域】:" + msg);
});
}
//ssly()
module.exports = ssly;

View File

@@ -0,0 +1,26 @@
# Source: https://github.com/back-101/zyqinglong/blob/main/FCAPI.py
# Raw: https://raw.githubusercontent.com/back-101/zyqinglong/main/FCAPI.py
# Repo: back-101/zyqinglong
# Path: FCAPI.py
# UploadedAt: 2026-03-16T04:42:35Z
# SHA256: 8f67b1f15f44591d48f12216dc4a28f781ba25b80af1c1cbc321af55f46c983f
# Category: APP版/抓包
# Evidence: cookie/token/authorization/header
# -*- coding=UTF-8 -*-
# @Project QL_TimingScript
# @fileName AiPm.py
# @author Leon
# @EditTime 2026/3/12
# const $ = new Env('发财网API中转站');
# cron: 0 0 12 * * *
from checkin_core import run_checkin
if __name__ == "__main__":
run_checkin(
env_name="fc_cookies",
base_url="https://ai.facai.cloudns.org",
origin="https://ai.facai.cloudns.org",
referer="https://ai.facai.cloudns.org/console/personal",
notify_title="发财网API",
)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,29 @@
// # Source: https://github.com/Wenmoux/checkbox/blob/master/scripts/fishc.js
// # Raw: https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/fishc.js
// # Repo: Wenmoux/checkbox
// # Path: scripts/fishc.js
// # UploadedAt: 2021-09-25T00:15:59Z
// # SHA256: 2fcb72b6b50e8095d2fbe70f2e3fc123bb687b34ac7d77f189d7bbd37f4a7a09
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
const rules = {
name: "【鱼C论坛】 ",
url: "https://fishc.com.cn/plugin.php?id=k_misign:sign", //用于获取formhash的链接
cookie: config.fishc.cookie,
formhash: 'formhash=(.+?)\\"', //formhash正则
verify: "您需要先登录才能继续本操作", //验证cookie状态
op: [{
name: "签到",
charset: "gbk",
method: "get", //签到请求方式 get/post
url: "https://fishc.com.cn/plugin.php?id=k_misign:sign&operation=qiandao&format=text&formhash=@formhash"
}]
};
async function fishc() {
const template = require("../Template");
return rules.name + await template(rules)
}
module.exports = fishc