const profiles = [
{ token: "account_mid_v2=123xyzabcd_hi; account_id_v2=26XXXXX20; ltoken_v2=v2_CANARIAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX3406; ltmid_v2=123xyzabcd_hi; ltuid_v2=26XXXXX20;",
genshin: true,
honkai_star_rail: true,
honkai_3: false,
accountName: "HuTao" }
];
const discord_notify = true
const myDiscordID = "240000800000300040"
const discordWebhooks = [
"https://discord.com/api/webhooks/10xxxxxxxxxxxxxxx60/6aXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXnB",
"https://discord.com/api/webhooks/1050000000000000060/6aXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXnB"
];
/** The above is the config. Please refer to the instructions on https://github.com/canaria3406/hoyolab-auto-sign for configuration. **/
/** The following is the script code has been modified to be in 2 webhooks of 2 diffrent servers. Modified by @AureliusGemini . **/
const urlDict = {
Genshin: 'https://sg-hk4e-api.hoyolab.com/event/sol/sign?lang=en-us&act_id=e202102251931481',
Star_Rail: 'https://sg-public-api.hoyolab.com/event/luna/os/sign?lang=en-us&act_id=e202303301540311',
Honkai_3: 'https://sg-public-api.hoyolab.com/event/mani/sign?lang=en-us&act_id=e202110291205111'
};
async function main() {
const messages = await Promise.all(profiles.map(autoSignFunction));
const hoyolabResp = `${messages.join('\n\n')}`;
if (discord_notify && discordWebhooks.length > 0){
postWebhooks(hoyolabResp);
}
}
function discordPing() {
return myDiscordID ? `<@${myDiscordID}> ` : '';
}
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,
'Accept': 'application/json, text/plain, */*',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'x-rpc-app_version': '2.34.1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
'x-rpc-client_type': '4',
'Referer': 'https://act.hoyolab.com/',
'Origin': 'https://act.hoyolab.com'
};
const options = {
method: 'POST',
headers: header,
muteHttpExceptions: true,
};
let response = `Check-in completed for ${accountName}`;
const httpResponses = UrlFetchApp.fetchAll(urls.map(url => ({ url, ...options })));
for (const [i, hoyolabResponse] of httpResponses.entries()) {
const responseJson = JSON.parse(hoyolabResponse)
const checkInResult = responseJson.message;
const gameName = Object.keys(urlDict).find(key => urlDict[key] === urls[i])?.replace(/_/g, ' ');
const isError = checkInResult != "OK";
const bannedCheck = responseJson.data?.gt_result?.is_risk;
if (bannedCheck) {
response += `\n${gameName}: ${discordPing()} Auto check-in failed due to CAPTCHA blocking.`;
} else {
response += `\n${gameName}: ${isError ? discordPing() : ""}${checkInResult}`;
}
};
return response;
}
function postWebhook(data) {
let payload = JSON.stringify({
'username': 'auto-sign',
'avatar_url': 'https://i.imgur.com/LI1D4hP.png',
'content': data
});
const options = {
method: 'POST',
contentType: 'application/json',
payload: payload,
muteHttpExceptions: true
};
UrlFetchApp.fetch(discordWebhook, options);
}