2
0
mirror of https://github.com/ctrlcvs/xiaoyao-cvs-plugin.git synced 2024-12-23 03:20:52 +08:00
xiaoyao-cvs-plugin/model/user.js
2022-08-16 23:27:43 +08:00

159 lines
4.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import YAML from 'yaml'
import chokidar from 'chokidar'
import MihoYoApi from "../model/mys/mihoyo-api.js"
import fs from 'node:fs'
import promiseRetry from 'promise-retry';
import lodash from 'lodash'
import gsCfg from './gsCfg.js';
import {
isV3
} from '../components/Changelog.js';
const _path = process.cwd();
const plugin = "xiaoyao-cvs-plugin"
const RETRY_OPTIONS = {
retries: 3,
minTimeout: 5000,
maxTimeout: 10000
};
const nameData=["原神","崩坏3","崩坏2","未定事件簿"];
/** 配置文件 */
export default class user {
constructor(e) {
this.e=e;
this.stokenPath=`./plugins/${plugin}/data/yaml/`
this.yunPath=`./plugins/${plugin}/data/yunToken/`;
this.getyunToken(this.e)
}
async getCkData(){
let sumData={};
await this.cookie(this.e)
this.miHoYoApi = new MihoYoApi(this.e);
let yunres = await promiseRetry((retry, number) => {
return this.miHoYoApi.logyunGenshen().catch((e) => {
return retry(e);
});
}, RETRY_OPTIONS);
let mysres = await promiseRetry((retry, number) => {
return this.miHoYoApi.getTasksList().catch((e) => {
return retry(e);
});
}, RETRY_OPTIONS);
let yundata = yunres.data
if(mysres.retcode===0){
sumData["米游社"]={
"米游币余额":mysres.data.total_points,
"今日剩余可获取":mysres.data.can_get_points
}
}
if(yunres.retcode===0){
sumData["云原神"]={
"今日可获取":yundata?.coin?.coin_num,
"免费时长":yundata?.free_time?.free_time,
"总时长":yundata.total_time
}
}
for(let name of nameData){
let resSign = await promiseRetry((retry, number) => {
return this.miHoYoApi.honkai3rdSignTask(name).catch((e) => {
return retry(e);
});
}, RETRY_OPTIONS);
if(resSign?.upData){
// console.log(resSign?.upData)
for(let item of resSign?.upData){
let num= lodash.random(0, 9999);
item.upName=item.upName=="原神"?"ys":item.upName=="崩坏3"?"bh3":item.upName=="崩坏2"?"bh2":item.upName=="未定事件簿"?"wdy":""
sumData[item.upName+""+num]={
"uid":item.game_uid,
"游戏昵称":item.nickname,
"等级":item.level,
"今日签到":item.is_sign?"已签到":"未签到"
}
}
}
}
return sumData;
}
getCookieMap(cookie) {
let cookiePattern = /^(\S+)=(\S+)$/;
let cookieArray = cookie.replace(/\s*/g, "").split(";");
let cookieMap = new Map();
for (let item of cookieArray) {
let entry = item.split("=");
if (!entry[0]) continue;
cookieMap.set(entry[0], entry[1]);
}
return cookieMap;
}
getyunToken(e) {
let file = `${this.yunPath}${e.user_id}.yaml`
try {
let ck = fs.readFileSync(file, 'utf-8')
ck = YAML.parse(ck)
this.e.devId = ck.devId;
this.e.yuntoken = ck.yuntoken;
return ck
} catch (error) {
return ""
}
}
async cookie(e) {
let {
cookie,
uid,skuid
} = await this.getCookie(e);
let cookiesDoc = await this.getcookiesDoc();
let miHoYoApi = new MihoYoApi(this.e);
if (!cookie) {
e.reply("cookie失效请重新绑定~【教程】\n" + cookiesDoc)
return false;
}
if (Object.keys((await miHoYoApi.getStoken(e.user_id))).length != 0) {
return true;
}
if (!cookie.includes("login_ticket") && (isV3 && !skuid?.login_ticket)) {
e.reply("米游社登录cookie不完整请前往米游社通行证处重新获取cookie~\ncookies必须包含login_ticket【教程】 " + cookiesDoc)
return false;
}
let flot = (await miHoYoApi.stoken(cookie, e));
// console.log(flot)
await utils.sleepAsync(1000); //延迟加载防止文件未生成
if (!flot) {
e.reply("登录失效请重新登录获取cookie发送机器人~")
return false;
}
return true;
}
async getcookiesDoc() {
return await gsCfg.getfileYaml(`${_path}/plugins/xiaoyao-cvs-plugin/config/`, "config").cookiesDoc
}
async getCookie(e) {
let skuid, cookie, uid
if (isV3) {
skuid = await gsCfg.getBingCookie(e.user_id);
cookie = skuid.ck;
uid = skuid.item;
} else {
if (NoteCookie[e.user_id]) {
cookie = NoteCookie[e.user_id].cookie;
uid = NoteCookie[e.user_id].uid;
skuid = NoteCookie[e.user_id];
} else if (BotConfig.dailyNote && BotConfig.dailyNote[e.user_id]) {
cookie = BotConfig.dailyNote[e.user_id].cookie;
uid = BotConfig.dailyNote[e.user_id].uid;
skuid = BotConfig.NoteCookie[e.user_id];
}
}
this.e.uid = uid;
this.e.cookie = cookie;
return {
cookie,
uid,
skuid
}
}
}