2022-06-25 23:45:43 +00:00
|
|
|
|
/*
|
|
|
|
|
* 面板公共方法及处理
|
|
|
|
|
* */
|
2022-07-23 20:32:10 +00:00
|
|
|
|
import lodash from 'lodash'
|
|
|
|
|
import { segment } from 'oicq'
|
2022-10-06 22:20:46 +00:00
|
|
|
|
import { profileList } from './ProfileList.js'
|
2023-02-08 20:55:54 +00:00
|
|
|
|
import { Version } from '../../components/index.js'
|
|
|
|
|
import { Character, MysApi, Player } from '../../models/index.js'
|
2022-06-25 23:45:43 +00:00
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* 获取面板查询的 目标uid
|
|
|
|
|
* */
|
2023-02-09 16:57:25 +00:00
|
|
|
|
const _getTargetUid = async function (e) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
let uidReg = /[1-9][0-9]{8}/
|
2022-06-25 23:45:43 +00:00
|
|
|
|
|
|
|
|
|
if (e.uid && uidReg.test(e.uid)) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return e.uid
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-07-23 20:32:10 +00:00
|
|
|
|
let uidRet = uidReg.exec(e.msg)
|
2022-06-25 23:45:43 +00:00
|
|
|
|
if (uidRet) {
|
|
|
|
|
return uidRet[0]
|
|
|
|
|
}
|
2022-07-23 20:32:10 +00:00
|
|
|
|
let uid = false
|
2022-06-25 23:45:43 +00:00
|
|
|
|
let getUid = async function (qq) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
let nCookie = global.NoteCookie || false
|
|
|
|
|
if (nCookie && nCookie[qq]) {
|
|
|
|
|
let nc = nCookie[qq]
|
2022-06-25 23:45:43 +00:00
|
|
|
|
if (nc.uid && uidReg.test(nc.uid)) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return nc.uid
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-09-23 21:59:30 +00:00
|
|
|
|
uid = await redis.get(`genshin:id-uid:${qq}`) || await redis.get(`Yz:genshin:mys:qq-uid:${qq}`)
|
2022-06-25 23:45:43 +00:00
|
|
|
|
if (uid && uidReg.test(uid)) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return uid
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-08-18 10:13:42 +00:00
|
|
|
|
if (!Version.isV3) {
|
2022-09-23 21:59:30 +00:00
|
|
|
|
let botQQ = global?.Bot?.uin || global?.BotConfig?.account?.qq
|
2022-07-27 18:36:49 +00:00
|
|
|
|
if (e.at && e.at !== botQQ) {
|
|
|
|
|
uid = await getUid(e.at)
|
|
|
|
|
if (uid) {
|
|
|
|
|
return uid
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
uid = await getUid(e.user_id)
|
2022-06-25 23:45:43 +00:00
|
|
|
|
if (uid) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return uid
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
2022-12-27 20:01:22 +00:00
|
|
|
|
let user = await MysApi.initUser(e)
|
2022-06-25 23:45:43 +00:00
|
|
|
|
|
2022-12-27 20:01:22 +00:00
|
|
|
|
if (!user || !user.uid) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return false
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
2022-12-27 20:01:22 +00:00
|
|
|
|
uid = user.uid
|
2022-06-25 23:45:43 +00:00
|
|
|
|
if (!uid || !uidReg.test(uid)) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
e.reply('请先发送【#绑定+你的UID】来绑定查询目标')
|
|
|
|
|
return false
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
} catch (err) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
console.log(err)
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return uid || false
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-02-09 16:57:25 +00:00
|
|
|
|
export async function getTargetUid (e) {
|
|
|
|
|
let uid = await _getTargetUid(e)
|
|
|
|
|
if (uid) {
|
|
|
|
|
e.uid = uid
|
|
|
|
|
}
|
|
|
|
|
return uid
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-25 23:45:43 +00:00
|
|
|
|
/*
|
|
|
|
|
* 自动更新面板数据
|
|
|
|
|
* */
|
2022-07-23 20:32:10 +00:00
|
|
|
|
export async function autoRefresh (e) {
|
|
|
|
|
let uid = await getTargetUid(e)
|
2022-06-25 23:45:43 +00:00
|
|
|
|
if (!uid || e.isRefreshed) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return false
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-07-23 20:32:10 +00:00
|
|
|
|
let refreshMark = await redis.get(`miao:profile-refresh-cd:${uid}`)
|
|
|
|
|
let inCd = await redis.get(`miao:role-all:${uid}`)
|
2022-06-25 23:45:43 +00:00
|
|
|
|
|
|
|
|
|
if (refreshMark || inCd) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return false
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-07-23 20:32:10 +00:00
|
|
|
|
await redis.set(`miao:profile-refresh-cd:${uid}`, 'TRUE', { EX: 3600 * 12 })
|
|
|
|
|
e.isRefreshed = true
|
2022-06-25 23:45:43 +00:00
|
|
|
|
|
|
|
|
|
// 数据更新
|
2023-02-09 16:57:25 +00:00
|
|
|
|
let player = Player.create(e)
|
|
|
|
|
let data = await player.refreshProfile()
|
2022-06-25 23:45:43 +00:00
|
|
|
|
if (!data) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return false
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!data.chars) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
e.reply('请确认角色已在【游戏内】橱窗展示并开放了查看详情。请在设置完毕5分钟后使用 #面板更新 重新获取')
|
|
|
|
|
return false
|
2022-06-25 23:45:43 +00:00
|
|
|
|
} else {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
let ret = []
|
2022-06-25 23:45:43 +00:00
|
|
|
|
lodash.forEach(data.chars, (ds) => {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
let char = Character.get(ds.id)
|
2022-06-25 23:45:43 +00:00
|
|
|
|
if (char) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
ret.push(char.name)
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
if (ret.length === 0) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
e.reply('请确认角色已在【游戏内】橱窗展示并开放了查看详情。请在设置完毕5分钟后使用 #面板更新 重新获取')
|
|
|
|
|
return false
|
2022-06-25 23:45:43 +00:00
|
|
|
|
} else {
|
|
|
|
|
// e.reply(`本次获取成功角色: ${ret.join(", ")} `)
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return true
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-23 20:32:10 +00:00
|
|
|
|
export async function autoGetProfile (e, uid, avatar, callback) {
|
2022-06-27 20:46:49 +00:00
|
|
|
|
let refresh = async () => {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
let refreshRet = await autoRefresh(e)
|
2022-06-27 20:46:49 +00:00
|
|
|
|
if (refreshRet) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
await callback()
|
2022-06-27 20:46:49 +00:00
|
|
|
|
}
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return refreshRet
|
2022-06-27 20:46:49 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-07-23 20:32:10 +00:00
|
|
|
|
let char = Character.get(avatar)
|
2022-06-27 20:46:49 +00:00
|
|
|
|
if (!char) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return { err: true }
|
2022-06-27 20:46:49 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-02-09 16:57:25 +00:00
|
|
|
|
let player = Player.create(e)
|
|
|
|
|
let profile = player.getProfile(char.id)
|
2022-08-24 01:07:06 +00:00
|
|
|
|
if (!profile || !profile.hasData) {
|
2022-06-27 20:46:49 +00:00
|
|
|
|
if (await refresh()) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return { err: true }
|
2022-06-27 20:46:49 +00:00
|
|
|
|
} else {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
e.reply(`请确认${char.name}已展示在【游戏内】的角色展柜中,并打开了“显示角色详情”。然后请使用 #更新面板\n命令来获取${char.name}的面板详情`)
|
2022-06-27 20:46:49 +00:00
|
|
|
|
}
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return { err: true }
|
2022-06-27 20:46:49 +00:00
|
|
|
|
}
|
|
|
|
|
return { profile, char, refresh }
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-05 22:12:57 +00:00
|
|
|
|
/*
|
|
|
|
|
* 面板数据更新
|
|
|
|
|
* */
|
2022-08-24 01:07:06 +00:00
|
|
|
|
export async function getProfile (e) {
|
2022-08-05 22:12:57 +00:00
|
|
|
|
let uid = await getTargetUid(e)
|
|
|
|
|
if (!uid) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return true
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 数据更新
|
2023-02-09 16:57:25 +00:00
|
|
|
|
let player = Player.create(e)
|
|
|
|
|
let ret = await player.refreshProfile()
|
2023-02-08 20:55:54 +00:00
|
|
|
|
if (!ret) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return true
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-02-08 20:55:54 +00:00
|
|
|
|
if (!player._update.length === 0) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
e.reply('获取角色面板数据失败,请确认角色已在游戏内橱窗展示,并开放了查看详情。设置完毕后请5分钟后再进行请求~')
|
2022-06-25 23:45:43 +00:00
|
|
|
|
} else {
|
2022-08-05 22:12:57 +00:00
|
|
|
|
let ret = {}
|
2023-02-08 20:55:54 +00:00
|
|
|
|
lodash.forEach(player._update, (id) => {
|
|
|
|
|
let char = Character.get(id)
|
2022-06-25 23:45:43 +00:00
|
|
|
|
if (char) {
|
2022-08-05 22:12:57 +00:00
|
|
|
|
ret[char.name] = true
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
if (ret.length === 0) {
|
2022-07-23 20:32:10 +00:00
|
|
|
|
e.reply('获取角色面板数据失败,未能请求到角色数据。请确认角色已在游戏内橱窗展示,并开放了查看详情。设置完毕后请5分钟后再进行请求~')
|
2022-06-25 23:45:43 +00:00
|
|
|
|
} else {
|
2022-08-05 22:12:57 +00:00
|
|
|
|
e.newChar = ret
|
2022-08-24 01:07:06 +00:00
|
|
|
|
return await profileList(e)
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return true
|
2022-06-25 23:45:43 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* 面板帮助
|
|
|
|
|
* */
|
2022-07-23 20:32:10 +00:00
|
|
|
|
export async function profileHelp (e) {
|
2022-06-25 23:45:43 +00:00
|
|
|
|
e.reply(segment.image(`file://${process.cwd()}/plugins/miao-plugin/resources/character/imgs/help.jpg`))
|
2022-07-23 20:32:10 +00:00
|
|
|
|
return true
|
|
|
|
|
}
|