移除enka

This commit is contained in:
wangmiaowj 2022-11-22 12:25:37 +08:00
parent 4aa1c1121c
commit 28e522fea3
4 changed files with 152 additions and 537 deletions

View File

@ -18,7 +18,6 @@
"art-template": "^4.13.2",
"chalk": "^5.0.1",
"chokidar": "^3.5.3",
"enka-network-api": "^1.0.1",
"https-proxy-agent": "5.0.1",
"inquirer": "^8.2.4",
"lodash": "^4.17.21",

View File

@ -1,52 +0,0 @@
import plugin from '../../../lib/plugins/plugin.js'
import fetch from 'node-fetch'
import { segment } from "oicq";
import EnkaNetWork from '../model/enkaNetwork.js';
export class enka extends plugin {
constructor () {
super({
/** 功能名称 */
name: 'enka',
/** 功能描述 */
dsc: '查询角色橱柜的详细资料',
/** https://oicqjs.github.io/oicq/#events */
event: 'message',
/** 优先级,数字越小等级越高 */
priority: 5000,
rule: [
{
/** 命令正则匹配 */
reg: '^#角色面板(([1-9]{1}\\d{8}([1-9])?)|(\\d))?$',
/** 执行方法 */
fnc: 'enka'
},
{
/** 命令正则匹配 */
reg: '^#更新角色面板?$',
/** 执行方法 */
fnc: 'updateEnka'
}
]
})
}
async enka () {
let enka = new EnkaNetWork(this.e);
let {text,img} = await enka.getRoleDetail();
if(text){
this.e.reply(text)
}
if(img){
this.e.reply(img)
}
}
async updateEnka(){
let enka = new EnkaNetWork(this.e);
let {text,img} = await enka.getRoleDetail(true);
this.e.reply(text)
this.e.reply(img)
}
}

View File

