Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 98 additions & 25 deletions default.config.yaml
Original file line number Diff line number Diff line change
@@ -1,56 +1,129 @@
# ==========================================
# 修改时注意缩进 如果出现格式异常 可以用格式检查器
# ==========================================
Push:
# 推送方式
# 支持qmsg酱 server酱 企业微信推送 钉钉机器人推送
# Qmsg,Server,Epwc,Dingtalk,Wxhook
# 为空或False则不进行推送
PushMode: Qmsg
# 推送模式开关
# 可选值: Qmsg, Server, Epwc, Dingtalk, Wxhook
# 如果不需要推送,请保持为空或设置为 False
PushMode: ""

# Qmsg酱 (Qmsg)
Qmsg:
key: ""

# Server酱 (ServerChan)
Server:
key: "your server key"
key: ""

# 企业微信应用推送 (Enterprise WeChat)
Epwc:
EnterpriseId: ""
AppId: ""
AppSecret: ""
UserUid: ""

# 钉钉机器人 (Dingtalk)
Dingtalk:
token:
secret:
atuser:
token: ""
secret: ""
atuser: ""
atMobiles:
isAtAll: False

# 企业微信群机器人 (Wxhook)
Wxhook:
url: ""

# ==========================================
# 签到任务配置 (SignToken)
# ==========================================
SignToken:

# ----------------------------------------
# 好游快爆 (Hykb) - 已升级新版验证
# ----------------------------------------
# 获取方法:
# 1. 使用抓包工具(Reqable/Charles等)抓取 "huodong3.3839.com" 的POST请求 (如 ajax.php)
# 2. cookie: 在 Request Headers 中获取
# 3. scookie & device_id: 在 Request Body (Post Data) 中获取
# ----------------------------------------
Hykb:
switch: False
cookie:
# 账号 1
- switch: False # 开关:True/False
note: "账号1备注" # 备注名,用于日志区分
cookie: "" # HTTP请求头中的 Cookie
scookie: "" # POST数据中的 scookie (关键凭证, 代码会自动解码)
device_id: "" # POST数据中的 device (设备ID, 通常以kb开头)
# 可选配置:自定义数美设备ID (需要自己抓,如果找不到 就导出抓包文件,然后把后缀改名为txt,直接搜索smdeviceid)
smdeviceid: ""

# 账号 2 (如需更多账号,复制上方区块即可)
# - switch: False
# note: "账号2备注"
# cookie: "" # 可复用账号1的cookie
# scookie: "" # 必须填写该账号独立的 scookie
# device_id: "" # 必须填写该账号独立的 device

# ----------------------------------------
# MIUI 历史版本
# ----------------------------------------
MiUI:
switch: False
username:
password:
username: ""
password: ""

# ----------------------------------------
# 小黑盒 (XiaoHeiHe)
# ----------------------------------------
XiaoHeiHe:
switch: False
cookie:
imei:
heybox_id:
version:
cookie: ""
imei: ""
heybox_id: ""
version: ""

# ----------------------------------------
# 交易猫 (JiaoYiMao)
# ----------------------------------------
JiaoYiMao:
switch: False
cookie:
cookie: ""

# ----------------------------------------
# 天翼云盘 (Tyyp)
# ----------------------------------------
Tyyp:
switch: False
username:
password:
username: ""
password: ""

# ----------------------------------------
# 网易云游戏 (wyyyx)
# ----------------------------------------
wyyyx:
switch: False
cookie:
# 请在阿里云盘网页端输入后面代码获取:JSON.parse(localStorage.getItem("token")).refresh_token
cookie: ""

# ----------------------------------------
# 阿里云盘 (Aliyundrive)
# ----------------------------------------
# 获取方法:在网页端控制台输入 JSON.parse(localStorage.getItem("token")).refresh_token
Aliyundrive:
switch: False
token:
# 明日方舟配置 打开森空岛网页 登录账号, 打开https://web-api.skland.com/account/info/hg, 复制 content 的值
token: ""

# ----------------------------------------
# 明日方舟 (Arknights) - 森空岛
# ----------------------------------------
# 温馨提示 目前YJ用了加签算法.源代码已经不能用
# 访问 https://web-api.skland.com/account/info/hg 复制 content 字段的值
Arknights:
switch: False
token:
token: ""

# ----------------------------------------
# 雨云 (RainYun)
# ----------------------------------------
Raincloud:
switch: False
token: ""
152 changes: 121 additions & 31 deletions main.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import time, yaml, os
import os
import time
import yaml
import logging
import tempfile
from src.log import Log
from src.Push import Push
from src.Miui import Miui
Expand All @@ -7,64 +11,150 @@
from src.raincloud import RainCloud
from src.hykb import HaoYouKuaiBao
from src.arknights import Arknights
from src.Sign import XiaoHeiHe,JiaoYiMao,wyyyx
log = Log()
from src.Sign import XiaoHeiHe, JiaoYiMao, wyyyx

# 创建日志记录器
def setup_logger():
# 创建日志记录器
log = logging.getLogger("MainLogger")
log.setLevel(logging.INFO)

# 获取临时目录中的日志文件路径
log_directory = tempfile.gettempdir()
log_file = os.path.join(log_directory, 'app_log.txt')

# 设置日志输出格式
formatter = logging.Formatter('%(asctime)s [%(levelname)s]: %(message)s')

# 输出到文件
file_handler = logging.FileHandler(log_file, mode='a', encoding='utf-8')
file_handler.setFormatter(formatter)
log.addHandler(file_handler)

# 输出到控制台
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
log.addHandler(console_handler)

return log, log_file

