const { exit } = require("process") const fs = require("fs") const { default: axios } = require("axios") const { log } = require("./logger") exports.ListNotificationURL = 'https://api-cloudgame.mihoyo.com/hk4e_cg_cn/gamer/api/listNotifications?is_sort=true&source=NotificationSourceUnknown&status=NotificationStatusUnread&type=NotificationTypePopup' exports.AckNotificationURL = 'https://api-cloudgame.mihoyo.com/hk4e_cg_cn/gamer/api/ackNotification' exports.WalletURL = 'https://api-cloudgame.mihoyo.com/hk4e_cg_cn/wallet/wallet/get?cost_method=COST_METHOD_UNSPECIFIED' exports.AnnouncementURL = 'https://api-cloudgame.mihoyo.com/hk4e_cg_cn/gamer/api/getAnnouncementInfo' // Here must be an earlier version so that the response won't be null exports.AppVersionURL = 'https://api-takumi.mihoyo.com/ptolemaios/api/getLatestRelease?app_id=1953443910&app_version=3.8.0&channel=mihoyo' exports.ListNotification = async function(header) { let tmp = (await axios(exports.ListNotificationURL,{ headers:header })).data; tmp.StringVersion = JSON.stringify(tmp); return tmp; } exports.AckNotification = async function(header, id) { let data = `{"id":"${id}"}`; await axios.post(exports.AckNotificationURL, data,{ headers:header }); } exports.Wallet = async function(header) { let tmp = (await axios(exports.WalletURL,{ headers:header })).data; tmp.StringVersion = JSON.stringify(tmp); return tmp; } exports.Announcement = async function(header) { let tmp = (await axios(exports.AnnouncementURL,{ headers:header })).data; tmp.StringVersion = JSON.stringify(tmp); return tmp; } exports.AppVersion = async function() { let tmp = (await axios(exports.AppVersionURL)).data; tmp.StringVersion = JSON.stringify(tmp); return tmp; } var configKeys = [ "token", "client_type", "device_name", "device_model", "sys_version", "channel" ] exports.getGlobalConfig = function() { try { var globalConfig = fs.readFileSync("global.json") } catch(e) { if(e.toString().includes("Error: ENOENT: no such file or directory")) { log.error(`读取配置失败!找不到全局配置文件`) } else { log.error(`读取配置失败!错误信息:${e}`); } exit() } return JSON.parse(globalConfig); } exports.getConfigs = function(){ try { var configsList = fs.readdirSync("configs") } catch(e) { if(e == "Error: ENOENT: no such file or directory, scandir 'configs'") { log.error(`读取配置失败!找不到configs文件夹`) } else { log.error(`读取配置失败!错误信息:${e}`); } exit() } log.info(`检测到${configsList.length}个配置文件:`) configsList.forEach(file => { log.info(`${file}`) }) var configs = {} configsList.forEach(file => { configs[file] = JSON.parse(fs.readFileSync(`configs/${file}`)) }) return configs } exports.checkConfigs = function(configs){ for(file in configs) { var configThis = configs[file]; for(key in configKeys) { if(configThis[configKeys[key]] == "" || configThis[configKeys[key]] == undefined || configThis[configKeys[key]] == null || configThis[configKeys[key]] == NaN) { log.error(`配置文件 ${file} 异常:`); log.error(` —— ${configKeys[key]}字段缺失`); } } } } exports.makeHeader = function(data,appversion){ return { "x-rpc-combo_token": data.token, "x-rpc-client_type": data.client_type, "x-rpc-app_version": appversion, "x-rpc-sys_version": data.sys_version, "x-rpc-channel": data.channel, "x-rpc-device_id": data.device_id, "x-rpc-device_name": data.device_name, "x-rpc-device_model": data.device_model, "x-rpc-app_id": 1953439974, "x-rpc-cg_game_biz": "hk4e_cn", "x-rpc-preview": 0, "x-rpc-op_biz": "clgm_cn", "x-rpc-language": "zh-cn", "x-rpc-vendor_id": 2, Referer: "https://app.mihoyo.com", Host: "api-cloudgame.mihoyo.com", Connection: "Keep-Alive", "Accept-Encoding": "gzip, deflate", Accept: "*/*", } } exports.SendLog = function(transporter,mailfrom,mailto,successNum,totalNum,content) { transporter.sendMail({ from: `"Genshin Cloud Game Helper" <${mailfrom}>`, //邮件来源 to: mailto, //邮件发送到哪里,多个邮箱使用逗号隔开 subject: `今日已签到${successNum}/${totalNum}名用户`, // 邮件主题 text: '', // 存文本类型的邮件正文 html: `${content}` // html类型的邮件正文 }, (error) => { if (error) { return console.log(error); } log.info("日志已丢出!") }); }