米游社自动化签到系统:从技术实现到生产环境部署的全栈探索
签到系统的技术痛点与解决方案
在游戏社区生态中,每日签到作为维系用户活跃度的核心机制,却常常因重复操作、多账号管理和跨时区执行等问题成为玩家负担。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许可证,欢迎开发者参与贡献,共同完善这一自动化生态系统。
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00