# 获取配置
def getconfig():
path = os.path.dirname(os.path.realpath(__file__))
with open(f'{path}/config.yaml', 'r', encoding='utf-8') as f:
config = yaml.load(f, Loader=yaml.FullLoader)
return config

def run():
#开始时间
log, log_file = setup_logger() # 初始化日志
log.info("程序开始运行")
log.info(f"日志文件路径: {log_file}")

# 开始时间
Begin = time.time()
#程序主体
# 程序主体
config = getconfig()
SignToken = config['SignToken']
data = "今日签到结果:\n\n"
data = "今日签到结果: \n" # 使用 \n 进行换行

# miui历史版本签到
if SignToken['MiUI']['switch']:
if SignToken.get('MiUI', {}).get('switch'):
body = Miui(SignToken['MiUI'])
data += "MIUI历史版本:\n"+body.Sign()
if SignToken['Hykb']['switch']:
body = HaoYouKuaiBao(SignToken['Hykb'])
data += "\n\n好游快爆:\n"+ body.sgin()
if SignToken['XiaoHeiHe']['switch']:
result = body.Sign().replace("\n", "<br>")
log.info(f"MIUI签到结果: {result}")
data += "MIUI历史版本:\n" + result

# --------------------------------------------------------
# 好游快爆签到 (已修改为支持多账号列表遍历)
# --------------------------------------------------------
hykb_config = SignToken.get('Hykb')

# 兼容处理:如果是单个字典(旧配置),转为列表;如果是列表,直接使用
if isinstance(hykb_config, dict):
hykb_list = [hykb_config]
elif isinstance(hykb_config, list):
hykb_list = hykb_config
else:
hykb_list = []

# 遍历执行
hykb_results = ""
for index, user_config in enumerate(hykb_list):
if user_config.get('switch'):
note = user_config.get('note', f'账号{index+1}')
try:
log.info(f"正在运行好游快爆: {note}")
body = HaoYouKuaiBao(user_config)
# 注意:这里调用的是 sgin() 还是 sgin() 取决于你的 src/hykb.py 里的定义
# 假设原方法名是 sgin
res = body.sgin().replace("\n", "<br>")
log.info(f"好游快爆[{note}]签到结果: {res}")
hykb_results += f"【{note}】:<br>{res}<br>"
except Exception as e:
log.info(f"好游快爆[{note}]运行出错: {e}")
hykb_results += f"【{note}】: 运行出错<br>"

if hykb_results:
data += "\n\n好游快爆:\n" + hykb_results
# --------------------------------------------------------

if SignToken.get('XiaoHeiHe', {}).get('switch'):
body = XiaoHeiHe(SignToken)
data += "\n\n小黑盒:\n"+body.Sgin()
if SignToken['JiaoYiMao']['switch']:
result = body.Sgin().replace("\n", "<br>")
log.info(f"小黑盒签到结果: {result}")
data += "\n\n小黑盒:\n" + result

if SignToken.get('JiaoYiMao', {}).get('switch'):
body = JiaoYiMao(SignToken)
data += "\n\n交易猫:\n"+body.Sgin()
result = body.Sgin().replace("\n", "<br>")
log.info(f"交易猫签到结果: {result}")
data += "\n\n交易猫:\n" + result

# 天翼云盘签到
if SignToken['Tyyp']['switch']:
if SignToken.get('Tyyp', {}).get('switch'):
body = Cloud(SignToken['Tyyp'])
data += "\n天翼云盘:\n"+body.sgin()
if SignToken['wyyyx']['switch']:
result = body.sgin().replace("\n", "<br>")
log.info(f"天翼云盘签到结果: {result}")
data += "\n天翼云盘:\n" + result

if SignToken.get('wyyyx', {}).get('switch'):
body = wyyyx(SignToken)
data += "\n\n网易云游戏:\n"+body.Sgin()
result = body.Sgin().replace("\n", "<br>")
log.info(f"网易云游戏签到结果: {result}")
data += "\n\n网易云游戏:\n" + result

# 阿里云盘
if SignToken['Aliyundrive']['switch']:
if SignToken.get('Aliyundrive', {}).get('switch'):
body = Aliyundrive(SignToken['Aliyundrive'])
data += "\n\n阿里云盘:\n"+body.sgin()
result = body.sgin().replace("\n", "<br>")
log.info(f"阿里云盘签到结果: {result}")
data += "\n\n阿里云盘:\n" + result

# 雨云签到
if SignToken['Raincloud']['switch']:
if SignToken.get('Raincloud', {}).get('switch'):
body = RainCloud(SignToken['Raincloud'])
data += "\n\n雨云:\n"+body.sgin()
if SignToken['Arknights']['switch']:
result = body.sgin().replace("\n", "<br>")
log.info(f"雨云签到结果: {result}")
data += "\n\n雨云:\n" + result

if SignToken.get('Arknights', {}).get('switch'):
body = Arknights(SignToken['Arknights'])
data += "\n\n明日方舟:\n"+body.sgin()
result = body.sgin().replace("\n", "<br>")
log.info(f"明日方舟签到结果: {result}")
data += "\n\n明日方舟:\n" + result

# 结束时间
end = time.time()
sum = f"本次运行时间{round(end-Begin,3)}秒"
data = data + "\n\n" + sum
runtime_summary = f"本次运行时间: {round(end - Begin, 3)}秒"
log.info(runtime_summary)
data += "\n\n" + runtime_summary.replace("\n", "<br>")

# 推送消息
ts = Push(data,config['Push'])
ts = Push(data, config['Push'])
ts.push()

log.info(sum)
log.info("\n"+data)
log.info("签到完成,推送消息已发送")
log.info(f"完整签到结果:\n{data}")

if __name__ == '__main__':
run()
run()
Loading