首页
/ 米游社自动化签到系统:从技术实现到生产环境部署的全栈探索

米游社自动化签到系统:从技术实现到生产环境部署的全栈探索

2026-02-06 05:47:53作者:郁楠烈Hubert

签到系统的技术痛点与解决方案

在游戏社区生态中,每日签到作为维系用户活跃度的核心机制,却常常因重复操作、多账号管理和跨时区执行等问题成为玩家负担。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"

这种设计既满足普通用户的简单开关需求,又为高级用户提供细粒度控制能力。

任务调度与分布式部署

项目提供多种执行模式以适应不同场景:

  1. 单机定时任务:通过server.py实现本地周期性执行
  2. 容器化部署Dockerfiledocker-compose.yml支持快速容器化
  3. 集群调度kube/deployment.yaml提供Kubernetes部署配置
  4. 无服务器架构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

反检测策略与稳定性优化

为提高系统稳定性,项目在多个层面实施了反检测措施:

  1. 设备指纹管理tools.pyget_device_id()函数生成硬件特征
  2. 请求间隔控制:随机延迟避免触发频率限制
  3. 动态User-Agent:从配置文件读取并定期更新
  4. 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.arm32v7Dockerfile.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项目通过模块化设计、协议层适配和多环境支持,构建了一套成熟的游戏社区自动化解决方案。其核心价值在于:

  1. 工程实践:展示了Python自动化工具的最佳实践,包括配置管理、错误处理和版本兼容
  2. 反检测策略:实现了与官方API的和谐交互,平衡自动化效率与账号安全
  3. 部署灵活性:从单机到集群的全场景覆盖

未来版本可能在以下方向演进:

  • 基于机器学习的验证码自动识别
  • 更智能的任务调度算法
  • 社区内容互动的NLP支持

项目遵循MIT许可证,欢迎开发者参与贡献,共同完善这一自动化生态系统。

邮件通知示例

登录后查看全文
热门项目推荐
相关项目推荐