前言
本人入坑崩坏星穹铁道的国际服亚服,烦恼就此开始,虽然注册方便但耐不住天天找博丽灵梦接符卡签到,这点属实难受,正好赤月那边有台年费的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 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就好了
定时执行
如何定时执行呢?
如果您在使用宝塔面板
则在宝塔面板的计划任务中使用shell脚本
执行周期为每天,多少小时指的是几点
例如
每天 | 1小时 | 30分钟
则为
每天的1点30分执行
脚本内容为
同理1Panel也是一样的。