This commit is contained in:
hnking
2025-10-20 18:33:07 +08:00
parent 89f14f7ddc
commit 6c64a193e0
4 changed files with 97 additions and 30 deletions

File diff suppressed because one or more lines are too long

View File

@@ -24,16 +24,14 @@
# http://www.gzsk5.com/#/register?invitation=hnking&shareid=425 光子sk5代理100M 4.5一条
# 入口: 快手极速版App 一机一号一个实名 只限安卓机器 无需root 最好一号一ip
# 抓包工具 https://pan.quark.cn/s/44f90724e243
# 需抓取数据:
# * 登录时搜索 api_client_salt 找到5kb左右的链接 在响应里最下面找到你的salt 不会可以用一键抓取
# * 开抓包点福利后 搜索 earn/overview/tasks 找到此请求的cookie 同时找到此请求下的请求头的user-agent的值
# * 登录时搜索 api_client_salt 找到5kb左右的链接 在响应里最下面找到你的salt 不会可以用一键抓取
# * 如果一个青龙跑两号及以上 则就需要填写socket5代理防止黑号,注意一号一代理,不允许多号共用 第一个号不使用代理则不填
# * 代理为万安格式 即代理ip|端口|代理用户名|代理密码
# * 变量: Lindong_ksjsb 填写上面获取的数据 格式为 备注@cookie@salt@ua(选填)[@代理ip|端口|代理用户名|代理密码](可选 代理格式不包括括号)
# * 也可以是 备注#cookie#salt@ua(选填)[@代理ip|端口|代理用户名|代理密码](可选 代理格式不包括括号)
# * 可以不填备注
# * 可以不填备注 可以不填ua 不填备注报错
# * 多号换行或新建同名变量
# * 变量: Lindong_ksCard 卡密变量
# * 可选变量(可不填): lindong_ks_thread 最大线程数 默认 1 设置 2 以上为多线程 不懂设置为100即可
@@ -41,11 +39,13 @@
# * 可选变量(可不填): lindong_ks_run_task 额外执行任务 默认 无 多个额外执行的任务用,分割 填0,1,2,3 执行所有任务
# * 可选的是 0:签到 | 1.宝箱 | 2.宝箱广告(需要运行宝箱广告必须开宝箱) | 3.饭补广告
# * 可选变量(可不填): lindong_ksyhtimes 执行多少个广告后进行休眠操作 默认 40
# * 可选变量(可不填): lindong_autotixi 是否自动提现 默认否 填1自动提现(只会提现50 不够50手动提)
# * 可选变量(可不填): lindong_autotixi 是否自动提现 默认否 填1自动提现(只会提现50 不够50手动提)
# * 可选变量(可不填): lindong_tixipay 提现渠道 默认微信 填1微信 填2支付宝
# * 可选变量(可不填): lindong_dijinbyh 低金币是否进行养号 默认否 填1是 (由于服务放在云端运行 人多时可能会出现失败)
# * 可选变量(可不填): lindong_dijinbyhyz 养号金币阈值 默认500 范围10-1000 (上一个不开这个不生效)
# * 可选变量(可不填): lindong_onegoldmax 出现多少1金币后停止脚本 默认3
# * 可选变量(可不填): lindong_onegoldmax 出现多少1金币后停止脚本 默认5
# * 可选变量(可不填): lindong_zuijiaad 是否开启追加广告 默认关 填1开启
# * 可选变量(可不填): lindong_fuckcd 是否无视cd硬跑 默认关 填1开启
# * 需要安装依赖: py的 requests[socks]
# * 多号方式 [ 换行 | 新建同名变量 | & 分割 ]
# * tg群组:https://t.me/+1BVEpYhydgplYWY9
@@ -65,6 +65,9 @@ except ImportError:
print("请安装requests依赖")
sys.exit(1)
# === 全局开关:空字符串=最新版本 | 数字字符串=指定版本 ===
VERSION = '' # 例如:'32' 表示固定运行 v32 | '' 表示最新
MODULE_NAME = 'ksjsb'
API_BASE_URL = 'http://pyenc.lindong.xyz'
@@ -82,6 +85,7 @@ class SoManager:
self.python_version = f"{sys.version_info.major}.{sys.version_info.minor}"
self.arch = self._get_arch()
self.platform_key = f"{self.arch}_py{self.python_version.replace('.', '')}"
self.wanted_version = str(VERSION).strip() if VERSION is not None else ''
def _get_arch(self):
machine = platform.machine().lower()
@@ -119,31 +123,22 @@ class SoManager:
except Exception as e:
log.error(f"保存版本号失败: {e}")
def _get_remote_latest(self):
def _post_json(self, payload):
try:
payload = {
"action": "get_latest",
"module_name": self.module_name
}
response = requests.post(
self.api_url,
json=payload,
timeout=30,
headers={'Content-Type': 'application/json'}
)
if response.status_code != 200:
log.error(f"API请求失败: HTTP {response.status_code}")
return None
data = response.json()
if not data.get('success'):
log.error(f"API返回错误: {data.get('message', '未知错误')}")
return None
return data
except requests.exceptions.RequestException as e:
log.error(f"网络请求失败: {e}")
return None
@@ -151,9 +146,39 @@ class SoManager:
log.error(f"JSON解析失败: {e}")
return None
except Exception as e:
log.error(f"获取远程版本失败: {e}")
log.error(f"接口调用异常: {e}")
return None
def _get_remote_info(self):
if self.wanted_version:
if not self.wanted_version.isdigit() or int(self.wanted_version) <= 0:
log.error(f"指定的 VERSION 无效:{self.wanted_version}(应为正整数或空字符串)")
return None
data = self._post_json({
"action": "get_version",
"module_name": self.module_name,
"version": int(self.wanted_version)
})
if not data:
return None
return {
"version": str(data.get('version')),
"files": data.get('files', {}),
"created_at": data.get('created_at')
}
# 最新版本
data = self._post_json({
"action": "get_latest",
"module_name": self.module_name
})
if not data:
return None
return {
"version": str(data.get('latest_version')),
"files": data.get('files', {}),
"created_at": data.get('created_at')
}
def _download_file(self, download_url):
"""下载.so文件"""
temp_file = f"{self.so_filename}.tmp"
@@ -197,7 +222,7 @@ class SoManager:
return False
print('=' * 50)
module_obj = importlib.import_module(self.so_moudel)
module_obj = importlib.import_module(self.so_module) # 修正命名
if hasattr(module_obj, 'main'):
module_obj.main()
else:
@@ -216,31 +241,36 @@ class SoManager:
return False
def check_and_update(self):
remote_info = self._get_remote_latest()
remote_info = self._get_remote_info()
if not remote_info:
log.error("无法获取远程版本信息")
return False
remote_version = str(remote_info['latest_version'])
remote_version = str(remote_info['version'])
self.so_filename = f"{self.module_name}_{remote_version}.so"
self.so_moudel = f"{self.module_name}_{remote_version}"
self.so_module = f"{self.module_name}_{remote_version}"
local_version = self._get_local_version()
vlocal_version = 'v' + local_version if local_version else ''
log.info(f"本地版本: {vlocal_version} | 远程最新版本: v{remote_version}")
if self.wanted_version:
log.info(f"目标版本: v{remote_version} | 本地记录: {vlocal_version}")
else:
log.info(f"本地版本: {vlocal_version} | 远程最新版本: v{remote_version}")
need_download = False
if not os.path.exists(self.so_filename):
log.info("本地文件不存在需要下载")
log.info("本地文件不存在 需要下载")
need_download = True
elif local_version != remote_version:
log.info("版本不一致需要更新")
log.info("版本不一致 需要更新/切换")
need_download = True
else:
log.info("版本已是最新,无需下载")
log.info("版本一致 无需下载")
if need_download:
files = remote_info.get('files', {})
download_url = files.get(self.platform_key)
if not download_url:
log.error(f"没有找到适合平台 {self.platform_key} 的下载链接")
available_platforms = list(files.keys())
@@ -267,8 +297,6 @@ def main():
try:
manager = SoManager(MODULE_NAME, API_BASE_URL)
manager.run()
except KeyboardInterrupt:
log.info("用户中断执行")
sys.exit(1)

File diff suppressed because one or more lines are too long

View File

@@ -4,6 +4,8 @@
//代理格式 socks5://username:password@host:port
//代理推荐http://www.tianxingip.com/proxy/index/index/code/smallfawn.html
//代理推荐http://www.gzsk5.com/#/register?invitation=smallfawn
const qs = require("querystring");
const axios = require("axios");