米游社自动化签到系统:从技术实现到生产环境部署的全栈探索
签到系统的技术痛点与解决方案
在游戏社区生态中,每日签到作为维系用户活跃度的核心机制,却常常因重复操作、多账号管理和跨时区执行等问题成为玩家负担。MihoyoBBSTools项目通过模块化设计与协议层优化,构建了一套高效可靠的自动化解决方案。本文将从开发者视角,深入剖析其技术架构与工程实践。
验证码挑战与动态签名机制
米游社API采用多层安全校验机制,其中动态签名(DS)和验证码系统是自动化签到的主要障碍。项目在tools.py中实现了两套签名算法:
def get_ds(web: bool) -> str:
# 移动端签名生成逻辑
t = str(int(time.time()))
r = str(random.randint(100000, 200000))
b = ""
q = "salt=" + (mihoyobbs_salt_web if web else mihoyobbs_salt) + "&t=" + t + "&r=" + r + "&b=" + b
return t + "," + r + "," + hashlib.md5(q.encode()).hexdigest()
该实现通过时间戳、随机数与设备指纹的组合,模拟官方客户端的签名生成过程。在验证码处理方面,gamecheckin.py中的重试机制展示了工程化思考:
for i in range(1, retries + 1):
if i > 1:
log.info(f'触发验证码,即将进行第 {i} 次重试,最多 {retries} 次')
# 请求与验证码处理逻辑
time.sleep(random.randint(6, 15)) # 随机延迟避免触发频率限制
多游戏架构设计与扩展性
项目采用策略模式实现多游戏签到支持,在gamecheckin.py中定义了抽象基类GameCheckin,并为各游戏实现具体签到逻辑:
class Genshin(GameCheckin):
def __init__(self) -> None:
super().__init__("hk4e_cn", "genshin", "原神", setting.genshin_act_id, "旅行者")
self.headers["Origin"] = "https://act.mihoyo.com"
self.headers["x-rpc-signgame"] = "hk4e"
self.init()
class Honkaisr(GameCheckin):
def __init__(self):
super().__init__("hkrpg_cn", "honkai_sr", "崩坏:星穹铁道", setting.honkai_sr_act_id, "开拓者")
self.headers["Origin"] = "https://act.mihoyo.com"
self.init()
这种设计使新增游戏支持仅需创建新的子类并配置相应参数,符合开闭原则。当前系统已支持原神、崩坏:星穹铁道、绝区零等6款游戏,通过run_task()函数统一调度:
games = [
("崩坏学园2", "honkai2", Honkai2),
("崩坏3rd", "honkai3rd", Honkai3rd),
("未定事件簿", "tears_of_themis", TearsOfThemis),
("原神", "genshin", Genshin),
("崩坏:星穹铁道", "honkai_sr", Honkaisr),
("绝区零", "zzz", ZZZ)
]
系统架构与核心模块解析
配置系统的演进与兼容性设计
项目配置系统经历了15个版本的迭代,在config.py中实现了平滑升级机制:
def config_v11_update(data: dict):
# 版本迁移逻辑示例
if "games" not in data:
data["games"] = {
"cn": {
"enable": True,
# 游戏配置默认值
}
}
当前配置文件(config.yaml.example)采用分层结构,支持多维度控制:
games:
cn:
enable: true
genshin:
checkin: true
black_list: []
honkai_sr:
checkin: false
os:
enable: false
lang: "en-us"
这种设计既满足普通用户的简单开关需求,又为高级用户提供细粒度控制能力。
任务调度与分布式部署
项目提供多种执行模式以适应不同场景:
- 单机定时任务:通过
server.py实现本地周期性执行 - 容器化部署:
Dockerfile与docker-compose.yml支持快速容器化 - 集群调度:
kube/deployment.yaml提供Kubernetes部署配置 - 无服务器架构:
index.py适配云函数环境
在Docker部署方案中,start.bash脚本实现了智能调度逻辑:
# 计算下次执行时间
next_run=$(python3 -c "from docker import next_run_time;print(next_run_time())")
echo "下次执行时间: $next_run"
# 设置定时任务
echo "$next_run /bin/bash /app/start.bash >> /app/logs/cron.log 2>&1" | crontab -
生产环境实践与最佳配置
多账号管理策略
针对家庭或团队使用场景,main_multi.py实现了多配置文件管理:
def get_config_list() -> list:
# 扫描config目录下所有配置文件
config_list = find_config('.yaml') + find_config('.yml')
# 青龙面板环境变量支持
if 'MIHOYO_CONFIG' in os.environ:
config_list.extend(os.environ['MIHOYO_CONFIG'].split('&'))
return config_list
配合docker-compose.yml的多实例配置,可以实现隔离部署:
services:
account1:
volumes:
- ./config/account1.yaml:/app/config/config.yaml
account2:
volumes:
- ./config/account2.yaml:/app/config/config.yaml
反检测策略与稳定性优化
为提高系统稳定性,项目在多个层面实施了反检测措施:
- 设备指纹管理:
tools.py的get_device_id()函数生成硬件特征 - 请求间隔控制:随机延迟避免触发频率限制
- 动态User-Agent:从配置文件读取并定期更新
- Cookie自动刷新:
login.py实现SToken自动更新机制
在gamecheckin.py中,针对429错误的处理展示了典型的稳定性优化:
if result.status_code == 429:
time.sleep(10) # 429同ip请求次数过多,尝试sleep10s进行解决
log.warning('429 Too Many Requests,即将进入下一次请求')
continue
监控告警与日志系统
项目集成了18种通知渠道(push.py),支持状态分类推送:
status_map = {
0: "「米游社脚本」执行成功!",
1: "「米游社脚本」执行失败!",
2: "「米游社脚本」部分账号执行失败!",
3: "「米游社脚本」社区/游戏道具签到触发验证码!"
}
配合loghelper.py的结构化日志,可实现远程监控与问题诊断。
部署指南与环境适配
源码部署流程
# 克隆仓库
git clone https://gitcode.com/gh_mirrors/mi/MihoyoBBSTools
cd MihoyoBBSTools
# 配置文件准备
cp config/config.yaml.example config/config.yaml
# 编辑配置文件设置Cookie等信息
nano config/config.yaml
# 安装依赖
pip install -r requirements.txt
# 执行签到
python main.py
容器化部署最佳实践
使用Docker Compose实现一键部署:
# 修改环境变量配置
cp .env.example .env
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
容器镜像支持多架构(Dockerfile.arm32v7、Dockerfile.arm64v8),可在树莓派等边缘设备运行。
云服务部署方案
对于长期运行需求,推荐使用Kubernetes部署:
kubectl apply -f kube/deployment.yaml
# 创建配置 secret
kubectl create secret generic mihoyo-config --from-file=config.yaml
高级功能与定制开发
自定义任务扩展
项目设计了灵活的任务扩展机制,通过dacapo_main.py支持外部任务集成:
task_config = self.dacapo_config.get("日常", {}).get("米游社", {})
checkin_list = task_config.get("米游社BBS", {}).get("签到版块列表", "")
开发者可通过配置文件定义自定义签到任务序列。
API协议分析与扩展
米游社API协议的解析是项目核心能力,setting.py维护了完整的API清单:
# 通用游戏签到API和设置
cn_game_checkin_rewards = f"{web_api}/event/luna/home?lang={cn_game_lang}"
cn_game_is_signurl = f"{web_api}/event/luna/info?lang={cn_game_lang}"
cn_game_sign_url = f"{web_api}/event/luna/sign"
通过分析这些端点的请求/响应格式,开发者可以扩展更多自动化能力。
总结与未来展望
MihoyoBBSTools项目通过模块化设计、协议层适配和多环境支持,构建了一套成熟的游戏社区自动化解决方案。其核心价值在于:
- 工程实践:展示了Python自动化工具的最佳实践,包括配置管理、错误处理和版本兼容
- 反检测策略:实现了与官方API的和谐交互,平衡自动化效率与账号安全
- 部署灵活性:从单机到集群的全场景覆盖
未来版本可能在以下方向演进:
- 基于机器学习的验证码自动识别
- 更智能的任务调度算法
- 社区内容互动的NLP支持
项目遵循MIT许可证,欢迎开发者参与贡献,共同完善这一自动化生态系统。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00