米哈云游(云原神)自动签到脚本食用指南

本文已过期!最新的文档请参阅MHYY-AutoCheckin - 米哈云游(云原神)自动签到脚本食用指南(第二代)

如果你正在使用旧版的脚本,请更新到新版!

在指南开始之前,请确保你有一颗聪明的头脑和可以折腾的时间,否则请等时机合适再进行配置!

在使用过程中如果遇到什么问题,请前往Issues · GamerNoTitle/MHYY (github.com)发起新的issue来提出,不要在本页面的评论区提出问题(因为追踪性太差了)

对于正在使用本脚本的用户,请注意:每次云原神更新后(一般会跟着本体大版本更新就更一次),请把自己的配置中的version修改为最新的云原神版本,否则可能会出现不可预料的错误;并且请及时更新脚本,在自己的仓库点击Fetch upstream然后点击Merge即可!)

现在这个值是作为fallback值使用,只有当官方的版本号服务器不可用时才会用到这个值,所以有空就改,不改也可以

用前必读

⚠️请不要进行宣传,谢谢!一旦发现宣传就删库跑路!使用过程中如果出现bug可能会使用您的日志进行错误追踪,详情请见隐私政策

快速开始

先点个STAR,我们马上开始我们的教程:D

青龙面板

如果你选择使用青龙面板,那么你需要执行以下操作

首先点开订阅管理,把这个命令粘贴进去

1
ql repo http://gogs.console.bili33.top/GamerNoTitle/MHYY-AutoCheckin.git "main" "" ""

然后他会自动识别,并填入相应的内容,你只需要修改定时规则即可,名称按照自己需要修改

如果上面这个命令贴进去后因为网络原因(有可能我的gogs宕机了)或者其他原因拉取不了,可以改成下面这个

1
ql repo https://github.com/GamerNoTitle/MHYY.git "main" "" ""

优先还是建议用gogs的那个,谁知道啥时候Github就给我仓库封了呢~

保存以后点击运行按钮更新一下订阅

在定时任务中你就能找到刚刚更新的内容,但是还不能够使用,我们还需要配置依赖和环境变量

我们需要两个python3依赖,分别是requestssentry-sdk,如图填写并安装

然后点到环境变量,新建名为config的变量(可以改,请见青龙面板不使用config作为变量名)把我们的配置填进去,点击保存

配置应该如下(单个账号)

1
2
3
4
5
6
7
8
9
10
11
{
"token": "token1",
"type": 0,
"version": "3.0.0",
"android": "13",
"deviceid": "uuid",
"devicename": "device_name",
"devicemodel": "device_modal",
"appid": 1953439974,
"analytics": false
}

程序已经支持多个账号了,多个账号你需要按照下面这个格式填写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[
{
"token": "token1",
"type": 0,
"version": "3.0.0",
"android": "13",
"deviceid": "uuid",
"devicename": "device_name",
"devicemodel": "device_modal",
"appid": 1953439974,
"analytics": false
},
{
"token": "token2",
"type": 0,
"version": "3.0.0",
"android": "13",
"deviceid": "uuid",
"devicename": "device_name",
"devicemodel": "device_modal",
"appid": 1953439974,
"analytics": false
}
]

保存后你就可以在定时任务中运行试试看效果了~

青龙面板不使用config作为变量名

先点开脚本管理,找到你对MHYY-AutoCheckin的命名,然后打开它的文件夹,找到main.py文件,在大约23行的位置找到以下内容

1
2
# Running in Github Action, use this to get the config
config = json.loads(os.environ.get('config'))

把括号里的config改成你想要的名字,然后配置环境变量的时候就直接改成你配置的名字就可以了~

Github Action 版本

原仓库在2023/02/03收到Github通知封禁,镜像仓库在GamerNoTitle/MHYY: Disabled Action, if you need it, enable it by yourself (github.com),本项目仓库的Github Action已经被我手动禁用,如果需要使用Action版本,请将~/.github/workflows文件夹内的两个文件后面的.disabled删掉!