@ -1,468 +0,0 @@
import moment from 'moment'
import lodash from 'lodash'
import base from './base.js'
import MysInfo from './mys/mysInfo.js'
import gsCfg from './gsCfg.js'
import { EnkaClient } from 'enka-network-api'
import puppeteer from '../../../lib/puppeteer/puppeteer.js'
import fs from 'node:fs'
import common from '../../../lib/common/common.js'
if (!fs.existsSync('./data/enkaNetwork/')) {
fs.mkdirSync('./data/enkaNetwork/')
}
export default class EnkaNetWork extends base {
constructor (e) {
super(e)
this.model = 'enkaNetwork'
this.urlKey = `${this.prefix}url:`
this.uidKey = `Yz:genshin:enka:qq-uid:${this.userId}`
this.path = `./data/enkaNetwork/${this.e.user_id}/`
this.uid
this.cached = false
}
/**
*
* @param updateData 用于更新json数据的标记
* @returns
*/
async getRoleDetail(updateData = false){
let {uid, index} = await this.getParameter()
if(index > 7 || index < 0){
this.e.reply(`请别开玩笑!角色橱柜怎么可能会有第${index + 1}个角色`)
return {}
}
this.uid = uid
let user
if(!updateData){
user = await this.readJson()//读取本地json
if (typeof(user)==='undefined'){
//没有本地缓存的json
try {
user = await this.getEnkaUserData()
} catch (error) {
logger.error(error.message)
this.replyException(error)
return{}
}
}
}else{
try {
this.e.reply("更新角色面板中")
user = await this.getEnkaUserData()
} catch (error) {
logger.error(error.message)
this.replyException(error)
return{}
}
}
let {text, roleData} = await this.getRoleData(user,index);
if(!text&&!roleData){
return{}
}
let data ={
saveId: this.uid,
uid: this.uid,
name: this.e.sender.card.replace(this.uid, '').trim(),
user_id: this.e.user_id,
roleData,
updateTime: user.updateTime,
bg: lodash.random(1, 3),
...this.screenData
}
let img = await puppeteer.screenshot('enkaNetwork', data)
return {text, img}
}
async getParameter(){
let uid = this.e.msg.substring(5, this.e.msg.length);
let index = 1;//默认取角色橱柜的第一个角色
if(typeof(uid) === 'undefined' || uid === ''){
uid = await MysInfo.getUid(this.e)//如果用户没绑uid或者ck由该模块自己抛出未绑定uid的信息
}else {
//有携带参数
//判断取到的这个uid是否是正常uid还是指示要分析角色的序号数字
let regex = /([1-9]{1}\d{8}([1-9])?)|(\d)/ //参数只能用1个数字(指定查询第几个角色)9个数字(指定uid并查询第一个角色)10个数字(同时指定uid和第几个角色)
if(regex.test(uid)) {
if(uid.length == 1){
//使用该用户当前绑定的uid查询指定的第几个角色
index = parseInt(uid);
uid = await MysInfo.getUid(this.e)//取用户当前uid,如果用户没绑uid或者ck由该模块自己抛出未绑定uid的信息
}else if(uid.length == 10){
//使用指定的uid查询第几个角色
index = parseInt(uid.substring(9,10))
uid = uid.substring(0,9)
}else{
this.e.reply("未输入角色序号,默认橱窗第一位!")
}
//上面的if都未命中则是uid
}else {
uid = await MysInfo.getUid(this.e)//非法参数取用户当前uid,如果用户没绑uid或者ck由该模块自己抛出未绑定uid的信息
}
}
index--
return {uid, index}
}
async getRoleData(user,index){
let text,roleData
let data = user.data
if(typeof(data.playerInfo) === 'undefined'){
text = '该uid不存在'
}else if (typeof(data.avatarInfoList) != 'undefined' && data.avatarInfoList.length > 0) {
if(data.avatarInfoList.length - 1 < index){
this.e.reply(`该uid的角色橱展示了${data.avatarInfoList.length}个角色,你输入的序号已超过当前展示数量`)
return{}
}
text = '目前已获取的角色卡有:'
for (const i in data.avatarInfoList) {
if (Object.hasOwnProperty.call(data.avatarInfoList, i)) {
const avatar = data.avatarInfoList[i];
let avatarName = gsCfg.roleIdToName(avatar.avatarId)
text += `[${parseInt(i)+1}${avatarName} ]`
if(index == i){
roleData = avatar
roleData.uid = this.uid
roleData.avatarName = avatarName
roleData.playerName = data.playerInfo.nickname
roleData.element = gsCfg.getElementByRoleName(avatarName)
roleData.talents = []
//处理角色各属性数据
roleData.showProp = this.handleProp(roleData)
//已激活的命座数量
if(typeof(roleData.talentIdList) === "undefined"){
roleData.talentSize = 0
roleData.talents = [{},{},{},{},{},{}]
}else{
roleData.talentSize = roleData.talentIdList.length
//处理命座
for (var j=0; j<6; j++) {
if (j < roleData.talentSize) {
const talentId = roleData.talentIdList[j];
let talent = gsCfg.getRoleTalentByTalentId(talentId)
await this.cacheIcon(talent.icon)
roleData.talents.push(talent)
}else{
roleData.talents.push({})
}
}
}
roleData.artifacts = []
for (const j in avatar.equipList) {
if (Object.hasOwnProperty.call(avatar.equipList, j)) {
const equip = avatar.equipList[j];
if(typeof(equip.weapon)!=='undefined'){
//处理武器
roleData.weaponData = await this.handleWeapon(equip)
}else{
//圣遗物
roleData.artifacts.push(await this.handleArtifact(equip))
}
}
}
//技能
let tmp ={}
for(const key in avatar.skillLevelMap){
let skillData = gsCfg.getSkillDataByskillId(key,avatarName)
await this.cacheIcon(skillData.icon)
let exLevel = 0
if(skillData.name.includes('普通攻击')){
tmp.a = {skillId: key, level: avatar.skillLevelMap[key], exLvl: exLevel, ...skillData}
}else if(!tmp.e){
if(typeof(avatar.proudSkillExtraLevelMap)!== 'undefined' && Object.keys(avatar.proudSkillExtraLevelMap).length>0){
//命座加成的额外元素战技等级
exLevel = 3
}
tmp.e = {skillId: key,level: avatar.skillLevelMap[key],exLvl: exLevel,...skillData}
}else if(!tmp.q){
if(typeof(avatar.proudSkillExtraLevelMap)!== 'undefined' && Object.keys(avatar.proudSkillExtraLevelMap).length>0){
//命座加成的额外元素爆发等级
exLevel = 3
}
tmp.q = {skillId: key, level: avatar.skillLevelMap[key], exLvl: exLevel, ...skillData}
}
}
avatar.skillLevelMap = Object.assign(avatar.skillLevelMap,tmp)
}
}
}
for (const i in data.playerInfo.showAvatarInfoList) {
if (Object.hasOwnProperty.call(data.playerInfo.showAvatarInfoList, i)) {
const avatarInfo = data.playerInfo.showAvatarInfoList[i];
if(avatarInfo.avatarId === roleData.avatarId){
roleData.avatarLevel = avatarInfo.level
break
}
}
}
}else{
this.e.reply('该uid未开放角色详情')
}
return {text, roleData}
}
async getEnkaUserData(){
let client = new EnkaClient(4000)
let user = await client.fetchUser(parseInt(this.uid));
user.updateTime = this.dateFormat(new Date(),"yyyy-MM-dd HH:mm:ss")
this.writeJson(user)
return user
}
creatFile () {
if (!fs.existsSync(this.path)) {
fs.mkdirSync(this.path)
}
if (!this.uid) return
let file = `${this.path}${this.uid}/`
if (!fs.existsSync(file)) {
fs.mkdirSync(file)
}
}
writeJson (data) {
this.creatFile()
let file = `${this.path}${this.uid}/__data.json`
fs.writeFileSync(file, JSON.stringify(data, '', '\t'))
}
readJson () {
let enkaJson
let file = `${this.path}/${this.uid}/__data.json`
if (fs.existsSync(file)) {
// 获取本地数据 进行数据合并
enkaJson = JSON.parse(fs.readFileSync(file, 'utf8'))
}
return enkaJson
}
replyException(error){
let uidNotFoundRegex = /User with uid \d+ was not found./
let requestAbortedRegex = /The user aborted a request/
if(uidNotFoundRegex.test(error.message)){
this.e.reply(`找不到uid${this.uid}的任何信息`)
}else if(requestAbortedRegex.test(error.message)){
this.e.reply("请求过于频繁请30分钟后再试")
}else{
this.e.reply(error.message)
}
}
async cacheIcon(name){
if(!fs.existsSync(`data/enkaNetwork/cache/icon/${name}.png`)){
//如果图标没有缓存先缓存到本地
if(!this.cached){
this.cached = true
this.e.reply('云崽正在缓存素材中,时间稍微有点长,请耐心等待')
}
let param = {
method: 'get',
headers: {
referer: `https://enka.network/u/${this.uid}`,
accept: "image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8",
"sec-ch-ua": 'Microsoft Edge";v="105", "Not)A;Brand";v="8", "Chromium";v="105',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "Windows",
"sec-fetch-dest": "image",
"sec-fetch-mode": "no-cors",
"sec-fetch-site": "same-origin",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.27"
}
}
await common.downFile(`http://enka.network/ui/${name}.png`,`./data/enkaNetwork/cache/icon/${name}.png`,param)
}
}
/**
* 1:HP白字
2:HP绿字
4:ATK白字
5:ATK绿字-整数
6:ATK绿字-百分比
7:防御白字
8:防御绿字
20:暴击率
21:未知估计是暴击率绿字的占位符
22:爆伤
23:充能
26:治疗加成
27:未知
28:未知
29:未知
30:物理伤害加成
40:火伤加成百分比
41:雷伤加成百分比
42:水伤加成百分比
43:草伤加成百分比
44:风伤加成百分比
45:岩伤加成百分比
46:冰伤加成百分比
50:火元素抗性
51:雷元素抗性
52:水元素抗性
53:草元素抗性
54:风元素抗性
55:岩元素抗性
56:冰元素抗性
76:未知
1006:总充能
1010:总HP
2000:总HP
2001:总攻击
2002:总防御
2003:未知
*/
handleProp(roleData){
let fightPropMap = roleData.fightPropMap
let showProp = []
showProp.push(this.getPropObj(roleData,"生命值上限","1010","1","2"))//HP
showProp.push({
name: "攻击力",
sum: fightPropMap["2001"].toFixed(),
white: fightPropMap["4"].toFixed(),
green: (fightPropMap["5"] + fightPropMap["4"] * (fightPropMap["6"] ? fightPropMap["6"] : 0)).toFixed()}
)//ATK
showProp.push(this.getPropObj(roleData,"防御力","2002","7","8"))//防御力
showProp.push(this.getPropObj(roleData,"元素精通","28"))//元素精通
showProp.push({
name: "暴击率",
sum: (fightPropMap["20"]*100).toFixed(1) + "%"
})
showProp.push({
name:"暴击伤害",
sum: (fightPropMap["22"]*100).toFixed(1) + "%"
})
showProp.push({
name:"元素充能效率",
sum: (fightPropMap["23"]*100).toFixed(1) + "%"
})
if(fightPropMap["26"]){
showProp.push({
name:"治疗加成",
sum: (fightPropMap["26"]*100).toFixed(1) + "%"
})
}
if(fightPropMap["30"]){
showProp.push({
name:"物理伤害加成",
sum: (fightPropMap["30"]*100).toFixed(1) + "%"
})
}
if(roleData.element === '火' && fightPropMap["40"]){
showProp.push({
name:"火元素伤害加成",
sum: (fightPropMap["40"]*100).toFixed(1) + "%"
})
}
if(roleData.element === '雷' && fightPropMap["41"]){
showProp.push({
name:"雷元素伤害加成",
sum: (fightPropMap["41"]*100).toFixed(1) + "%"
})
}
if(roleData.element === '水' && fightPropMap["42"]){
showProp.push({
name:"水元素伤害加成",
sum: (fightPropMap["42"]*100).toFixed(1) + "%"
})
}
if(roleData.element === '草' && fightPropMap["43"]){
showProp.push({
name:"草元素伤害加成",
sum: (fightPropMap["43"]*100).toFixed(1) + "%"
})
}
if(roleData.element === '风' && fightPropMap["44"]){
showProp.push({
name:"风元素伤害加成",
sum: (fightPropMap["44"]*100).toFixed(1) + "%"
})
}
if(roleData.element === '岩' && fightPropMap["45"]){
showProp.push({
name:"岩元素伤害加成",
sum: (fightPropMap["45"]*100).toFixed(1) + "%"
})
}
if(roleData.element === '冰' && fightPropMap["46"]){
showProp.push({
name:"冰元素伤害加成",
sum: (fightPropMap["46"]*100).toFixed(1) + "%"
})
}
return showProp
}
getPropObj(roleData,name,sumKey,whiteKey,greenKey){
let prop = {}
prop.name = name
prop.sum = roleData.fightPropMap[sumKey].toFixed()//银行家舍入法
if(whiteKey){
prop.white = roleData.fightPropMap[whiteKey].toFixed()
}
if(greenKey){
if(roleData.fightPropMap[greenKey]){
prop.green = roleData.fightPropMap[greenKey].toFixed()
}else{
prop.green = 0
}
}
return prop
}
async handleArtifact(equip){
let artifact = {}
artifact.icon = equip.flat.icon
await this.cacheIcon(artifact.icon)//缓存图标
artifact.mainPropName = gsCfg.fightPropIdToName(equip.flat.reliquaryMainstat.mainPropId)
artifact.mainPropVal = equip.flat.reliquaryMainstat.statValue
artifact.level = equip.reliquary.level - 1//圣遗物等级
artifact.starLevelArray = []//圣遗物星级,用于循环星星
for(var i = 0;i < equip.flat.rankLevel;i++){
artifact.starLevelArray.push(i)
}
artifact.subProps = []
for (const key in equip.flat.reliquarySubstats) {
if (Object.hasOwnProperty.call(equip.flat.reliquarySubstats, key)) {
const substate = equip.flat.reliquarySubstats[key];
artifact.subProps.push({
name:gsCfg.fightPropIdToName(substate.appendPropId),
val:substate.statValue
})
}
}
return artifact
}
async handleWeapon(equip){
let weaponData = gsCfg.getWeaponDataByWeaponHash(equip.flat.nameTextMapHash)
await this.cacheIcon(weaponData.icon)//缓存图标
weaponData.rankLvlArray = []//星级,用于循环生成星星
weaponData.level = equip.weapon.level//等级
weaponData.affix = equip.weapon.affix//精炼
for(var i = 0;i < equip.flat.rankLevel;i++){
weaponData.rankLvlArray.push(i)
}
for(const key in equip.weapon.affixMap){
weaponData.affix = equip.weapon.affixMap[key] + 1//精炼等级
}
for (const i in equip.flat.weaponStats) {
if (Object.hasOwnProperty.call(equip.flat.weaponStats, i)) {
const weaponState = equip.flat.weaponStats[i];
weaponState.appendPropName = gsCfg.fightPropIdToName(weaponState.appendPropId)
}
}
weaponData.weaponStats = equip.flat.weaponStats
return weaponData
}
dateFormat (date,fmt) {
var o = {
"M+": date.getMonth() + 1, //月份
"d+": date.getDate(), //日
"H+": date.getHours(), //小时
"m+": date.getMinutes(), //分
"s+": date.getSeconds(), //秒
"q+": Math.floor((date.getMonth() + 3) / 3), //季度
"S": date.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
}

View File

@ -1,5 +1,10 @@
lockfileVersion: 5.4
patchedDependencies:
oicq@2.3.1:
hash: yxoebqbnnwotwbrdlrfgidvncy
path: patches/oicq@2.3.1.patch
importers:
.:
@ -7,7 +12,6 @@ importers:
art-template: ^4.13.2
chalk: ^5.0.1
chokidar: ^3.5.3
enka-network-api: git+https://github.com/yuko1101/enka-network-api.git
eslint: ^8.18.0
eslint-config-standard: ^17.0.0
eslint-plugin-import: ^2.26.0
@ -25,6 +29,7 @@ importers:
node-schedule: ^2.1.0
node-xlsx: ^0.21.0
oicq: ^2.3.1
patch-package: ^6.5.0
pm2: ^5.2.0
puppeteer: ^13.7.0
redis: ^4.1.0
@ -33,7 +38,6 @@ importers:
art-template: 4.13.2
chalk: 5.0.1
chokidar: 3.5.3
enka-network-api: github.com/yuko1101/enka-network-api/b253879ba9c7d7a548772937e515133c61a42ae4
https-proxy-agent: 5.0.1
inquirer: 8.2.4
lodash: 4.17.21
@ -43,7 +47,8 @@ importers:
node-fetch: 3.2.6
node-schedule: 2.1.0
node-xlsx: 0.21.0
oicq: 2.3.1
oicq: 2.3.1_yxoebqbnnwotwbrdlrfgidvncy
patch-package: 6.5.0
pm2: 5.2.0
puppeteer: 13.7.0
redis: 4.1.0
@ -255,6 +260,10 @@ packages:
dev: false
optional: true
/@yarnpkg/lockfile/1.1.0:
resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==}
dev: false
/accepts/1.3.8:
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
engines: {node: '>= 0.6'}
@ -616,6 +625,10 @@ packages:
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
dev: false
/ci-info/2.0.0:
resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
dev: false
/clean-css/4.2.4:
resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==}
engines: {node: '>= 4.0'}
@ -748,6 +761,17 @@ packages:
- encoding
dev: false
/cross-spawn/6.0.5:
resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==}
engines: {node: '>=4.8'}
dependencies:
nice-try: 1.0.5
path-key: 2.0.1
semver: 5.7.1
shebang-command: 1.2.0
which: 1.3.1
dev: false
/cross-spawn/7.0.3:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
engines: {node: '>= 8'}
@ -1396,6 +1420,12 @@ packages:
path-exists: 4.0.0
dev: false
/find-yarn-workspace-root/2.0.0:
resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==}
dependencies:
micromatch: 4.0.5
dev: false
/flat-cache/3.0.4:
resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
engines: {node: ^10.12.0 || >=12.0.0}
@ -1463,6 +1493,15 @@ packages:
universalify: 2.0.0
dev: false
/fs-extra/7.0.1:
resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
engines: {node: '>=6 <7 || >=8'}
dependencies:
graceful-fs: 4.2.10
jsonfile: 4.0.0
universalify: 0.1.2
dev: false
/fs-extra/8.1.0:
resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
engines: {node: '>=6 <7 || >=8'}
@ -1791,6 +1830,13 @@ packages:
engines: {node: '>= 0.4'}
dev: true
/is-ci/2.0.0:
resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==}
hasBin: true
dependencies:
ci-info: 2.0.0
dev: false
/is-core-module/2.9.0:
resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==}
dependencies:
@ -1803,6 +1849,12 @@ packages:
has-tostringtag: 1.0.0
dev: true
/is-docker/2.2.1:
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
engines: {node: '>=8'}
hasBin: true
dev: false
/is-extglob/2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
@ -1891,13 +1943,19 @@ packages:
call-bind: 1.0.2
dev: true
/is-wsl/2.2.0:
resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
engines: {node: '>=8'}
dependencies:
is-docker: 2.2.1
dev: false
/isarray/0.0.1:
resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
dev: false
/isexe/2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
dev: true
/js-git/0.7.8:
resolution: {integrity: sha512-+E5ZH/HeRnoc/LW0AmAyhU+mNcWBzAKE+30+IDMLSLbbK+Tdt02AdkOKq9u15rlJsDEGFqtgckc8ZM59LhhiUA==}
@ -1952,6 +2010,12 @@ packages:
graceful-fs: 4.2.10
dev: false
/klaw-sync/6.0.0:
resolution: {integrity: sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==}
dependencies:
graceful-fs: 4.2.10
dev: false
/lazy/1.0.11:
resolution: {integrity: sha512-Y+CjUfLmIpoUCCRl0ub4smrYtGGr5AOa2AKOaWelGHOGz33X/Y/KizefGqbkwfz44+cnq/+9habclf8vOmu2LA==}
engines: {node: '>=0.2.0'}
@ -2074,6 +2138,14 @@ packages:
engines: {node: '>= 0.6'}
dev: true
/micromatch/4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
engines: {node: '>=8.6'}
dependencies:
braces: 3.0.2
picomatch: 2.3.1
dev: false
/mime-db/1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
@ -2102,7 +2174,6 @@ packages:
/minimist/1.2.6:
resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==}
dev: true
/mkdirp-classic/0.5.3:
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
@ -2173,6 +2244,10 @@ packages:
engines: {node: '>= 0.4.0'}
dev: false
/nice-try/1.0.5:
resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
dev: false
/no-case/2.3.2:
resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==}
dependencies:
@ -2261,7 +2336,7 @@ packages:
es-abstract: 1.20.1
dev: true
/oicq/2.3.1:
/oicq/2.3.1_yxoebqbnnwotwbrdlrfgidvncy:
resolution: {integrity: sha512-mRw/GgdRKFMylnrlnnywzCIwvad6fF5E4WZfIlval070wEc3w9yMV49i9epFltWkU/JGNMDS4t5wWdZEYzW0EQ==}
engines: {node: '>= v14'}
dependencies:
@ -2274,6 +2349,7 @@ packages:
- debug
- supports-color
dev: false
patched: true
/on-finished/2.4.1:
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
@ -2294,6 +2370,14 @@ packages:
mimic-fn: 2.1.0
dev: false
/open/7.4.2:
resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==}
engines: {node: '>=8'}
dependencies:
is-docker: 2.2.1
is-wsl: 2.2.0
dev: false
/optionator/0.8.3:
resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==}
engines: {node: '>= 0.8.0'}
@ -2422,6 +2506,27 @@ packages:
engines: {node: '>= 0.8'}
dev: true
/patch-package/6.5.0:
resolution: {integrity: sha512-tC3EqJmo74yKqfsMzELaFwxOAu6FH6t+FzFOsnWAuARm7/n2xB5AOeOueE221eM9gtMuIKMKpF9tBy/X2mNP0Q==}
engines: {node: '>=10', npm: '>5'}
hasBin: true
dependencies:
'@yarnpkg/lockfile': 1.1.0
chalk: 4.1.2
cross-spawn: 6.0.5
find-yarn-workspace-root: 2.0.0
fs-extra: 7.0.1
is-ci: 2.0.0
klaw-sync: 6.0.0
minimist: 1.2.6
open: 7.4.2
rimraf: 2.7.1
semver: 5.7.1
slash: 2.0.0
tmp: 0.0.33
yaml: 1.10.2
dev: false
/path-exists/3.0.0:
resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
engines: {node: '>=4'}
@ -2436,6 +2541,11 @@ packages:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
/path-key/2.0.1:
resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
engines: {node: '>=4'}
dev: false
/path-key/3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
@ -2792,6 +2902,13 @@ packages:
resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==}
dev: false
/rimraf/2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
dependencies:
glob: 7.2.3
dev: false
/rimraf/3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
hasBin: true
@ -2882,6 +2999,13 @@ packages:
/setprototypeof/1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
/shebang-command/1.2.0:
resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
engines: {node: '>=0.10.0'}
dependencies:
shebang-regex: 1.0.0
dev: false
/shebang-command/2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@ -2889,6 +3013,11 @@ packages:
shebang-regex: 3.0.0
dev: true
/shebang-regex/1.0.0:
resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
engines: {node: '>=0.10.0'}
dev: false
/shebang-regex/3.0.0:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
@ -2910,6 +3039,11 @@ packages:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
dev: false
/slash/2.0.0:
resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==}
engines: {node: '>=6'}
dev: false
/smart-buffer/4.2.0:
resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
@ -3292,6 +3426,13 @@ packages:
is-symbol: 1.0.4
dev: true
/which/1.3.1:
resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
hasBin: true
dependencies:
isexe: 2.0.0
dev: false
/which/2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
@ -3390,6 +3531,11 @@ packages:
/yallist/4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
/yaml/1.10.2:
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
engines: {node: '>= 6'}
dev: false
/yaml/2.1.1:
resolution: {integrity: sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==}
engines: {node: '>= 14'}
@ -3409,13 +3555,3 @@ packages:
buffer-crc32: 0.2.13
fd-slicer: 1.1.0
dev: false
github.com/yuko1101/enka-network-api/b253879ba9c7d7a548772937e515133c61a42ae4:
resolution: {tarball: https://codeload.github.com/yuko1101/enka-network-api/tar.gz/b253879ba9c7d7a548772937e515133c61a42ae4}
name: enka-network-api
version: 1.0.0
dependencies:
node-fetch: 2.6.7
transitivePeerDependencies:
- encoding
dev: false