Continue seeded Qinglong script collection

This commit is contained in:
Hermes Agent
2026-05-24 05:33:05 +00:00
parent ca1a4275e4
commit b082da3fe1
392 changed files with 131619 additions and 7 deletions

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,216 @@
# Source: https://github.com/3ixi/CodeScripts/blob/main/SendNotify.py
# Raw: https://raw.githubusercontent.com/3ixi/CodeScripts/main/SendNotify.py
# Repo: 3ixi/CodeScripts
# Path: SendNotify.py
# UploadedAt: 2025-09-23T14:07:43+08:00
# SHA256: 81becf638236ec4140dce7f3bcbcc2c46c1108bf5b5dcea6bc2bde763482d06c
# Category: APP版/抓包
# Evidence: APP/Android/iOS/device关键词
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
通知模块 - 仅用于捕获脚本输出并转发给notify.py
创建日期2025-09-17
模块作者3iXi
项目主页https://github.com/3ixi/CloudScripts
使用方法访问青龙面板打开“配置文件”页面从44行开始找到自己想要使用的推送方式在双引号中填入对应的配置脚本运行结束后会自动发送通知。
"""
import os
import sys
from datetime import datetime
# ==================== notify.py 集成 ====================
NOTIFY_PATHS = ['./notify.py', '../notify.py']
HAS_NOTIFY = False
notify_send = None
for path in NOTIFY_PATHS:
if os.path.exists(path):
try:
sys.path.append(os.path.dirname(os.path.abspath(path)))
from notify import send as notify_send
HAS_NOTIFY = True
break
except ImportError:
continue
if not HAS_NOTIFY:
print("⚠️ 未找到青龙自带通知模块请确保notify.py文件存在于当前目录或上级目录中")
print(" 访问青龙面板打开“配置文件”页面从44行开始找到自己想要使用的推送方式在双引号中填入对应的配置")
# ==================== 输出捕获类 ====================
class OutputCapture:
def __init__(self):
self.content = []
self.original_stdout = sys.stdout
self.capture_enabled = False
def start_capture(self):
if not self.capture_enabled:
self.capture_enabled = True
sys.stdout = self._DualOutput(self.original_stdout, self)
def stop_capture(self):
if self.capture_enabled:
sys.stdout = self.original_stdout
self.capture_enabled = False
def add_content(self, content):
if content:
self.content.append(str(content))
def get_content(self):
return "\n".join(self.content)
def clear(self):
self.content.clear()
def __enter__(self):
self.start_capture()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.stop_capture()
class _DualOutput:
def __init__(self, original_stdout, capture_instance):
self.original_stdout = original_stdout
self.capture_instance = capture_instance
def write(self, text):
self.original_stdout.write(text)
if text.strip():
self.capture_instance.add_content(text.strip())
def flush(self):
self.original_stdout.flush()
def __getattr__(self, name):
return getattr(self.original_stdout, name)
_global_output_capture = OutputCapture()
def capture_output(title="脚本运行结果"):
def decorator(func):
def wrapper(*args, **kwargs):
global _global_output_capture
_global_output_capture.clear()
_global_output_capture.start_capture()
try:
result = func(*args, **kwargs)
return result
except Exception as e:
_global_output_capture.add_content(f"❌ 脚本运行错误: {e}")
raise
finally:
_global_output_capture.stop_capture()
captured_content = _global_output_capture.get_content()
if captured_content:
SendNotify(title, captured_content)
return wrapper
return decorator
def start_capture():
global _global_output_capture
_global_output_capture.clear()
_global_output_capture.start_capture()
def stop_capture_and_notify(title="脚本运行结果"):
global _global_output_capture
_global_output_capture.stop_capture()
captured_content = _global_output_capture.get_content()
if captured_content:
SendNotify(title, captured_content)
def add_to_capture(content):
global _global_output_capture
_global_output_capture.add_content(content)
class NotificationSender:
def __init__(self):
pass
def _truncate_title(self, content: str, max_length: int = 30) -> str:
if not content:
return "3iXi云函数脚本通知"
title = content.replace('\n', ' ').replace('\r', ' ').strip()
if len(title) > max_length:
title = title[:max_length] + "..."
return title or "3iXi云函数脚本通知"
def _get_current_time(self) -> str:
return datetime.now().strftime('%Y-%m-%d %H:%M:%S')
def send_notification(self, title: str = "", content: str = "") -> bool:
if not content:
print("⚠️ 通知内容为空,跳过推送")
return False
if not title:
title = self._truncate_title(content)
timestamp = self._get_current_time()
content = f"发送时间: {timestamp}\n\n{content}"
if HAS_NOTIFY and notify_send:
try:
notify_send(title, content)
print("✅ 通知已通过notify.py发送")
return True
except Exception as e:
print(f"❌ 通过notify.py发送通知失败: {e}")
return False
else:
print("⚠️ 未找到notify.py模块无法发送通知")
print(" 请确保notify.py文件存在于当前目录或上级目录中")
print(" 访问青龙面板,打开“配置文件”页面,找到自己想要使用的推送方式填入对应的配置")
return False
_notification_sender = None
def SendNotify(title: str = "", content: str = "") -> bool:
global _notification_sender
if _notification_sender is None:
_notification_sender = NotificationSender()
return _notification_sender.send_notification(title, content)
# ==================== 测试代码 ====================
if __name__ == "__main__":
print("📱 SendNotify通知模块测试")
print("=" * 30)
# 测试通知
test_title = "SendNotify测试通知"
test_content = """这是一条测试通知消息。
测试内容包括:
✅ 通知模块正常工作
📱 仅通过notify.py推送功能测试成功
如果您收到此消息,说明通知配置正确"""
result = SendNotify(test_title, test_content)
if result:
print("✅ 测试完成,通知发送成功")
else:
print("❌ 测试完成,但通知发送失败")

View File

@@ -0,0 +1,17 @@
# Source: https://github.com/RayWangQvQ/BiliBiliToolPro/blob/main/qinglong/DefaultTasks/bili_task_test.sh
# Raw: https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/qinglong/DefaultTasks/bili_task_test.sh
# Repo: RayWangQvQ/BiliBiliToolPro
# Path: qinglong/DefaultTasks/bili_task_test.sh
# UploadedAt: 2025-09-22T22:41:56+08:00
# SHA256: eb59ce0c928cbc1b2787559fa3b7e22e892f915079f88cacd715158d83a8a247
# Category: APP版/抓包
# Evidence: cookie/token/authorization/header
#!/usr/bin/env bash
# cron:0 8 * * *
# new Env("bili测试ck")
. bili_task_base.sh
target_task_code="Test"
run_task "${target_task_code}"

View File

@@ -0,0 +1,17 @@
# Source: https://github.com/RayWangQvQ/BiliBiliToolPro/blob/main/qinglong/DefaultTasks/dev/bili_dev_task_test.sh
# Raw: https://raw.githubusercontent.com/RayWangQvQ/BiliBiliToolPro/main/qinglong/DefaultTasks/dev/bili_dev_task_test.sh
# Repo: RayWangQvQ/BiliBiliToolPro
# Path: qinglong/DefaultTasks/dev/bili_dev_task_test.sh
# UploadedAt: 2025-09-22T22:41:56+08:00
# SHA256: 55f5ed933420751e7c400454cb4ac477a32c1161bf885a335e620f94feef2bd5
# Category: APP版/抓包
# Evidence: cookie/token/authorization/header
#!/usr/bin/env bash
# cron:0 8 * * *
# new Env("bili测试ck[dev先行版]")
. bili_dev_task_base.sh
target_task_code="Test"
run_task "${target_task_code}"

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,22 @@
// # Source: https://github.com/sudojia/AutoTaskScript/blob/script/src/utils/envCheck.js
// # Raw: https://raw.githubusercontent.com/sudojia/AutoTaskScript/script/src/utils/envCheck.js
// # Repo: sudojia/AutoTaskScript
// # Path: src/utils/envCheck.js
// # UploadedAt: 2025-04-28T19:26:13+08:00
// # SHA256: b178db50f991ceec4559da64031ac67925b2a1d2dcbe1070c970a5e6f6b88728
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
module.exports = async function checkUpdate(prefix, list) {
if (JSON.stringify(process.env).indexOf('GITHUB') > -1) {
console.log('\n不建议使用 GitHub Actions 方式运行脚本\n推荐使用青龙面板');
console.log('服务器推荐https://github.com/sudojia/AutoTaskScript?tab=readme-ov-file#%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%8E%A8%E8%8D%90');
// process.exit(0);
}
if (!list || list.length === 0) {
console.error(`\n未配置环境变量...`);
process.exit(1);
}
console.log(`\n开始执行${prefix}`);
}

View File

@@ -0,0 +1,144 @@
// # Source: https://gitee.com/jdqlscript/yyt/blob/master/%E7%94%B5%E4%BF%A1old/%E7%94%B5%E4%BF%A12/rs.js
// # Raw: https://gitee.com/jdqlscript/yyt/raw/master/%E7%94%B5%E4%BF%A1old/%E7%94%B5%E4%BF%A12/rs.js
// # Repo: jdqlscript/yyt
// # Path: 电信old/电信2/rs.js
// # UploadedAt: 2025-07-19T22:58:22+08:00
// # SHA256: af24b67e3e07023318015ff8e283a268a7b13d5053649a5fe38af736b94d12be
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
delete __filename
delete __dirname
ActiveXObject = undefined
window = global;
content="content_code"
navigator = {"platform": "Linux aarch64"}
navigator = {"userAgent": "CtClient;11.0.0;Android;13;22081212C;NTIyMTcw!#!MTUzNzY"}
location={
"href": "https://",
"origin": "",
"protocol": "",
"host": "",
"hostname": "",
"port": "",
"pathname": "",
"search": "",
"hash": ""
}
i = {length: 0}
base = {length: 0}
div = {
getElementsByTagName: function (res) {
console.log('div中的getElementsByTagName', res)
if (res === 'i') {
return i
}
return '<div></div>'
}
}
script = {
}
meta = [
{charset:"UTF-8"},
{
content: content,
getAttribute: function (res) {
console.log('meta中的getAttribute', res)
if (res === 'r') {
return 'm'
}
},
parentNode: {
removeChild: function (res) {
console.log('meta中的removeChild', res)
return content
}
},
}
]
form = '<form></form>'
window.addEventListener= function (res) {
console.log('window中的addEventListener:', res)
}
document = {
createElement: function (res) {
console.log('document中的createElement', res)
if (res === 'div') {
return div
} else if (res === 'form') {
return form
}
else{return res}
},
addEventListener: function (res) {
console.log('document中的addEventListener:', res)
},
appendChild: function (res) {
console.log('document中的appendChild', res)
return res
},
removeChild: function (res) {
console.log('document中的removeChild', res)
},
getElementsByTagName: function (res) {
console.log('document中的getElementsByTagName', res)
if (res === 'script') {
return script
}
if (res === 'meta') {
return meta
}
if (res === 'base') {
return base
}
},
getElementById: function (res) {
console.log('document中的getElementById', res)
if (res === 'root-hammerhead-shadow-ui') {
return null
}
}
}
setInterval = function () {}
setTimeout = function () {}
window.top = window
'ts_code'
function main() {
cookie = document.cookie.split(';')[0]
return cookie
}

View File

@@ -0,0 +1,62 @@
# Source: https://gitee.com/yangro/ql/blob/main/utils/getCookie.py
# Raw: https://gitee.com/yangro/ql/raw/main/utils/getCookie.py
# Repo: yangro/ql
# Path: utils/getCookie.py
# UploadedAt: 2023-10-25T14:45:53+08:00
# SHA256: 153cd6f59fa7cbea00fe2909c7ff135afaa9c1938dcc12bc95dcf081812a7666
# Category: APP版/抓包
# Evidence: cookie/token/authorization/header
'''
获取青龙面板环境变量
'''
import os
import requests
class GetQlEnvs:
def __init__(self):
try:
port = os.environ["QL_PORT"]
client_id = os.environ["QL_CLIENT_ID"]
client_secret = os.environ["QL_CLIENT_SECRET"]
if (port != '' and client_id != '' and client_secret != ''):
self.qlUrl = "127.0.0.1:" + port
self.client_id = client_id
self.client_secret = client_secret
self.flag = True
self.getQlToken()
else:
print("配置不能为空")
self.flag = False
except Exception as e:
print("config.sh 配置文件缺少配置!")
self.flag = False
# 获取青龙token
def getQlToken(self):
try:
res = requests.get("http://"+self.qlUrl+"/open/auth/token?client_id="+self.client_id+"&client_secret="+self.client_secret).json()
self.qlToken = res['data']['token']
except Exception:
print("配置文件有误")
# 获取指定环境变量
def getCookies(self, key):
cookies = []
if (self.flag == False):
return cookies
headers = {
'Authorization': "Bearer " + self.qlToken
}
json = requests.get(
"http://"+self.qlUrl+"/open/envs?searchValue=&t=1673152342396", headers=headers).json()
if (json['code'] == 200):
for data in json['data']:
if (data['status'] == 0 and data['name'] == key):
cookies.append(
{'cookie': data['value'], 'name': data['remarks']})
return cookies

View File

@@ -0,0 +1,18 @@
// # Source: https://github.com/sudojia/AutoTaskScript/blob/script/src/utils/initScript.js
// # Raw: https://raw.githubusercontent.com/sudojia/AutoTaskScript/script/src/utils/initScript.js
// # Repo: sudojia/AutoTaskScript
// # Path: src/utils/initScript.js
// # UploadedAt: 2025-04-28T19:26:13+08:00
// # SHA256: af55b58a4961b7c59e3597f4114df7145361ea284efde3929ac95b40c2ca1382
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
module.exports = (appName) => {
const Env = require('./env');
const $ = new Env(appName);
const notify = $.isNode() ? require('./sendNotify') : '';
const sudojia = require('./common');
const checkUpdate = require('./envCheck');
return {$, notify, sudojia, checkUpdate};
};

View File

@@ -0,0 +1,120 @@
# Source: https://github.com/curtinlv/JD-Script/blob/main/msg.py
# Raw: https://raw.githubusercontent.com/curtinlv/JD-Script/main/msg.py
# Repo: curtinlv/JD-Script
# Path: msg.py
# UploadedAt: 2025-06-09T13:06:14+08:00
# SHA256: 459b2b204cdd0d81b6ee895afaa5334b416847166c0f80a378c695e6ff4a8661
# Category: APP版/抓包
# Evidence: APP/Android/iOS/device关键词
#!/usr/bin/env python3
# -*- coding: utf-8 -*
'''
项目名称: JD-Script / msg
Author: Curtin
功能:通知服务
Date: 2021/11/7 下午6:46
TG交流 https://t.me/topstyle996
TG频道 https://t.me/TopStyle2021
# 调用方法:
from msg import msg
#启动通知服务
msg().main()
# 发信息 msg打印控制台同时会记录日志在message(),后面统一发送
msg(" Hello ! ")
print(" test ") # 不会记录
msg(" My name is Curtin ")
# 发送到通知服务如tg机器人、企业微信等
message = msg().message()
send("标题", message)
'''
import requests
import os, sys
## 获取通知服务
class msg(object):
def __init__(self, m=None):
if m != None:
self.str_msg = m
print(self.str_msg)
self.message()
else:
self.str_msg = None
def message(self):
global msg_info
try:
if self.str_msg:
msg_info = "{}\n{}".format(msg_info, self.str_msg)
except:
if self.str_msg:
msg_info = "{}".format(self.str_msg)
else:
msg_info = ""
sys.stdout.flush()
if msg_info:
return msg_info
else:
return ""
def getsendNotify(self, a=0):
if a == 0:
a += 1
try:
url = 'https://ghproxy.com/https://raw.githubusercontent.com/curtinlv/JD-Script/main/sendNotify.py'
response = requests.get(url)
if 'curtinlv' in response.text:
with open('sendNotify.py', "w+", encoding="utf-8") as f:
f.write(response.text)
else:
if a < 5:
a += 1
return self.getsendNotify(a)
else:
pass
except:
if a < 5:
a += 1
return self.getsendNotify(a)
else:
pass
def main(self):
global send
cur_path = os.path.abspath(os.path.dirname(__file__))
sys.path.append(cur_path)
if os.path.exists(cur_path + "/sendNotify.py"):
try:
from sendNotify import send
except:
self.getsendNotify()
try:
from sendNotify import send
except:
print("加载通知服务失败~")
else:
self.getsendNotify()
try:
from sendNotify import send
except:
print("加载通知服务失败~")
if __name__ == '__main__':
# 启动通知服务
msg().main()
# msg打印控制台同时会记录日志在message(),后面统一发送
print("\n打印在控制台的信息:")
msg("Hello ! ")
print("Test ") # 不会记录
msg("My name is Curtin. ")
# 发送到通知服务如tg机器人、企业微信等
message = msg().message()
send("标题", message)
print("\n发送到通知服务的信息:")
print(message)

View File

@@ -0,0 +1,199 @@
// # Source: https://github.com/Aaron-lv/sync/blob/jd_scripts/tencentscf.js
// # Raw: https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/tencentscf.js
// # Repo: Aaron-lv/sync
// # Path: tencentscf.js
// # UploadedAt: 2022-06-21T18:12:55+08:00
// # SHA256: 62cb3ff8ce3c824cc88ba2edfc8c8bf0f3bcb32f47e1f42f1ad5624dfaba31b8
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
// Depends on tencentcloud-sdk-nodejs version 4.0.3 or higher
const tencentcloud = require("tencentcloud-sdk-nodejs");
const fs = require("fs");
const yaml = require("js-yaml");
process.env.action = 0;
const ScfClient = tencentcloud.scf.v20180416.Client;
const clientConfig = {
credential: {
secretId: process.env.TENCENT_SECRET_ID,
secretKey: process.env.TENCENT_SECRET_KEY
},
region: process.env.TENCENT_REGION, // 区域参考https://cloud.tencent.com/document/product/583/17299
profile: {
httpProfile: {
endpoint: "scf.tencentcloudapi.com"
}
}
};
const sleep = ms => new Promise(res => setTimeout(res, ms));
!(async () => {
const client = new ScfClient(clientConfig);
let params;
await client.ListFunctions({}).then(
async data => {
let func = data.Functions.filter(
vo => vo.FunctionName === process.env.TENCENT_FUNCTION_NAME
);
const file_buffer = fs.readFileSync("./myfile.zip");
const contents_in_base64 = file_buffer.toString("base64");
if (func.length) {
console.log(`更新函数`);
// 更新代码,删除后重建
params = {
FunctionName: process.env.TENCENT_FUNCTION_NAME
};
await client.DeleteFunction(params).then(
data => {
console.log(data);
},
err => {
console.error("error", err);
process.env.action++;
}
);
await sleep(1000 * 50); // 等待50秒
}
console.log(`创建函数`);
let inputYML = ".github/workflows/deploy_tencent_scf.yml";
let obj = yaml.load(fs.readFileSync(inputYML, { encoding: "utf-8" }));
params = {
Code: {
ZipFile: contents_in_base64
},
FunctionName: process.env.TENCENT_FUNCTION_NAME,
Runtime: "Nodejs12.16",
Timeout: 900,
Environment: {
Variables: []
}
};
let vars = [];
for (let key in obj.jobs.build.env) {
if (process.env[key].length > 0) {
vars.push(key);
params.Environment.Variables.push({
Key: key,
Value: process.env[key]
});
}
}
console.log(`您一共填写了${vars.length}个环境变量`, vars);
await client.CreateFunction(params).then(
data => {
console.log(data);
},
err => {
console.error("error", err);
process.env.action++;
}
);
await sleep(1000 * 50); // 等待50秒
},
err => {
console.error("error", err);
process.env.action++;
}
);
/* console.log(`更新环境变量`);
// 更新环境变量
let inputYML = ".github/workflows/deploy_tencent_scf.yml";
let obj = yaml.load(fs.readFileSync(inputYML, { encoding: "utf-8" }));
let vars = [];
for (let key in obj.jobs.build.steps[3].env) {
if (key !== "PATH" && process.env.hasOwnProperty(key))
vars.push({
Key: key,
Value: process.env[key]
});
}
console.log(`您一共填写了${vars.length}个环境变量`);
params = {
FunctionName: process.env.TENCENT_FUNCTION_NAME,
Environment: {
Variables: vars
}
};
await client.UpdateFunctionConfiguration(params).then(
data => {
console.log(data);
},
err => {
console.error("error", err);
}
);
let triggers = [];
params = {
FunctionName: process.env.TENCENT_FUNCTION_NAME
};
await client.ListTriggers(params).then(
data => {
console.log(data);
triggers = data.Triggers;
},
err => {
console.error("error", err);
}
);
for (let vo of triggers) {
params = {
FunctionName: process.env.TENCENT_FUNCTION_NAME,
Type: "timer",
TriggerName: vo.TriggerName
};
await client.DeleteTrigger(params).then(
data => {
console.log(data);
},
err => {
console.error("error", err);
}
);
} */
// 更新触发器
console.log(`去更新触发器`);
let inputYML = "serverless.yml";
let obj = yaml.load(fs.readFileSync(inputYML, { encoding: "utf-8" }));
for (let vo of obj.inputs.events) {
let param = {
FunctionName: process.env.TENCENT_FUNCTION_NAME,
TriggerName: vo.timer.parameters.name,
Type: "timer",
TriggerDesc: vo.timer.parameters.cronExpression,
CustomArgument: vo.timer.parameters.argument,
Enable: "OPEN"
};
await client.CreateTrigger(param).then(
data => {
console.log(data);
},
err => {
console.error("error", err);
process.env.action++;
}
);
}
})()
.catch(e => console.log(e))
.finally(async () => {
// 当环境为GitHub action时创建action.js文件判断部署是否进行失败通知
if (process.env.GITHUB_ACTIONS == "true") {
fs.writeFile(
"action.js",
`var action = ` + process.env.action + `;action > 0 ? require("./sendNotify").sendNotify("云函数部署异常!请重试","点击通知,登入后查看详情",{ url: process.env.GITHUB_SERVER_URL + "/" + process.env.GITHUB_REPOSITORY + "/actions/runs/" + process.env.GITHUB_RUN_ID + "?check_suite_focus=true" }): ""`,
"utf8",
function (error) {
if (error) {
console.log(error);
return false;
}
console.log("写入action.js成功");
}
);
}
});

View File

@@ -0,0 +1,218 @@
// # Source: https://gitee.com/jdqlscript/smzdm_script/blob/main/smzdm_task.js
// # Raw: https://gitee.com/jdqlscript/smzdm_script/raw/main/smzdm_task.js
// # Repo: jdqlscript/smzdm_script
// # Path: smzdm_task.js
// # UploadedAt: 2025-06-17T15:29:57+08:00
// # SHA256: 05309fe67423ebbc5b94ab8c3f4f86fe0418c311adb25bbf6f76e2266b0013b8
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
/*
smzdm 每日任务脚本
项目地址: https://github.com/hex-ci/smzdm_script
cron: 20 14 * * *
*/
const Env = require('./env');
const { requestApi, removeTags, getEnvCookies, wait } = require('./bot');
const notify = require('./sendNotify');
const { SmzdmTaskBot } = require('./library_task');
// ------------------------------------
const $ = new Env('smzdm 每日任务');
class SmzdmNormalTaskBot extends SmzdmTaskBot {
constructor(cookie) {
super(cookie, $);
}
// 主函数
async run() {
$.log('获取任务列表');
const { tasks } = await this.getTaskList();
await wait(5, 10);
let notifyMsg = '';
notifyMsg = await this.doTasks(tasks);
$.log('查询是否有限时累计活动阶段奖励');
await wait(5, 15);
// 领取活动奖励
const { detail } = await this.getTaskList();
if (detail.cell_data && detail.cell_data.activity_reward_status == '1') {
$.log('有奖励,领取奖励');
await wait(5, 15);
const { isSuccess } = await this.receiveActivity(detail.cell_data);
notifyMsg += `${isSuccess ? '🟢' : '❌'}限时累计活动阶段奖励领取${isSuccess ? '成功' : '失败!请查看日志'}\n`;
}
else {
$.log('无奖励');
}
return notifyMsg || '无可执行任务';
}
// 获取任务列表
async getTaskList() {
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/task/list_v2', {
method: 'post',
headers: this.getHeaders()
});
if (isSuccess) {
let tasks = [];
if (data.data.rows[0]) {
data.data.rows[0].cell_data.activity_task.accumulate_list.task_list_v2.forEach(item => {
tasks = tasks.concat(item.task_list);
});
return {
tasks: tasks,
detail: data.data.rows[0]
};
}
else {
$.log(`任务列表获取失败!${response}`);
return {
tasks: [],
detail: {}
};
}
}
else {
$.log(`任务列表获取失败!${response}`);
return {
tasks: [],
detail: {}
};
}
}
// 领取活动奖励
async receiveActivity(activity) {
$.log(`领取奖励: ${activity.activity_name}`);
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/task/activity_receive', {
method: 'post',
headers: this.getHeaders(),
data: {
activity_id: activity.activity_id
}
});
if (isSuccess) {
$.log(removeTags(data.data.reward_msg));
return {
isSuccess
};
}
else {
$.log(`领取奖励失败!${response}`);
return {
isSuccess
};
}
}
// 领取任务奖励
async receiveReward(taskId) {
const robotToken = await this.getRobotToken();
if (robotToken === false) {
return {
isSuccess,
msg: '领取任务奖励失败!'
};
}
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/task/activity_task_receive', {
method: 'post',
headers: this.getHeaders(),
data: {
robot_token: robotToken,
geetest_seccode: '',
geetest_validate: '',
geetest_challenge: '',
captcha: '',
task_id: taskId
}
});
if (isSuccess) {
const msg = removeTags(data.data.reward_msg);
$.log(msg);
return {
isSuccess,
msg
};
}
else {
$.log(`领取任务奖励失败!${response}`);
return {
isSuccess,
msg: '领取任务奖励失败!'
};
}
}
}
!(async () => {
const cookies = getEnvCookies();
if (cookies === false) {
$.log('\n请先设置 SMZDM_COOKIE 环境变量');
return;
}
let notifyContent = '';
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i];
if (!cookie) {
continue;
}
if (i > 0) {
$.log();
await wait(10, 30);
$.log();
}
const sep = `\n****** 账号${i + 1} ******\n`;
$.log(sep);
const bot = new SmzdmNormalTaskBot(cookie);
const msg = await bot.run();
notifyContent += `${sep}${msg}\n`;
}
$.log();
await notify.sendNotify($.name, notifyContent);
})().catch((e) => {
$.log('', `${$.name}, 失败! 原因: ${e}!`, '')
}).finally(() => {
$.done();
});

View File

@@ -0,0 +1,304 @@
// # Source: https://gitee.com/jdqlscript/smzdm_script/blob/main/smzdm_checkin.js
// # Raw: https://gitee.com/jdqlscript/smzdm_script/raw/main/smzdm_checkin.js
// # Repo: jdqlscript/smzdm_script
// # Path: smzdm_checkin.js
// # UploadedAt: 2025-06-17T15:29:57+08:00
// # SHA256: 26f53bee920f9f6d7ac749634b74b2577870dced7dbbca829f69ff486cd55fed
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
/*
smzdm 签到脚本
项目地址: https://github.com/hex-ci/smzdm_script
cron: 10 8 * * *
*/
const Env = require('./env');
const { SmzdmBot, requestApi, removeTags, getEnvCookies, wait } = require('./bot');
const notify = require('./sendNotify');
const CryptoJS = require('crypto-js');
// ------------------------------------
const $ = new Env('smzdm 签到');
class SmzdmCheckinBot extends SmzdmBot {
constructor(cookie, sk) {
super(cookie);
this.sk = sk ? sk.trim() : '';
}
async run() {
const { msg: msg1 } = await this.checkin();
const { msg: msg2 } = await this.allReward();
const { msg: msg3 } = await this.extraReward();
return `${msg1}${msg2}${msg3}`;
}
async checkin() {
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/checkin', {
method: 'post',
headers: this.getHeaders(),
data: {
touchstone_event: '',
sk: this.sk || '1',
token: this.token,
captcha: ''
}
});
if (isSuccess) {
let msg = `⭐签到成功${data.data.daily_num}
🏅金币: ${data.data.cgold}
🏅碎银: ${data.data.pre_re_silver}
🏅补签卡: ${data.data.cards}`;
await wait(3, 10);
const vip = await this.getVipInfo();
if (vip) {
msg += `\n🏅经验: ${vip.vip.exp_current}
🏅值会员等级: ${vip.vip.exp_level}
🏅值会员经验: ${vip.vip.exp_current_level}
🏅值会员有效期至: ${vip.vip.exp_level_expire}`;
}
$.log(`${msg}\n`);
return {
isSuccess,
msg: `${msg}\n\n`
};
}
else {
$.log(`签到失败!${response}`);
return {
isSuccess,
msg: '签到失败!'
};
}
}
async allReward() {
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/checkin/all_reward', {
method: 'post',
headers: this.getHeaders(),
debug: process.env.SMZDM_DEBUG
});
if (isSuccess) {
const msg1 = `${data.data.normal_reward.reward_add.title}: ${data.data.normal_reward.reward_add.content}`;
let msg2 = '';
if (data.data.normal_reward.gift.title) {
msg2 = `${data.data.normal_reward.gift.title}: ${data.data.normal_reward.gift.content_str}`;
}
else {
msg2 = `${data.data.normal_reward.gift.sub_content}`;
}
$.log(`${msg1}\n${msg2}\n`);
return {
isSuccess,
msg: `${msg1}\n${msg2}\n\n`
};
}
else {
if (data.error_code != '4') {
$.log(`查询奖励失败!${response}`);
}
return {
isSuccess,
msg: ''
};
}
}
async extraReward() {
const isContinue = await this.isContinueCheckin();
if (!isContinue) {
const msg = '今天没有额外奖励';
$.log(`${msg}\n`);
return {
isSuccess: false,
msg: `${msg}\n`
};
}
await wait(5, 10);
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/checkin/extra_reward', {
method: 'post',
headers: this.getHeaders()
});
if (isSuccess) {
const msg = `${data.data.title}: ${removeTags(data.data.gift.content)}`;
$.log(msg);
return {
isSuccess: true,
msg: `${msg}\n`
};
}
else {
$.log(`领取额外奖励失败!${response}`);
return {
isSuccess: false,
msg: ''
};
}
}
async isContinueCheckin() {
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/checkin/show_view_v2', {
method: 'post',
headers: this.getHeaders()
});
if (isSuccess) {
const result = data.data.rows.find(item => item.cell_type == '18001');
return result.cell_data.checkin_continue.continue_checkin_reward_show;
}
else {
$.log(`查询是否有额外奖励失败!${response}`);
return false;
}
}
async getVipInfo() {
const { isSuccess, data, response } = await requestApi('https://user-api.smzdm.com/vip', {
method: 'post',
headers: this.getHeaders(),
data: {
token: this.token
}
});
if (isSuccess) {
return data.data;
}
else {
$.log(`查询信息失败!${response}`);
return false;
}
}
}
function random32() {
const chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
let result = '';
for (let i = 0; i < 32; i++) {
result += chars.charAt(Math.floor(Math.random() * chars.length));
}
return result;
}
function getSk(cookie) {
const matchUserId = cookie.match(/smzdm_id=([^;]*)/);
if (!matchUserId) {
return ''
}
const userId = matchUserId[1];
const deviceId = getDeviceId(cookie);
const key = CryptoJS.enc.Utf8.parse('geZm53XAspb02exN');
const cipherText = CryptoJS.DES.encrypt(userId + deviceId, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return cipherText.toString();
}
function getDeviceId(cookie) {
const matchDeviceId = cookie.match(/device_id=([^;]*)/);
if (matchDeviceId) {
return matchDeviceId[1];
}
return random32();
}
!(async () => {
const cookies = getEnvCookies();
if (cookies === false) {
$.log('\n请先设置 SMZDM_COOKIE 环境变量');
return;
}
let sks = [];
if (process.env.SMZDM_SK) {
if (process.env.SMZDM_SK.indexOf('&') > -1) {
sks = process.env.SMZDM_SK.split('&');
}
else if (process.env.SMZDM_SK.indexOf('\n') > -1) {
sks = process.env.SMZDM_SK.split('\n');
}
else {
sks = [process.env.SMZDM_SK];
}
}
let notifyContent = '';
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i];
if (!cookie) {
continue;
}
let sk = sks[i];
if (!sk) {
sk = getSk(cookie)
}
if (i > 0) {
await wait(10, 30);
}
const sep = `\n****** 账号${i + 1} ******\n`;
$.log(sep);
const bot = new SmzdmCheckinBot(cookie, sk);
const msg = await bot.run();
notifyContent += sep + msg + '\n';
}
$.log();
await notify.sendNotify($.name, notifyContent);
})().catch((e) => {
$.log('', `${$.name}, 失败! 原因: ${e}!`, '')
}).finally(() => {
$.done();
});

View File

@@ -0,0 +1,19 @@
# Source: https://gitee.com/yangro/ql/blob/main/bak/test.py
# Raw: https://gitee.com/yangro/ql/raw/main/bak/test.py
# Repo: yangro/ql
# Path: bak/test.py
# UploadedAt: 2023-10-25T14:45:53+08:00
# SHA256: 4592aab884de98b00b116c867bcdb4f797aaccedb2c1f50a8346052ebcafd428
# Category: APP版/抓包
# Evidence: cookie/token/authorization/header
import os
import utils.getCookie as getCookie
QL = getCookie.GetQlEnvs()
cookies = QL.getCookies('BDTB_COOKIE')
for cookie in cookies:
print(cookie)

View File

@@ -0,0 +1,179 @@
# Source: https://gitee.com/yangro/ql/blob/main/utils/tool.py
# Raw: https://gitee.com/yangro/ql/raw/main/utils/tool.py
# Repo: yangro/ql
# Path: utils/tool.py
# UploadedAt: 2023-10-25T14:45:53+08:00
# SHA256: 4b1e54587262abf9a6142fdca40bc0d99768916b8acdcf16cf0c723fa099b3b9
# Category: APP版/抓包
# Evidence: cookie/token/authorization/header
# coding=utf-8
import urllib
from urllib import parse
import random
import requests
import time
# 用于生成ip地址的函数(很多国外)
def get_ip2():
ipls = []
for i in range(4):
ipls.append(str(random.randint(0, 255)))
return ".".join(ipls)
import random
import string
# 生成国内ip地址
def get_ip():
ips = ['58.14.0.0', '58.16.0.0', '58.24.0.0', '58.30.0.0', '58.32.0.0', '58.66.0.0', '58.68.128.0', '58.82.0.0',
'58.87.64.0', '58.99.128.0', '58.100.0.0', '58.116.0.0', '58.128.0.0', '58.144.0.0', '58.154.0.0', '58.192.0.0',
'58.240.0.0', '59.32.0.0', '59.64.0.0', '59.80.0.0', '59.107.0.0', '59.108.0.0', '59.151.0.0', '59.155.0.0',
'59.172.0.0', '59.191.0.0', '59.191.240.0', '59.192.0.0', '60.0.0.0', '60.55.0.0', '60.63.0.0', '60.160.0.0',
'60.194.0.0', '60.200.0.0', '60.208.0.0', '60.232.0.0', '60.235.0.0', '60.245.128.0', '60.247.0.0', '60.252.0.0',
'60.253.128.0', '60.255.0.0', '61.4.80.0', '61.4.176.0', '61.8.160.0', '61.28.0.0', '61.29.128.0', '61.45.128.0',
'61.47.128.0', '61.48.0.0', '61.87.192.0', '61.128.0.0', '61.232.0.0', '61.236.0.0', '61.240.0.0', '114.28.0.0',
'114.54.0.0', '114.60.0.0', '114.64.0.0', '114.68.0.0', '114.80.0.0', '116.1.0.0', '116.2.0.0', '116.4.0.0',
'116.8.0.0', '116.13.0.0', '116.16.0.0', '116.52.0.0', '116.56.0.0', '116.58.128.0', '116.58.208.0', '116.60.0.0',
'116.66.0.0', '116.69.0.0', '116.70.0.0', '116.76.0.0', '116.89.144.0', '116.90.184.0', '116.95.0.0', '116.112.0.0',
'116.116.0.0', '116.128.0.0', '116.192.0.0', '116.193.16.0', '116.193.32.0', '116.194.0.0', '116.196.0.0',
'116.198.0.0', '116.199.0.0', '116.199.128.0', '116.204.0.0', '116.207.0.0', '116.208.0.0', '116.212.160.0',
'116.213.64.0', '116.213.128.0', '116.214.32.0', '116.214.64.0', '116.214.128.0', '116.215.0.0', '116.216.0.0',
'116.224.0.0', '116.242.0.0', '116.244.0.0', '116.248.0.0', '116.252.0.0', '116.254.128.0', '116.255.128.0',
'117.8.0.0', '117.21.0.0', '117.22.0.0', '117.24.0.0', '117.32.0.0', '117.40.0.0', '117.44.0.0', '117.48.0.0',
'117.53.48.0', '117.53.176.0', '117.57.0.0', '117.58.0.0', '117.59.0.0', '117.60.0.0', '117.64.0.0', '117.72.0.0',
'117.74.64.0', '117.74.128.0', '117.75.0.0', '117.76.0.0', '117.80.0.0', '117.100.0.0', '117.103.16.0',
'117.103.128.0', '117.106.0.0', '117.112.0.0', '117.120.64.0', '117.120.128.0', '117.121.0.0', '117.121.128.0',
'117.121.192.0', '117.122.128.0', '117.124.0.0', '117.128.0.0', '118.24.0.0', '118.64.0.0', '118.66.0.0',
'118.67.112.0', '118.72.0.0', '118.80.0.0', '118.84.0.0', '118.88.32.0', '118.88.64.0', '118.88.128.0', '118.89.0.0',
'118.91.240.0', '118.102.16.0', '118.112.0.0', '118.120.0.0', '118.124.0.0', '118.126.0.0', '118.132.0.0',
'118.144.0.0', '118.178.0.0', '118.180.0.0', '118.184.0.0', '118.192.0.0', '118.212.0.0', '118.224.0.0',
'118.228.0.0', '118.230.0.0', '118.239.0.0', '118.242.0.0', '118.244.0.0', '118.248.0.0', '119.0.0.0', '119.2.0.0',
'119.2.128.0', '119.3.0.0', '119.4.0.0', '119.8.0.0', '119.10.0.0', '119.15.136.0', '119.16.0.0', '119.18.192.0',
'119.18.208.0', '119.18.224.0', '119.19.0.0', '119.20.0.0', '119.27.64.0', '119.27.160.0', '119.27.192.0',
'119.28.0.0', '119.30.48.0', '119.31.192.0', '119.32.0.0', '119.40.0.0', '119.40.64.0', '119.40.128.0', '119.41.0.0',
'119.42.0.0', '119.42.136.0', '119.42.224.0', '119.44.0.0', '119.48.0.0', '119.57.0.0', '119.58.0.0', '119.59.128.0',
'119.60.0.0', '119.62.0.0', '119.63.32.0', '119.75.208.0', '119.78.0.0', '119.80.0.0', '119.84.0.0', '119.88.0.0',
'119.96.0.0', '119.108.0.0', '119.112.0.0', '119.128.0.0', '119.144.0.0', '119.148.160.0', '119.161.128.0',
'119.162.0.0', '119.164.0.0', '119.176.0.0', '119.232.0.0', '119.235.128.0', '119.248.0.0', '119.253.0.0',
'119.254.0.0', '120.0.0.0', '120.24.0.0', '120.30.0.0', '120.32.0.0', '120.48.0.0', '120.52.0.0', '120.64.0.0',
'120.72.32.0', '120.72.128.0', '120.76.0.0', '120.80.0.0', '120.90.0.0', '120.92.0.0', '120.94.0.0', '120.128.0.0',
'120.136.128.0', '120.137.0.0', '120.192.0.0', '121.0.16.0', '121.4.0.0', '121.8.0.0', '121.16.0.0', '121.32.0.0',
'121.40.0.0', '121.46.0.0', '121.48.0.0', '121.51.0.0', '121.52.160.0', '121.52.208.0', '121.52.224.0', '121.55.0.0',
'121.56.0.0', '121.58.0.0', '121.58.144.0', '121.59.0.0', '121.60.0.0', '121.68.0.0', '121.76.0.0', '121.79.128.0',
'121.89.0.0', '121.100.128.0', '121.101.208.0', '121.192.0.0', '121.201.0.0', '121.204.0.0', '121.224.0.0',
'121.248.0.0', '121.255.0.0', '122.0.64.0', '122.0.128.0', '122.4.0.0', '122.8.0.0', '122.48.0.0', '122.49.0.0',
'122.51.0.0', '122.64.0.0', '122.96.0.0', '122.102.0.0', '122.102.64.0', '122.112.0.0', '122.119.0.0', '122.136.0.0',
'122.144.128.0', '122.152.192.0', '122.156.0.0', '122.192.0.0', '122.198.0.0', '122.200.64.0', '122.204.0.0',
'122.224.0.0', '122.240.0.0', '122.248.48.0', '123.0.128.0', '123.4.0.0', '123.8.0.0', '123.49.128.0', '123.52.0.0',
'123.56.0.0', '123.64.0.0', '123.96.0.0', '123.98.0.0', '123.99.128.0', '123.100.0.0', '123.101.0.0', '123.103.0.0',
'123.108.128.0', '123.108.208.0', '123.112.0.0', '123.128.0.0', '123.136.80.0', '123.137.0.0', '123.138.0.0',
'123.144.0.0', '123.160.0.0', '123.176.80.0', '123.177.0.0', '123.178.0.0', '123.180.0.0', '123.184.0.0',
'123.196.0.0', '123.199.128.0', '123.206.0.0', '123.232.0.0', '123.242.0.0', '123.244.0.0', '123.249.0.0',
'123.253.0.0', '124.6.64.0', '124.14.0.0', '124.16.0.0', '124.20.0.0', '124.28.192.0', '124.29.0.0', '124.31.0.0',
'124.40.112.0', '124.40.128.0', '124.42.0.0', '124.47.0.0', '124.64.0.0', '124.66.0.0', '124.67.0.0', '124.68.0.0',
'124.72.0.0', '124.88.0.0', '124.108.8.0', '124.108.40.0', '124.112.0.0', '124.126.0.0', '124.128.0.0',
'124.147.128.0', '124.156.0.0', '124.160.0.0', '124.172.0.0', '124.192.0.0', '124.196.0.0', '124.200.0.0',
'124.220.0.0', '124.224.0.0', '124.240.0.0', '124.240.128.0', '124.242.0.0', '124.243.192.0', '124.248.0.0',
'124.249.0.0', '124.250.0.0', '124.254.0.0', '125.31.192.0', '125.32.0.0', '125.58.128.0', '125.61.128.0',
'125.62.0.0', '125.64.0.0', '125.96.0.0', '125.98.0.0', '125.104.0.0', '125.112.0.0', '125.169.0.0', '125.171.0.0',
'125.208.0.0', '125.210.0.0', '125.213.0.0', '125.214.96.0', '125.215.0.0', '125.216.0.0', '125.254.128.0',
'134.196.0.0', '159.226.0.0', '161.207.0.0', '162.105.0.0', '166.111.0.0', '167.139.0.0', '168.160.0.0',
'169.211.1.0', '192.83.122.0', '192.83.169.0', '192.124.154.0', '192.188.170.0', '198.17.7.0', '202.0.110.0',
'202.0.176.0', '202.4.128.0', '202.4.252.0', '202.8.128.0', '202.10.64.0', '202.14.88.0', '202.14.235.0',
'202.14.236.0', '202.14.238.0', '202.20.120.0', '202.22.248.0', '202.38.0.0', '202.38.64.0', '202.38.128.0',
'202.38.136.0', '202.38.138.0', '202.38.140.0', '202.38.146.0', '202.38.149.0', '202.38.150.0', '202.38.152.0',
'202.38.156.0', '202.38.158.0', '202.38.160.0', '202.38.164.0', '202.38.168.0', '202.38.176.0', '202.38.184.0',
'202.38.192.0', '202.41.152.0', '202.41.240.0', '202.43.144.0', '202.46.32.0', '202.46.224.0', '202.60.112.0',
'202.63.248.0', '202.69.4.0', '202.69.16.0', '202.70.0.0', '202.74.8.0', '202.75.208.0', '202.85.208.0',
'202.90.0.0', '202.90.224.0', '202.90.252.0', '202.91.0.0', '202.91.128.0', '202.91.176.0', '202.91.224.0',
'202.92.0.0', '202.92.252.0', '202.93.0.0', '202.93.252.0', '202.95.0.0', '202.95.252.0', '202.96.0.0',
'202.112.0.0', '202.120.0.0', '202.122.0.0', '202.122.32.0', '202.122.64.0', '202.122.112.0', '202.122.128.0',
'202.123.96.0', '202.124.24.0', '202.125.176.0', '202.127.0.0', '202.127.12.0', '202.127.16.0', '202.127.40.0',
'202.127.48.0', '202.127.112.0', '202.127.128.0', '202.127.160.0', '202.127.192.0', '202.127.208.0', '202.127.212.0',
'202.127.216.0', '202.127.224.0', '202.130.0.0', '202.130.224.0', '202.131.16.0', '202.131.48.0', '202.131.208.0',
'202.136.48.0', '202.136.208.0', '202.136.224.0', '202.141.160.0', '202.142.16.0', '202.143.16.0', '202.148.96.0',
'202.149.160.0', '202.149.224.0', '202.150.16.0', '202.152.176.0', '202.153.48.0', '202.158.160.0', '202.160.176.0',
'202.164.0.0', '202.164.25.0', '202.165.96.0', '202.165.176.0', '202.165.208.0', '202.168.160.0', '202.170.128.0',
'202.170.216.0', '202.173.8.0', '202.173.224.0', '202.179.240.0', '202.180.128.0', '202.181.112.0', '202.189.80.0',
'202.192.0.0', '203.18.50.0', '203.79.0.0', '203.80.144.0', '203.81.16.0', '203.83.56.0', '203.86.0.0',
'203.86.64.0', '203.88.32.0', '203.88.192.0', '203.89.0.0', '203.90.0.0', '203.90.128.0', '203.90.192.0',
'203.91.32.0', '203.91.96.0', '203.91.120.0', '203.92.0.0', '203.92.160.0', '203.93.0.0', '203.94.0.0', '203.95.0.0',
'203.95.96.0', '203.99.16.0', '203.99.80.0', '203.100.32.0', '203.100.80.0', '203.100.96.0', '203.100.192.0',
'203.110.160.0', '203.118.192.0', '203.119.24.0', '203.119.32.0', '203.128.32.0', '203.128.96.0', '203.130.32.0',
'203.132.32.0', '203.134.240.0', '203.135.96.0', '203.135.160.0', '203.142.219.0', '203.148.0.0', '203.152.64.0',
'203.156.192.0', '203.158.16.0', '203.161.192.0', '203.166.160.0', '203.171.224.0', '203.174.7.0', '203.174.96.0',
'203.175.128.0', '203.175.192.0', '203.176.168.0', '203.184.80.0', '203.187.160.0', '203.190.96.0', '203.191.16.0',
'203.191.64.0', '203.191.144.0', '203.192.0.0', '203.196.0.0', '203.207.64.0', '203.207.128.0', '203.208.0.0',
'203.208.16.0', '203.208.32.0', '203.209.224.0', '203.212.0.0', '203.212.80.0', '203.222.192.0', '203.223.0.0',
'210.2.0.0', '210.5.0.0', '210.5.144.0', '210.12.0.0', '210.14.64.0', '210.14.112.0', '210.14.128.0', '210.15.0.0',
'210.15.128.0', '210.16.128.0', '210.21.0.0', '210.22.0.0', '210.23.32.0', '210.25.0.0', '210.26.0.0', '210.28.0.0',
'210.32.0.0', '210.51.0.0', '210.52.0.0', '210.56.192.0', '210.72.0.0', '210.76.0.0', '210.78.0.0', '210.79.64.0',
'210.79.224.0', '210.82.0.0', '210.87.128.0', '210.185.192.0', '210.192.96.0', '211.64.0.0', '211.80.0.0',
'211.96.0.0', '211.136.0.0', '211.144.0.0', '211.160.0.0', '218.0.0.0', '218.56.0.0', '218.64.0.0', '218.96.0.0',
'218.104.0.0', '218.108.0.0', '218.185.192.0', '218.192.0.0', '218.240.0.0', '218.249.0.0', '219.72.0.0',
'219.82.0.0', '219.128.0.0', '219.216.0.0', '219.224.0.0', '219.242.0.0', '219.244.0.0', '220.101.192.0',
'220.112.0.0', '220.152.128.0', '220.154.0.0', '220.160.0.0', '220.192.0.0', '220.231.0.0', '220.231.128.0',
'220.232.64.0', '220.234.0.0', '220.242.0.0', '220.248.0.0', '220.252.0.0', '221.0.0.0', '221.8.0.0', '221.12.0.0',
'221.12.128.0', '221.13.0.0', '221.14.0.0', '221.122.0.0', '221.129.0.0', '221.130.0.0', '221.133.224.0',
'221.136.0.0', '221.172.0.0', '221.176.0.0', '221.192.0.0', '221.196.0.0', '221.198.0.0', '221.199.0.0',
'221.199.128.0', '221.199.192.0', '221.199.224.0', '221.200.0.0', '221.208.0.0', '221.224.0.0', '222.16.0.0',
'222.32.0.0', '222.64.0.0', '222.125.0.0', '222.126.128.0', '222.128.0.0', '222.160.0.0', '222.168.0.0',
'222.176.0.0', '222.192.0.0', '222.240.0.0', '222.248.0.0']
rnd = random.randint(0, len(ips) - 1)
ip = ips[rnd]
_ip = ip.split('.')
for i, v in enumerate(_ip):
if int(v) == 0:
_ip[i] = str(random.randint(0, 255))
ip = '.'.join(_ip)
return ip
# 即时达推送
def msgSend(token, title, body, flag=False):
url = "http://push.ijingniu.cn/send"
data = "key=" + token + "&head=" + urllib.parse.quote(title) + \
"&body=" + urllib.parse.quote(body)
headers = {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
}
res = requests.post(url=url, data=data, headers=headers)
if flag:
print(res.text)
# 返回伪装ip
def getFalseHeadersIp(headers):
ip = get_ip()
_headers = {
"xforwarded-for": ip,
"x-remote-IP": ip,
"x-remote-ip": ip,
"x-client-ip": ip,
"x-client-IP": ip,
"X-Real-IP": ip,
"client-IP": ip,
"x-originating-IP": ip,
"x-remote-addr": ip,
"Client-Ip": ip,
"Remote_Addr": ip,
"X-Forwarded-For": ip,
"CLIENT_IP": ip,
"VIA": ip,
"REMOTE_ADDR": ip
}
headers.update(_headers)
return headers
#获取时间戳
def getTimeStamp():
return int(round(time.time() * 1000))
#获取日期时间
def getDateTime(timeStamp = None):
if timeStamp == None:
return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(int(round(time.time() * 1000))/1000))
else:
return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(timeStamp/1000))

View File

@@ -0,0 +1,410 @@
// # Source: https://github.com/sudojia/AutoTaskScript/blob/script/src/client/sudojia_shmedia.js
// # Raw: https://raw.githubusercontent.com/sudojia/AutoTaskScript/script/src/client/sudojia_shmedia.js
// # Repo: sudojia/AutoTaskScript
// # Path: src/client/sudojia_shmedia.js
// # UploadedAt: 2025-04-28T19:26:13+08:00
// # SHA256: fc123c5cb93f7069c83f15b2c939881360d4bd0cd21bae12444871e9623216c1
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
/**
* 上海杨浦APP
*
* 抓包 Hosthttps://ypapi.shmedia.tech 获取请求头 token
* export SHYP_TOKEN = 'eyJ0eXxx'
* 多账号用 & 或换行
*
* @author Telegram@sudojia
* @site https://blog.imzjw.cn
* @date 2024/10/05
*
* const $ = new Env('上海杨浦')
* cron: 33 7 * * *
*/
const initScript = require('../utils/initScript')
const {$, notify, sudojia, checkUpdate} = initScript('上海杨浦');
const shMediaList = process.env.SHYP_TOKEN ? process.env.SHYP_TOKEN.split(/[\n&]/) : [];
// 消息推送
let message = '';
// 接口地址
const baseUrl = 'https://ypapi.shmedia.tech'
// 请求头
const headers = {
'User-Agent': 'okhttp/4.10.0',
'Accept-Encoding': 'gzip',
'siteid': '310110',
'content-type': 'application/json; charset=UTF-8'
};
// 请求体
const dataBody = {
"orderBy": "release_desc",
"requestType": "2",
"siteId": "310110"
}
// 映射表用于转换任务 ID
const TASK_ID_MAP = {
'002': 'read',
'003': 'video',
'007': 'share'
};
!(async () => {
await checkUpdate($.name, shMediaList);
for (let i = 0; i < shMediaList.length; i++) {
const index = i + 1;
console.log(`\n*****第[${index}]个${$.name}账号*****`);
headers.token = shMediaList[i];
message += `📣====${$.name}账号[${index}]====📣\n`;
await main();
await $.wait(sudojia.getRandomWait(2000, 2500));
}
if (message) {
await notify.sendNotify(`${$.name}`, `${message}`);
}
})().catch((e) => $.logErr(e)).finally(() => $.done());
async function main() {
await getUserInfo();
await $.wait(sudojia.getRandomWait(1500, 2500));
await doTask();
await $.wait(sudojia.getRandomWait(1500, 2500));
await getPoints();
await $.wait(sudojia.getRandomWait(1500, 2500));
await getGoodsList();
}
/**
* 获取用户信息
*
* @returns {Promise<void>}
*/
async function getUserInfo() {
try {
const data = await sudojia.sendRequest(`${baseUrl}/media-basic-port/api/app/personal/get`, 'post', headers);
if (0 !== data.code) {
return console.error('获取用户信息失败 ->', data.msg);
}
const mobile = data.data.mobile || '18888888888';
const hiddenMobile = `${mobile.slice(0, 3)}***${mobile.slice(-3)}`;
console.log(`${data.data.nickname}(${hiddenMobile})`);
message += `${data.data.nickname}(${mobile})\n`;
} catch (e) {
console.error(`获取用户信息时发生异常 -> ${e}`);
}
}
/**
* 签到
*
* @returns {Promise<void>}
*/
async function sign() {
try {
const data = await sudojia.sendRequest(`${baseUrl}/media-basic-port/api/app/personal/score/sign`, 'post', headers, dataBody);
if (0 !== data.code) {
return console.error('签到失败 ->', data.msg);
}
if (!data.data.score) {
return console.error(data.data.title);
}
console.log(`签到成功,积分+${data.data.score}`);
message += `签到成功\n`;
} catch (e) {
console.error(`签到时发生异常 -> ${e}`);
}
}
/**
* 获取任务列表
*
* @returns {Promise<void>}
*/
async function doTask() {
try {
let data = await sudojia.sendRequest(`${baseUrl}/media-basic-port/api/app/personal/score/info`, 'post', headers, dataBody);
if (0 !== data.code) {
return console.error(`获取任务列表失败 -> ${data.msg}`);
}
const tasks = data.data.jobs;
for (const item of tasks) {
if (['004'].includes(item.id)) {
console.log(`\n跳过【${item.title}`);
continue;
}
// 已获得的任务积分
let taskScore = item.progress;
if (taskScore >= item.totalProgress) {
console.log(`${item.title}】任务已完成`)
await $.wait(sudojia.getRandomWait(800, 1300));
continue;
}
console.log(`\n开始【${item.title}`);
await $.wait(sudojia.getRandomWait(1e3, 2e3));
while (taskScore < item.totalProgress) {
// 获取文章 ID
const articleId = await getArticleId();
switch (item.id) {
case '001':
// 签到
await sign();
await $.wait(sudojia.getRandomWait(2e3, 3e3));
break;
case '002': // 阅读
case '003': // 视频
case '007': // 分享
await commonTask(item.id, item.title);
break;
case '005':
// 收藏
await favorArticle(articleId);
await $.wait(sudojia.getRandomWait(5e3, 8e3));
break;
case '006':
// 评论
await commentArticle(articleId);
await $.wait(sudojia.getRandomWait(15000, 20000));
break;
default:
console.log(`其它任务:${item.title}`);
break;
}
// 更新 taskScore
taskScore = await updateTaskScore(item.id);
await $.wait(sudojia.getRandomWait(1e3, 2e3));
}
}
} catch (e) {
console.error(`获取任务列表时发生异常 -> ${e}`);
}
}
/**
* 通用任务 002
* 003
* 007
*
* @param taskId
* @param taskName
* @returns {Promise<void>}
*/
async function commonTask(taskId, taskName) {
const taskType = TASK_ID_MAP[taskId];
const taskUrl = `${baseUrl}/media-basic-port/api/app/points/${taskType}/add`;
const taskData = await sudojia.sendRequest(taskUrl, 'post', headers, {
"orderBy": "release_desc",
"requestType": "1",
"siteId": "310110"
});
if (0 !== taskData.code) {
throw new Error(`${taskName}任务失败 -> ${taskData.msg}`);
}
console.log(`${taskName}任务成功`);
await $.wait(sudojia.getRandomWait(5e3, 8e3));
}
/**
* 更新任务积分
*
* @param itemId
* @returns {Promise<*|void>}
*/
async function updateTaskScore(itemId) {
try {
const updatedData = await sudojia.sendRequest(`${baseUrl}/media-basic-port/api/app/personal/score/info`, 'post', headers, dataBody);
if (0 !== updatedData.code) {
return console.error('更新任务列表失败 ->', updatedData.msg);
}
const updatedItem = updatedData.data.jobs.find(job => job.id === itemId);
if (!updatedItem) {
return console.error(`未找到任务ID: ${itemId}`);
}
return updatedItem.progress;
} catch (e) {
console.error(`更新任务列表出错 -> ${e}`);
}
}
/**
* 获取文章 ID
*
* @returns {Promise<*|null>}
*/
async function getArticleId() {
try {
// 频道列表
const channelIds = [
// 推荐
'a978f44b3e284e5e86777f9d4e3be7bb',
// 要闻
'01ff4b46f6bf4e19af6fe88e6320a6c1',
// 时政
'ba1f152e715f4ee99e6e13a02f6a218e',
// 三区
'0375dc90023f43ffafaf9bc161c30348',
// 城事
'0ea24f917ab54157bcd2cecffbf9bfa2'
];
// 随机选择一个频道
const channelId = channelIds[Math.floor(Math.random() * channelIds.length)];
const data = await sudojia.sendRequest(`${baseUrl}/media-basic-port/api/app/news/content/list`, 'post', headers, {
"channel": {
"id": channelId
},
"pageNo": 1,
"pageSize": 30,
"orderBy": "release_desc",
"requestType": "1",
"siteId": "310110"
});
if (0 !== data.code) {
console.error('获取新闻列表失败 ->', data.msg)
return null;
}
const articles = data.data.records[Math.floor(Math.random() * data.data.records.length)];
return articles.id;
} catch (e) {
console.error(`获取文章 ID 时发生异常 -> ${e}`);
return null;
}
}
/**
* 收藏文章
*
* @returns {Promise<void>}
*/
async function favorArticle(articleId) {
try {
const data = await sudojia.sendRequest(`${baseUrl}/media-basic-port/api/app/news/content/favor`, 'post', headers, {
"id": articleId,
"orderBy": "release_desc",
"requestType": "2",
"siteId": "310110"
});
if (0 !== data.code) {
return console.error('收藏文章失败 ->', data.msg);
}
console.log(`收藏文章成功\n`);
} catch (e) {
console.error(`收藏文章时发生异常 -> ${e}`);
}
}
/**
* 文章评论
*
* @returns {Promise<void>}
*/
async function commentArticle(articleId) {
try {
// 随机评论句子
const contentList = [
'👍',
'👍👍',
'好!!',
'占个楼',
'mark',
'读完这篇文章后,我感到充满了力量和决心',
'这篇文章让我感到非常温暖和鼓舞',
'激荡团结奋斗的强大正能量,汇聚起亿万人民团结奋斗的磅礴之力。'
];
const content = contentList[Math.floor(Math.random() * contentList.length)];
console.log(`随机获取评论句子:[${content}]`);
const data = await sudojia.sendRequest(`${baseUrl}/media-basic-port/api/app/common/comment/add`, 'post', headers, {
"content": content,
"displayResources": [],
"targetId": articleId,
"targetType": "content",
"pageNo": 0,
"pageSize": 10,
"orderBy": "create_desc",
"requestType": "1",
"siteId": "310110"
})
if (0 !== data.code) {
return console.error('评论文章失败 ->', data.msg, '\n');
}
console.log('评论成功\n');
} catch (e) {
console.error(`评论文章时发生异常 -> ${e}`);
}
}
/**
* 获取积分
*
* @returns {Promise<void>}
*/
async function getPoints() {
try {
const data = await sudojia.sendRequest(`${baseUrl}/media-basic-port/api/app/personal/score/info`, 'post', headers, dataBody);
if (0 !== data.code) {
return console.error('获取任务列表失败 ->', data.msg);
}
const tasks = data.data.jobs;
for (const item of tasks) {
if (['004'].includes(item.id)) {
continue;
}
if ('1' === item.status) {
message += `${item.title}】已完成\n`;
}
}
$.points = data.data.totalScore || 0;
if (data.data.signTitle) {
console.log(data.data.signTitle);
message += `${data.data.signTitle}\n`;
}
console.log(`当前积分:${$.points}`);
message += `当前积分:${$.points}\n`;
} catch (e) {
console.error(`获取积分时发生异常 -> ${e}`);
}
}
/**
* 获取商品列表
*
* @returns {Promise<void>}
*/
async function getGoodsList() {
try {
const requests = [
{
params: 'seller_id=31011001&page_no=1&page_size=10&shop_cat_id=1544652237932859394&sort=create_desc',
type: '限时商品'
},
{
params: 'keyword=&page_no=1&page_size=20&sort=create_desc&seller_id=31011001&shop_cat_id=1431136756879056898',
type: '虚拟商品'
}
];
for (const req of requests) {
let data = await sudojia.sendRequest(`https://mall-api.shmedia.tech/goods-service/goods/search?${req.params}`, 'get', headers);
await $.wait(sudojia.getRandomWait(1e3, 2e3));
if (!data || !data.data) {
console.error(`${req.type}: data 数据为空`);
continue;
}
const promotions = data.data.flatMap(item => item.promotion);
let hasExchangeableGoods = false;
console.log(`${req.type}:`);
message += `${req.type}:\n`;
for (const ex of promotions) {
const {goods_name, exchange_point} = ex.exchange;
if ($.points >= exchange_point) {
console.log(`可兑换[${goods_name}], 所需[${exchange_point}]积分`);
message += `可兑换[${goods_name}], 所需[${exchange_point}]积分\n`;
hasExchangeableGoods = true;
}
}
if (!hasExchangeableGoods) {
message += `当前积分暂无商品可兑换\n\n`;
console.log(`当前积分暂无商品可兑换\n`);
}
}
} catch (e) {
console.error(`获取商品列表时发生异常 -> ${e}`);
}
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,147 @@
// # Source: https://github.com/sudojia/AutoTaskScript/blob/script/src/client/sudojia_moto.js
// # Raw: https://raw.githubusercontent.com/sudojia/AutoTaskScript/script/src/client/sudojia_moto.js
// # Repo: sudojia/AutoTaskScript
// # Path: src/client/sudojia_moto.js
// # UploadedAt: 2025-04-28T19:26:13+08:00
// # SHA256: ba0646a4a049f0e7a0bf3bdbf3ec2ffa6f5a37be53bfe675644630816b6fbad0
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
/**
* 摩托范 APP
*
* 抓包 Hosthttps://api.58moto.com 获取请求头 token 的值和 uid token#uid
* export MOTO_TOKEN = 'f08xxxxxxxxxxxxxxxxx#22222222'
* 多账号用 & 或换行
*
* @author Telegram@sudojia
* @site https://blog.imzjw.cn
* @date 2024/08/27
*
* const $ = new Env('摩托范')
* cron: 33 3 * * *
*/
const initScript = require('../utils/initScript')
const {$, notify, sudojia, checkUpdate} = initScript('摩托范');
const moment = require("moment/moment");
const motoList = process.env.MOTO_TOKEN ? process.env.MOTO_TOKEN.split(/[\n&]/) : [];
// 消息推送
let message = '';
// 接口地址
const baseUrl = 'https://api.58moto.com'
// 请求头
const headers = {
'User-Agent': 'okhttp/4.11.0',
'Content-Type': 'application/x-www-form-urlencoded',
'Accept-Encoding': 'gzip',
'os': 'OPPO:OPPO+R9s',
'osversion': '28',
'referer': 'api.58moto.com',
'version': '3.57.63',
'timestamp': Date.now()
};
!(async () => {
await checkUpdate($.name, motoList);
for (let i = 0; i < motoList.length; i++) {
const index = i + 1;
const [token, uid] = motoList[i].split('#');
headers.token = token;
$.userId = uid;
console.log(`\n*****第[${index}]个${$.name}账号*****`);
message += `📣====${$.name}账号[${index}]====📣\n`;
await main();
await $.wait(sudojia.getRandomWait(2000, 2500));
}
if (message) {
await notify.sendNotify(`${$.name}`, `${message}`);
}
})().catch((e) => $.logErr(e)).finally(() => $.done());
async function main() {
await getUserInfo();
await $.wait(sudojia.getRandomWait(800, 1200));
await isSign();
await $.wait(sudojia.getRandomWait(1e3, 2e3));
await getPoints();
}
/**
* 获取用户信息
*
* @returns {Promise<void>}
*/
async function getUserInfo() {
try {
const data = await sudojia.sendRequest(`${baseUrl}/user/center/info/v2/principal`, 'post', headers, `uid=${$.userId}`);
if (data.code !== 0) {
return $.log(data.msg);
}
const mobile = data.data.mobile;
const hiddenMobile = `${mobile.slice(0, 3)}***${mobile.slice(-3)}` || '18888888888';
console.log(`${data.data.nickname}(${hiddenMobile})`);
message += `${data.data.nickname}(${mobile})\n`;
headers.token = data.data.token;
} catch (e) {
console.error(`获取用户信息时发生异常:` + e);
}
}
/**
* 检测签到
*
* @returns {Promise<void>}
*/
async function isSign() {
try {
const data = await sudojia.sendRequest(`${baseUrl}/coins/task/v2/isSign?uid=${$.userId}`, 'get', headers);
if (data.code !== 0) {
return $.log(data.msg);
}
if (data.data.isSign) {
message += `今日已签到\n`;
return $.log(`今日已签到`);
}
await $.wait(sudojia.getRandomWait(1e3, 2e3));
await sign();
} catch (e) {
console.error(`检测签到时发生异常:` + e);
}
}
/**
* 签到
*
* @returns {Promise<void>}
*/
async function sign() {
try {
const data = await sudojia.sendRequest(`${baseUrl}/coins/task/dailyCheckIn`, 'post', headers, `uid=${$.userId}&weekDate=${moment().format('YYYYMMDD')}`);
if (0 !== data.code) {
return $.log(data.msg);
}
console.log(data.data.contentDesc || '签到成功');
message += '签到成功\n';
} catch (e) {
console.error(`签到时发生异常:` + e);
}
}
/**
* 获取积分
*
* @returns {Promise<void>}
*/
async function getPoints() {
try {
const data = await sudojia.sendRequest(`${baseUrl}/coins/account/energy?uid=${$.userId}`, 'get', headers);
if (data.code !== 0) {
return $.log(data.msg);
}
console.log(`当前能量:${data.data.available}`);
message += `当前能量:${data.data.available}\n\n`;
} catch (e) {
console.error(`获取积分时发生异常:` + e);
}
}

View File

@@ -0,0 +1,79 @@
# Source: https://gitee.com/yangro/ql/blob/main/bak/ydybj.py
# Raw: https://gitee.com/yangro/ql/raw/main/bak/ydybj.py
# Repo: yangro/ql
# Path: bak/ydybj.py
# UploadedAt: 2023-10-25T14:45:53+08:00
# SHA256: ee4dc424b3f1ae06d0cabb02ed6ba632f06c9ba877716f279cf3368be1171dd3
# Category: APP版/抓包
# Evidence: cookie/token/authorization/header
# coding=utf-8
"""
cron: 0 0 6 * * ?
new Env("有道云笔记")
"""
import pymysql
import requests
import utils.db as DB
import utils.tool as TOOL
global msg
msg = """
名称|空间
:--:|:--:
"""
mysql = DB.mysql()
def main():
dbUser = mysql.select_all("select * from tb_ydybj where status = 0")
print("🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉\n")
print("获取到: "+str(len(dbUser))+" 个用户")
print("-------------------------------------------")
for user in dbUser:
signIn(user)
# 签到
def signIn(user):
global msg
ad = 0
payload = 'yaohuo:id34976'
headers = {'Cookie': user['cookie']}
re = requests.request(
"POST", "https://note.youdao.com/yws/api/daupromotion?method=sync", headers=headers, data=payload)
if 'error' not in re.text:
res = requests.request(
"POST", "https://note.youdao.com/yws/mapi/user?method=checkin", headers=headers, data=payload)
for i in range(3):
resp = requests.request(
"POST", "https://note.youdao.com/yws/mapi/user?method=adRandomPrompt", headers=headers, data=payload)
ad += resp.json()['space'] // 1048576
if 'reward' in re.text:
sync = re.json()['rewardSpace'] // 1048576
checkin = res.json()['space'] // 1048576
# 签到成功
print(user['user_name'] + " ---> " +
str(sync + checkin + ad) + 'M\n')
msg += user['user_name'] + "|" + \
str(sync + checkin + ad) + 'M\n\n'
else:
if sever != '0':
print(user['user_name'] + " ---> " + 'cookie失效\n')
msg += user['user_name'] + "|cookie失效\n\n"
print("-------------------------------------------")
main()
# 一定要关闭数据库
print("\n🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉")
mysql.close()
TOOL.msgSend("b5fd9aaa249242e3aea2ca4bbebb6bfa", " ", msg, True)

View File

@@ -0,0 +1,77 @@
# Source: https://gitee.com/yangro/ql/blob/main/ydybj.py
# Raw: https://gitee.com/yangro/ql/raw/main/ydybj.py
# Repo: yangro/ql
# Path: ydybj.py
# UploadedAt: 2023-10-25T14:45:53+08:00
# SHA256: f7a68eb8628692792bf6a8123bf482d57fb78ba20d3641d978fb6a6607d20930
# Category: APP版/抓包
# Evidence: cookie/token/authorization/header
# coding=utf-8
"""
cron: 0 0 6 * * ?
new Env("有道云笔记")
"""
import requests
import notify
import utils.tool as TOOL
import utils.getCookie as getCookie
global msg
msg = """
名称|空间
:--:|:--:
"""
def main():
users = getCookie.GetQlEnvs().getCookies('YDYBJ_COOKIE')
print("🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉\n")
print("获取到: "+str(len(users))+" 个用户")
print("-------------------------------------------")
for user in users:
signIn(user)
# 签到
def signIn(user):
global msg
ad = 0
payload = 'yaohuo:id34976'
headers = {'Cookie': user['cookie']}
re = requests.request(
"POST", "https://note.youdao.com/yws/api/daupromotion?method=sync", headers=headers, data=payload)
if 'error' not in re.text:
res = requests.request(
"POST", "https://note.youdao.com/yws/mapi/user?method=checkin", headers=headers, data=payload)
for i in range(3):
resp = requests.request(
"POST", "https://note.youdao.com/yws/mapi/user?method=adRandomPrompt", headers=headers, data=payload)
ad += resp.json()['space'] // 1048576
if 'reward' in re.text:
sync = re.json()['rewardSpace'] // 1048576
checkin = res.json()['space'] // 1048576
# 签到成功
print(user['name'] + " ---> " +
str(sync + checkin + ad) + 'M\n')
msg += user['name'] + "|" + \
str(sync + checkin + ad) + 'M\n\n'
else:
print(user['name'] + " ---> " + 'cookie失效\n')
msg += user['name'] + "|cookie失效\n\n"
print("-------------------------------------------")
main()
print("\n🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉")
notify.send("有道云笔记", msg)

View File

@@ -0,0 +1,149 @@
// # Source: https://gitee.com/jdqlscript/yyt/blob/master/%E7%94%B5%E4%BF%A1/%E7%91%9E%E6%95%B0%E9%80%9A%E6%9D%80.js
// # Raw: https://gitee.com/jdqlscript/yyt/raw/master/%E7%94%B5%E4%BF%A1/%E7%91%9E%E6%95%B0%E9%80%9A%E6%9D%80.js
// # Repo: jdqlscript/yyt
// # Path: 电信/瑞数通杀.js
// # UploadedAt: 2025-07-19T22:58:22+08:00
// # SHA256: ea97566a5088d6be6d9f7ad85fceb6bf745d8f79f8e8afcd2babf5e930e16e44
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
/*
const $ = new Env("瑞数通杀");
*/
delete __filename
delete __dirname
ActiveXObject = undefined
window = global;
content="content_code"
navigator = {"platform": "Linux aarch64"}
navigator = {"userAgent": "CtClient;11.0.0;Android;13;22081212C;NTIyMTcw!#!MTUzNzY"}
location={
"href": "https://",
"origin": "",
"protocol": "",
"host": "",
"hostname": "",
"port": "",
"pathname": "",
"search": "",
"hash": ""
}
i = {length: 0}
base = {length: 0}
div = {
getElementsByTagName: function (res) {
console.log('div中的getElementsByTagName', res)
if (res === 'i') {
return i
}
return '<div></div>'
}
}
script = {
}
meta = [
{charset:"UTF-8"},
{
content: content,
getAttribute: function (res) {
console.log('meta中的getAttribute', res)
if (res === 'r') {
return 'm'
}
},
parentNode: {
removeChild: function (res) {
console.log('meta中的removeChild', res)
return content
}
},
}
]
form = '<form></form>'
window.addEventListener= function (res) {
console.log('window中的addEventListener:', res)
}
document = {
createElement: function (res) {
console.log('document中的createElement', res)
if (res === 'div') {
return div
} else if (res === 'form') {
return form
}
else{return res}
},
addEventListener: function (res) {
console.log('document中的addEventListener:', res)
},
appendChild: function (res) {
console.log('document中的appendChild', res)
return res
},
removeChild: function (res) {
console.log('document中的removeChild', res)
},
getElementsByTagName: function (res) {
console.log('document中的getElementsByTagName', res)
if (res === 'script') {
return script
}
if (res === 'meta') {
return meta
}
if (res === 'base') {
return base
}
},
getElementById: function (res) {
console.log('document中的getElementById', res)
if (res === 'root-hammerhead-shadow-ui') {
return null
}
}
}
setInterval = function () {}
setTimeout = function () {}
window.top = window
'ts_code'
function main() {
cookie = document.cookie.split(';')[0]
return cookie
}

View File

@@ -0,0 +1,102 @@
# Source: https://gitee.com/jdqlscript/yyt/blob/master/%E7%94%B5%E4%BF%A1old/%E7%94%B5%E4%BF%A12/%E7%94%B5%E4%BF%A1%E9%87%91%E8%B1%86%E8%AF%9D%E8%B4%B9%E8%8E%B7%E5%8F%96%E6%9F%A5%E8%AF%A2.py
# Raw: https://gitee.com/jdqlscript/yyt/raw/master/%E7%94%B5%E4%BF%A1old/%E7%94%B5%E4%BF%A12/%E7%94%B5%E4%BF%A1%E9%87%91%E8%B1%86%E8%AF%9D%E8%B4%B9%E8%8E%B7%E5%8F%96%E6%9F%A5%E8%AF%A2.py
# Repo: jdqlscript/yyt
# Path: 电信old/电信2/电信金豆话费获取查询.py
# UploadedAt: 2025-07-19T22:58:22+08:00
# SHA256: 108adee7f631d1a668a42554330fde8cbcc867e3f2e415cde4f56f875e4d9094
# Category: APP版/抓包
# Evidence: APP/Android/iOS/device关键词
"""
cron: 00 20 * * *
new Env('电信金豆话费获取查询');
"""
"""
使用方法:
啥也不用设置,调用的面板配置的推送
"""
import json
from collections import defaultdict
import sys
import os # 导入os模块用于检查文件是否存在
# 控制变量,用于控制是否发送通知
enable_notification = 1 # 0 不发送 1发送通知
# 如果需要发送通知则尝试导入notify模块
if enable_notification:
try:
from notify import send
except ModuleNotFoundError:
print("警告未找到notify.py模块。程序将退出。")
sys.exit(1)
# 定义日志文件路径
log_file_path = '电信金豆换话费.log'
# 检查日志文件是否存在
if not os.path.exists(log_file_path):
print("垃圾都没中,还统计个锤子")
sys.exit(0)
# 读取日志数据
def read_log_data(log_file_path):
try:
with open(log_file_path, 'r', encoding='utf-8') as file:
log_data = json.load(file)
return log_data
except Exception as e:
print(f"读取日志数据时发生错误: {e}")
return None
# 格式化日志输出
def generate_log_output(log_data):
log_lines = []
# 遍历每个月的数据
for month, fees in log_data.items():
log_lines.append(f"--- {month} ---") # 分割线,标识月份
# 收集每个手机号获得的所有话费类型
phone_to_fees = defaultdict(set)
for fee_type, phones in fees.items():
# 获取手机号列表
phone_numbers = phones.strip('#').split('#') if phones else []
# 格式化输出日志行
if phone_numbers:
log_line = f"{fee_type} : " + ", ".join(phone_numbers)
for phone in phone_numbers:
phone_to_fees[phone].add(fee_type) # 记录手机号对应的所有话费类型
else:
log_line = f"{fee_type} : 还没有中的哦"
log_lines.append(log_line)
# 添加每个月的手机号统计信息
log_lines.append("统计信息:")
for phone, fee_types in phone_to_fees.items():
log_lines.append(f"{phone} 中了: {', '.join(fee_types)}")
log_lines.append("") # 每个月份后添加空行,分隔月份数据
# 返回生成的日志内容
return "\n".join(log_lines)
# 获取日志内容
def get_log_content():
log_data = read_log_data(log_file_path)
if log_data:
log_content = generate_log_output(log_data)
return log_content
return None
# 调用函数获取日志内容
log_content = get_log_content()
# 如果获取到日志内容,则打印或者推送
if log_content:
print(log_content) # 在这里输出日志,您可以修改为推送日志的代码
send('电信当月兑换统计', log_content)

View File

@@ -0,0 +1,73 @@
# Source: https://gitee.com/yangro/ql/blob/main/bdtb.py
# Raw: https://gitee.com/yangro/ql/raw/main/bdtb.py
# Repo: yangro/ql
# Path: bdtb.py
# UploadedAt: 2023-10-25T14:45:53+08:00
# SHA256: 2ed7b1db26174adf149b12b54b87b87d464a8cffe95d490efc914e0a1c6b9028
# Category: APP版/抓包
# Evidence: cookie/token/authorization/header
# coding=utf-8
"""
每日8:30
cron: 0 30 8 * * ?
new Env("百度贴吧")
"""
import requests
import notify
import utils.tool as TOOL
import utils.getCookie as getCookie
global msg
msg = """
名称|状态
:--:|:--:
"""
def main():
users = getCookie.GetQlEnvs().getCookies('BDTB_COOKIE')
print("🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉\n")
print("获取到: "+str(len(users))+" 个用户")
print("-------------------------------------------")
for user in users:
signIn(user)
# 签到
def signIn(user):
global msg
url = 'http://c.tieba.baidu.com/c/c/forum/msign'
data = user['cookie']
res = requests.post(url=url, data=data)
json = res.json()
code = json['error_code']
if (code == '0'):
userMsg = json['error']['usermsg']
if (userMsg == '成功'):
print(user['name'] + " ---> " + "签到成功\n")
msg += user['name'] + "|" + "签到成功" + "\n\n"
else:
if (userMsg == "你签得太快了,先看看贴子再来签吧:)"):
print(user['name'] + " ---> " + "今日已签到" + "\n")
msg += user['name'] + "|" + "今日已签到" + "\n\n"
else:
print(user['name'] + " ---> " + userMsg+"\n")
msg += user['name'] + "|" + userMsg + "\n\n"
else:
errMsg = json['error_msg']
print(user['name'] + " ---> " + errMsg + "\n")
msg += user['name'] + "|" + errMsg + "\n\n"
print("-------------------------------------------\n")
main()
print("🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉")
notify.send("百度贴吧", msg)

View File

@@ -0,0 +1,75 @@
# Source: https://gitee.com/yangro/ql/blob/main/bak/bdtb.py
# Raw: https://gitee.com/yangro/ql/raw/main/bak/bdtb.py
# Repo: yangro/ql
# Path: bak/bdtb.py
# UploadedAt: 2023-10-25T14:45:53+08:00
# SHA256: 6343e8c273006584d3aca462016087152ecb29707ad13272b8100c0f652e1677
# Category: APP版/抓包
# Evidence: cookie/token/authorization/header
# coding=utf-8
"""
每日8:30
cron: 0 30 8 * * ?
new Env("百度贴吧")
"""
import requests
import utils.db as DB
import utils.tool as TOOL
global msg
msg = """
名称|状态
:--:|:--:
"""
mysql = DB.mysql()
def main():
dbUser = mysql.select_all("select * from tb_bdtb where status = 0")
print("🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉\n")
print("获取到: "+str(len(dbUser))+" 个用户")
print("-------------------------------------------")
for user in dbUser:
signIn(user)
# 签到
def signIn(user):
global msg
url = 'http://c.tieba.baidu.com/c/c/forum/msign'
data = user['cookie']
res = requests.post(url=url, data=data)
json = res.json()
code = json['error_code']
if (code == '0'):
userMsg = json['error']['usermsg']
if (userMsg == '成功'):
print(user['user_name'] + " ---> " + "签到成功\n")
msg += user['user_name'] + "|" + "签到成功" + "\n\n"
else:
if (userMsg == "你签得太快了,先看看贴子再来签吧:)"):
print(user['user_name'] + " ---> " + "今日已签到" +"\n")
msg += user['user_name'] + "|" + "今日已签到" + "\n\n"
else:
print(user['user_name'] + " ---> " + userMsg+"\n")
msg += user['user_name'] + "|" + userMsg + "\n\n"
else:
errMsg = json['error_msg']
print(user['user_name'] + " ---> " + errMsg +"\n")
msg += user['user_name'] + "|" + errMsg + "\n\n"
print("-------------------------------------------\n")
main()
# 一定要关闭数据库
print("🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉")
mysql.close()
TOOL.msgSend("d9ff2162c1584f6c834204b0bca56c54", " ", msg, True)

View File

@@ -0,0 +1,48 @@
// # Source: https://github.com/NaroisCool/naro-scripts/blob/master/%E8%9E%83%E8%9F%B9%E7%A7%9F%E5%8F%B7%E9%A1%B6%E4%B8%80%E9%A1%B6.js
// # Raw: https://raw.githubusercontent.com/NaroisCool/naro-scripts/master/%E8%9E%83%E8%9F%B9%E7%A7%9F%E5%8F%B7%E9%A1%B6%E4%B8%80%E9%A1%B6.js
// # Repo: NaroisCool/naro-scripts
// # Path: 螃蟹租号顶一顶.js
// # UploadedAt: 2025-10-28T05:54:28+08:00
// # SHA256: d226aa65a404bab483d61dbe95bb8088170487c349b8b982b5d7b11d006c33f2
// # Category: APP版/抓包
// # Evidence: cookie/token/authorization/header
//
/*
cron: 0 0 9 * * *
螃蟹租号顶一顶
*/
const axios = require('axios')
const notify = require('./sendNotify')
const header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0",
"Accept": "application/json, text/plain, */*",
"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
"Content-Type": "application/json;charset=utf-8",
"Authorization": process.env.pxtoken,
"LoginStatus": "true",
"x-fronend-tcpport": "5628657",
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-site"
}
const pids = [29217,113576]
const game_ids = [79,61]
for (pid of pids){
for (game_id of game_ids){
const payload = `{\"game_id\":${game_id},\"product_id\":${pid}}`
axios.post('https://api.pxb7.com/api/product/gore',payload,{headers:header} )
.then((res) => {
notify.sendNotify('螃蟹租号顶一顶',JSON.stringify(res.data))
console.log(res.data)
})
.catch((error) => {
console.error(error)
})
}
}