首先你需要先打开本脚本的仓库GamerNoTitle/MHYY: 米哈云游(云原神)自动签到脚本,让你每天都拿到15分钟~ (github.com),点击右上角的fork按钮,接着点击下面绿色的Create fork来创建一个分支

然后点击上面的Settings,导航到Secrets->Actions页面下,点击New repository secret(如图)

将以下内容进行填充后加入名字为config的Secret中(内容获取请参照配置内容获取一节)

1
2
3
4
5
6
7
8
9
10
11
{
"token": "",
"type": 0,
"version": "2.2.0",
"android": "0",
"deviceid": "",
"devicename": "",
"devicemodel": "",
"appid": 0,
"analytics": true
}

阿里云函数版本

首先你得先下载本仓库的代码文件,点击右上角绿色的Code,然后点击Download ZIP,把压缩包下载后解压到一个你知道的地方,我们一会会用到

先打开阿里云函数,点左边的函数服务,然后顶上选择地区,随便选(但是最好是国内)

点击创建服务来建立一个新的服务

紧接着创建一个新的函数,设置方法如下面几张图

创建后会自动打开阿里云函数的vscode,在这里,点击上面的Terminal,点击New Terminal(也可以直接快捷键Ctrl + Shift + `

打开以后在里面输入下面的命令

1
chmod +x ./preinstall.sh && ./preinstall.sh

运行完以后,打开config.json,把自己的配置内容填进去即可,然后点击部署代码

一定要先把配置丢进config.json再部署代码!一定要先把配置丢进config.json再部署代码!一定要先把配置丢进config.json再部署代码!

要是不确定能不能使用,可以点一下顶上的测试函数,看看能不能使用

腾讯云函数版本(不推荐,腾讯要收钱了,可以在阿里云函数使用,正常是不会用完你的免费额度的)

首先你得先下载本仓库的代码文件,点击右上角绿色的Code,然后点击Download ZIP,把压缩包下载后解压到一个你知道的地方,我们一会会用到

先打开腾讯云函数,点左边的函数服务,然后顶上选择地区,随便选(但是最好是国内)

点击新建来建立一个新的函数

函数的名称可以随便填,但是你也得符合腾讯云指定的规则;但是运行环境一定一定要选择Python 3.6(因为Python 3.7不带我们需要的环境,还需要自己装非常麻烦)

接着往下,提交方法选择本地上传文件夹,然后选择你刚刚解压的文件夹里面的SCF文件夹,接着重点来啦:执行方法里面填写为index.handler(一定要改)

接着点击下面的触发器配置,选择自定义创建,触发方式选择定时触发,触发周期选择每1天,下面的启用要打勾,点击完成

创建完成后进入配置界面,先点击顶上的函数配置,点击编辑,往下面拉找到初始化超时时间执行超时时间,把这两个数字往高了调

然后点击顶上的函数代码,等底下加载完后点击config.json,把你的信息填进去

然后打开终端,输入以下代码安装依赖

1
chmod +x ./preinstall.sh && ./preinstall.sh

一定要先把配置丢进config.json再部署代码!一定要先把配置丢进config.json再部署代码!一定要先把配置丢进config.json再部署代码!

往下拉,先点击部署,然后点测试,只要测试成功了就是部署完成了

其他云函数

其他的云函数有如下

用法其实跟阿里云函数腾讯云函数大差不差,看着用就行了,不会就开issue问

配置解释(配置内容获取

  • token 是在云原神登录后用于验证的token
  • type (应该)是设备类型,安卓好像是2,iOS设备用户是1但是目前还不支持iOS设备,请看这里
  • version 是云原神的版本(每次更新以后记得改一下,不然可能会出问题 不用改了,现在改成从官方服务器获取版本号)
  • android 安卓版本,例如我的红米K40的安卓版本是Android 12,就填入12,应该是只有Android有,因为手上只有Android设备,如果你愿意用iOS设备进行测试的话,请将相关内容发邮件到GamerNoTitle@outlook.com
  • deviceid 设备在米哈游注册的id(格式为UUID,例如d76fb4b4-b898-4093-990d-c57ebb40f29b
  • devicename 设备的名称
  • devicemodel 设备的型号(请注意:deviceid devicename devicemodel 尽量是同一台手机的内容,因为指不定那天米忽悠就对这三个东西进行校验了,当然你要用公共的我也不阻止对吧)
  • appid 暂时不清楚,从我目前手上各用户提交的统计信息来看,好像是云原神这个应用在米哈游的应用id(貌似不会变)
  • analytics 因为关于这个东西的信息太少,所以会把除了token以外的东西发送到我的云端服务器以便于分析,如果你不想分享你的信息(包括设备id、设备名称、设备型号等),请将这个设置为false

配置完成后,我们点开顶上的Actions,然后点绿色的那个按钮

然后点击左侧列表中的两个脚本,点Enable workflow来启用

然后我们点开左侧的AutoCheckin,然后点Run workflow来运行,只要运行结果打了绿色的勾勾就一般就没啥问题

自动保活

事实上,对于现版本的Github Action,只需要把KeepActionAlive打开即可,下面的这些操作是旧版本的Action所需要的

因为Github在仓库没有push三个月后会停用仓库的一切Action,所以说我们需要进行保活。

在启用KeepActionAlive之前,你需要创建一个用来push更改的GITHUB_TOKEN

右上角点击自己的头像,然后点击Settings,然后在左侧的导航栏找到Developer Settings

然后在左边找到Personal Access Tokens,点击Generate new token生成一个token,名字填写为GITHUB_TOKEN

把过期时间设置为No expiration,然后依次勾选下面内容

然后点最下面的绿色按钮Generate token即可

在Action页面启用KeppActionAlive即可!脚本会在每个月的1号自动推送更新从而达到保活的目的。

配置内容获取

因为云原神是在手机上运行的,所以你需要安装一个手机上的抓包软件(例如HttpCanary,或者如果你能够用fiddler电脑运行去抓也行)

一定要记得装抓包软件提供的证书,要不然解不了SSL连接,一定要先登录并成功进去了再启动抓包软件!!!

这里面只要是个HTTP链接,随便一个里面都有我们所需要的东西,这里我就点开了一个链接,在请求里面有所有我们需要的东西,而解释我都写在图片里面了

其中,这里面的东西与变量有如下的对应关系

1
2
3
4
5
6
7
8
9
10
11
{
"token": x-rpc-combo_token,
"type": x-rpc-client_type,
"version": x-rpc-app_version,
"android": x-rpc-sys_version,
"deviceid": x-rpc-device_id,
"devicename": x-rpc-device_name,
"devicemodel": x-rpc-device_model,
"appid": x-rpc-app_id,
"analytics": true
}

version不是必要的,在a4e5f06..7bd5d44 commit中,使用了米忽悠自己的api获取云原神的最新版本号,此处填写version只是作为获取不到最新版本号时的fallback值

对于token(应该说写作token念作cookie)由以下几部分组成:

  • ai 一个数值,具体含义未知
  • ci 一个数值,具体含义未知
  • oi 一个数值,推测是米游社ID
  • ct 一串字符,具体作用未知,推测为认证使用
  • si 一串字符,具体作用未知,推测为认证使用
  • bi 一串字符,推测为服务器通道

只要把对应的内容填到配置中即可!对于字符串类型的内容请使用双引号而不是单引号,json不认单引号(在错误收集中发现有此类现象,故特别提出)

请不定时自己上线米哈云游(云原神)来清理签到的提醒消息,不然会一直堆积着,就要点好多次了

堆积的信息可以在运行结果中查看

iOS设备用户须知

因为米忽悠在请求头中的cms-signature键中写了用了hmac-sha1加密方法,这种加密方法需要要加密的信息密钥,这两个东西我这边目前都不能确定(其实有要加密的信息就可以去猜密钥,但是目前不清楚是对什么进行了加密),而且在CONTENT-MD5中,还对请求的MD5进行了校验(这个好搞,主要是前面那个),最后还有一个时间Date的请求头(目前猜是发出请求的时间),总的来说就是不好搞,如果你手上是iOS设备,并且你愿意用iOS设备进行测试的话,请将相关内容发邮件到GamerNoTitle@outlook.com,最好是抓到的所有包都截图发一下(我好进行判断),并且抓多几次(感谢多玩幻灵qwq愿意与我共享他的抓包数据,这是我第一次收到iOS设备有关信息,谢谢你的共享:D)

已知iOS设备抓包会包含以下内容(以log获取为例)[感谢@多玩幻灵qwq在QQ给我提供的完整请求]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Host: log-upload.mihoyo.com
x-rpc-device_model: iPhone11,8 <表示iPhone的版本,可能会在新iPhone出来后变更,11,8表示从iPhone 11 ~ iPhone 8的设备(懒狗米忽悠)>
Cookie: account_id=<猜测是米游社ID>; cookie_token=<认证用的Token>; ltoken=<认证用的Token+1>; ltuid=<米游社ID+1,应该跟account_id是一样的>
User-Agent: %E4%BA%91%C2%B7%E5%8E%9F%E7%A5%9E/24 CFNetwork/1331.0.7 Darwin/21.4.0 (前面那里的URL解码后是"云·原神")
Referer: https://app.mihoyo.com
x-rpc-device_name: iPhone
cms-signature: hmac-sha1
Content-Length: <请求长度,暂时不知道怎么算的>
CONTENT-MD5: <MD5校验值,暂时不知道是拿什么东西算的MD5>
Date: <时间戳值,为请求发出时间>
x-rpc-combo_token: <格式同Android抓包得到的格式>
x-rpc-channel: appstore
x-rpc-app_version: <云原神版本>
Authorization: <身份认证Key,暂时不知道会不会变>
Accept-Language: zh-CN,zh-Hans;q=0.9
Connection: keep-alive
x-rpc-client_type: 1 <1表示iOS系列>
x-rpc-device_id: <设备ID,格式为UUID5>
Accept: */*
Content-Type: application/json
Accept-Encoding: gzip, deflate, br
x-rpc-sys_version: <iOS版本>

Q&A

青龙面板里面怎么用 (因仓库被封所以issue没了,请看青龙面板一节

使用Action版本,把配置写入config.json内,然后根据这个链接里面的做法对脚本进行小修改就可以用了

为什么要把信息作为统计数据发到统计服务器? 统计服务器已关闭,本条目已失效

因为我手头上的信息实在太少了,而且按照米忽悠的习惯,他们的数据如果没有庞大的数据量的话很难分析出一个所以然来,所以我这里需要大量的数据。如果你不想共享你的数据,请将配置中的analytics设置为false

SCF版本出现报错

报错内容为:wait_time = random(1, 300) # Random wait time TypeError: 'module' object is not callable

更新一下脚本就好了,在commit1665099已经修好了(感谢@Elletear发现这个问题并提交PR#5

KeepActionAlive运行失败(权限不足)

具体如图所示,这个要得益于昨天Github的一个更新GitHub Actions - Updating the default GITHUB_TOKEN permissions to read-only | GitHub Changelog

在仓库里面点击Settings => Actions => General,往下拉找到Workflow permissions,把原来的Read repository contents and packages permissions改为上面的Read and write permissions,然后点击下面的Save键就可以了

发现了bug/无法使用

请前往Issues · GamerNoTitle/MHYY (github.com)发起新的issue来提出,不要在本页面的评论区提出问题(因为追踪性太差了)