前言

本人入坑崩坏星穹铁道的国际服亚服,烦恼就此开始,虽然注册方便但耐不住天天找博丽灵梦接符卡签到,这点属实难受,正好赤月那边有台年费的US的VPS,正好整个脚本签到。

项目

https://github.com/Akatsuki-Misaki/SASO-Static-API/tree/main/Auto-Js/hoyolab

麻烦点个Star
谢谢大佬们

说明

HoyoLab自动签到,领崩坏星穹铁道、原神、崩坏三的签到奖励,本脚本仅适用于可使用node运行的自动化平台。

教程

本教程用服务器进行

先安装nodejs
由于她服务器用的是Ubuntu 20.04 LTS所以方便点

1
sudo apt install nodejs npm

然后找个随便找个路径新建文件夹(所谓工程)
然后拉node-fetch库

1
npm install node-fetch@2.6.1

然后编辑JS脚本

1
vim hoyolab.js

脚本内容为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
const fetch = require('node-fetch');

const profiles = [
{
token: "ltoken=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; ltuid=xxxxxx;",
genshin: false,
honkai_star_rail: true,
honkai_3: false,
accountName: "You Name"
}
];

const telegram_notify = true;
const myTelegramID = "1351xxxxxx";
const telegramBotToken = "";

const urlDict = {
Genshin: 'https://sg-hk4e-api.hoyolab.com/event/sol/sign?lang=zh-tw&act_id=e202102251931481',
Star_Rail: 'https://sg-public-api.hoyolab.com/event/luna/os/sign?lang=zh-tw&act_id=e202303301540311',
Honkai_3: 'https://sg-public-api.hoyolab.com/event/mani/sign?lang=zh-tw&act_id=e202110291205111'
};

function main() {
const messages = Promise.all(profiles.map(autoSignFunction));
messages.then((messages) => {
const hoyolabResp = `${messages.join('\n\n')}`;

if (telegram_notify === true) {
if (telegramBotToken && myTelegramID) {
postWebhook(hoyolabResp);
}
}
});
}

function autoSignFunction({ token, genshin, honkai_star_rail, honkai_3, accountName }) {
const urls = [];

if (genshin) urls.push(urlDict.Genshin);
if (honkai_star_rail) urls.push(urlDict.Star_Rail);
if (honkai_3) urls.push(urlDict.Honkai_3);

const header = {
Cookie: token
};

const options = {
method: 'POST',
headers: header
};

let response = `${accountName} 的自動簽到作業已完成`;

return Promise.all(
urls.map(url =>
fetch(url, options)
.then(response => response.json())
.then(jsonResponse => {
const checkInResult = jsonResponse.message;
const enGameName = Object.keys(urlDict).find(key => urlDict[key] === url);
let gameName;
switch (enGameName) {
case 'Genshin':
gameName = '原神';
break;
case 'Star_Rail':
gameName = '星穹鐵道';
break;
case 'Honkai_3':
gameName = '崩壞3rd';
break;
}
response += `\n${gameName}${checkInResult}`;
})
)
).then(() => response);
}

function postWebhook(data) {
const payload = JSON.stringify({
chat_id: myTelegramID,
text: data,
parse_mode: 'HTML'
});

const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: payload
};

fetch(`https://api.telegram.org/bot${telegramBotToken}/sendMessage`, options);
}

main();

Config设置

1
2
3
4
5
6
7
const profiles = [
{ token: "ltoken=gBxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxCY; ltuid=26XXXXX20;",
genshin: true,
honkai_star_rail: true,
honkai_3: false,
accountName: "You Name" }
];

如何获取Token

進入hoyolab签到页面後,按F12进入console,
粘贴以下代码取得token,请注意代码分段;,需要一并粘贴到”括号内”

1
2
3
4
5
6
7
8
9
10
11
12
13
function getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
}
let token = 'ltoken=' + getCookie('ltoken') + '; ltuid=' + getCookie('ltuid') + ';';
let ask = confirm(token + '\n\n按下确定复制,并将取得的token粘贴到JS脚本档案中');
if (ask == true) {
copy(token);
msg = token;
} else {
msg = 'Cancel';
}

TG通知设置

是否要进行Telegram的自动签到通知。若要进行自动签到通知则为true,若不要请填入false。

1
2
3
const telegram_notify = true
const myTelegramID = "1XXXXXXX0"
const telegramBotToken = "9XXXXXXXXX:AAAAAAAAAAXXXXXXXXXX8888888888Neko"

myTelegramID - 请填入您的 Telegram ID.

@IDBot 传送 /getid 指令以取得您的 Telegram ID,
你的 Telegram ID 看起来会像123456780,複制并填入”括号内”即可。

telegramBotToken - 请填入您的 Telegram Bot Token.

@BotFather 传送 /newbot 指令以建立新的 Telegram Bot。
当你建立 Telegram Bot 后,您会取得 Telegram Bot Token,看起来会像110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw
複制Token并填入”括号内”即可。
你可以参考此篇文章以获得更详细的说明。

范例 双帐号自动签到、进行 Telegram 通知
以帐号A进行原神自动签到、以帐号B进行崩坏3自动签到、进行 Telegram 通知

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const profiles = [
{
token: "ltoken=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; ltuid=xxxxxx;",
genshin: false,
honkai_star_rail: true,
honkai_3: false,
accountName: "A"
}
{
token: "ltoken=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; ltuid=xxxxxx;",
genshin: false,
honkai_star_rail: true,
honkai_3: false,
accountName: "B"
}
];

const telegram_notify = true;
const myTelegramID = "1351xxxxxx";
const telegramBotToken = "";

运行

编辑完成后运行js就好了

1
node hoyolab.js

定时执行

如何定时执行呢?
如果您在使用宝塔面板
则在宝塔面板的计划任务中使用shell脚本
执行周期为每天,多少小时指的是几点
例如
每天 | 1小时 | 30分钟
则为
每天的1点30分执行
脚本内容为

1
node /你的路径/hoyolab.js

同理1Panel也是一样的。