miao-plugin/models/player/Profile.js

127 lines
3.3 KiB
JavaScript
Raw Normal View History

2023-02-09 16:57:25 +00:00
import { ProfileReq, ProfileServ } from '../index.js'
2023-03-07 17:52:11 +00:00
import { Cfg, Data } from '#miao'
import MysAvatar from './MysAvatar.js'
2023-02-09 16:57:25 +00:00
import enkaApi from './EnkaApi.js'
import miaoApi from './MiaoApi.js'
import mggApi from './MggApi.js'
import hutaoApi from './HutaoApi.js'
import homoApi from './HomoApi.js'
2023-02-09 16:57:25 +00:00
2023-05-18 20:23:19 +00:00
import lodash from 'lodash'
2023-02-09 16:57:25 +00:00
let { diyCfg } = await Data.importCfg('profile')
const Profile = {
servs: {},
serv (key) {
if (!Profile.servs[key]) {
Profile.servs[key] = new ProfileServ({
miao: miaoApi,
mgg: mggApi,
enka: enkaApi,
2023-05-14 20:19:33 +00:00
hutao: hutaoApi,
homo: homoApi
}[key])
}
return Profile.servs[key]
},
2023-02-09 16:57:25 +00:00
/**
* 根据UID分配请求服务器
* @param uid
2023-05-14 20:19:33 +00:00
* @param game
2023-02-09 16:57:25 +00:00
* @returns {ProfileServ}
*/
2023-05-14 20:19:33 +00:00
getServ (uid, game = 'gs') {
2023-02-09 16:57:25 +00:00
let token = diyCfg?.miaoApi?.token
let qq = diyCfg?.miaoApi?.qq
let hasToken = !!(qq && token && token.length === 32 && !/^test/.test(token))
2023-02-09 16:57:25 +00:00
// 判断国服、B服、外服获取在配置中的idx
let servIdx = { 1: 0, 2: 0, 3: 0, 4: 0, 5: 1, 6: 2, 7: 2, 8: 2, 9: 2 }[uid[0]]
// 获取对应服务选择的配置数字0自动1喵2Enka3Mgg, 4:Hutao
let servCfg = Cfg.get('profileServer', '0').toString() || '0'
servCfg = servCfg[servIdx] || servCfg[0] || '0'
if (game === 'sr') {
if ((servCfg === '0' || servCfg === '1') && hasToken) {
return Profile.serv('miao')
}
return Profile.serv('homo')
}
if ((servCfg === '0' || servCfg === '1') && hasToken) {
return Profile.serv('miao')
2023-02-09 16:57:25 +00:00
}
if (servCfg === '2') {
return Profile.serv('enka')
} else if (servCfg === '3') {
return Profile.serv('mgg')
} else if (servCfg === '4') {
return Profile.serv('hutao')
2023-02-09 16:57:25 +00:00
}
return Profile.serv(servIdx === 2 ? 'enka' : 'mgg')
2023-02-09 16:57:25 +00:00
},
/**
* 更新面板数据
* @param player
* @param force
* @returns {Promise<boolean|number>}
*/
async refreshProfile (player, force = 2) {
if (!MysAvatar.needRefresh(player._profile, force, { 0: 24, 1: 2, 2: 0 })) {
return false
}
2023-02-09 16:57:25 +00:00
player._update = []
let { uid, e } = player
if (uid.toString().length !== 9 || !e) {
return false
}
let req = ProfileReq.create(e, player.game)
2023-02-09 16:57:25 +00:00
if (!req) {
return false
}
2023-05-14 20:19:33 +00:00
let serv = Profile.getServ(uid, player.game)
2023-02-09 16:57:25 +00:00
try {
await req.requestProfile(player, serv, player.game)
2023-02-09 16:57:25 +00:00
player._profile = new Date() * 1
player.save()
return player._update.length
} catch (err) {
if (!e._isReplyed) {
e.reply(`UID:${uid}更新面板失败,更新服务:${serv.name}`)
}
2023-05-14 20:19:33 +00:00
console.log(err)
2023-02-09 16:57:25 +00:00
return false
}
},
isProfile (avatar) {
2023-05-14 20:19:33 +00:00
if (avatar.isSr) {
return true
}
// 检查数据源
if (!avatar._source || !['enka', 'change', 'miao', 'mgg', 'hutao', 'homo'].includes(avatar._source)) {
return false
}
// 检查武器及天赋
2023-05-18 20:23:19 +00:00
if (!avatar.weapon || lodash.isUndefined(avatar.weapon.promote) || !avatar.talent) {
return false
}
// 检查圣遗物词条是否完备
if (!avatar.artis || !avatar.artis.hasAttr) {
return false
}
// 检查旅行者
if (['空', '荧'].includes(avatar.name)) {
return !!avatar.elem
}
return true
2023-02-09 16:57:25 +00:00
}
}
export default Profile