This commit is contained in:
Ctrlcvs 2023-05-11 14:49:00 +08:00
commit 8135302b0e
5 changed files with 82 additions and 72 deletions

View File

@ -60,13 +60,13 @@ class UserDB extends BaseModel {
let games = []
await MysUtil.eachGame(async (key) => {
let game = user.games[key]
if (!game && (user.uid[key] || !lodash.isEmpty(user.uidMap[key]))) {
if (!game && (user.mainUid[key] || !lodash.isEmpty(user.uidMap[key]))) {
game = await db.createGame({
game: key
})
}
if (game) {
game.uid = user.uid[key]
game.uid = user.mainUid[key]
game.data = user.uidMap[key]
games.push(game)
await game.save()

View File

@ -267,6 +267,15 @@ export default class MysUser extends BaseModel {
return this.uids[gameKey] || []
}
getMainUid () {
let ret = {}
let uids = this.uids
MysUtil.eachGame((gameKey) => {
ret[gameKey] = uids[gameKey]?.[0] || ''
})
return ret
}
/**
* 刷新mysUser的UID列表
* @returns {Promise<{msg: string, status: number}>}
@ -458,7 +467,8 @@ export default class MysUser extends BaseModel {
// 标记ltuid为失效
await cache.zDel(tables.detail, this.ltuid)
})
await self.db.delete()
await self.db.destroy()
self._delCache()
logger.mark(`[删除失效ck][ltuid:${this.ltuid}]`)
}

View File

@ -9,7 +9,6 @@ import BaseModel from './BaseModel.js'
import lodash from 'lodash'
import MysUser from './MysUser.js'
import MysUtil from './MysUtil.js'
import gsCfg from '../gsCfg.js'
import { UserDB } from '../db/index.js'
import { Data } from '#miao'
@ -25,6 +24,11 @@ export default class NoteUser extends BaseModel {
return this._cacheThis()
}
get uid () {
console.log('NoteUser.uid 默认返回原神UID可更改为 user.getUid(game)')
return this.getUid()
}
/**
* 当前用户是否具备CK
*/
@ -39,21 +43,10 @@ export default class NoteUser extends BaseModel {
if (!this.hasCk) {
return []
}
let ret = []
return lodash.map(this.ckData, 'uid')
}
/**
* 获取当前生效CK
*
* 返回isMain的uid没有的话返回首位
*/
get mainCk () {
if (this.hasCk) {
return lodash.filter(this.ckData, (ck) => ck.isMain)[0] || lodash.values(this.ckData)[0]
}
return false
}
/**
* 获取当前用户的所有ck
* @returns { {ltuid:{ckData, ck, uids}} }
@ -119,6 +112,7 @@ export default class NoteUser extends BaseModel {
this.db = db && db !== true ? db : await UserDB.find(this.qq, 'qq')
await this.initMysUser()
this.initUids()
await this.save()
}
// 初始化MysUser对象
@ -134,13 +128,13 @@ export default class NoteUser extends BaseModel {
}
// 初始化Uid
initUids (mys = false) {
initUids (setMainUid = {}) {
let self = this
self.uid = {}
self.uids = {}
self.uidMap = {}
self.mainUid = self.mainUid || {}
self.uidList = {}
self.uidMap = self.uidMap || {}
self.games = {}
const { db, uids, games, uidMap, mysUsers } = self
const { db, mainUid, uidList, games, uidMap, mysUsers } = self
let gameDBs = {}
lodash.forEach(db?.games, (gameDB) => {
@ -150,27 +144,31 @@ export default class NoteUser extends BaseModel {
MysUtil.eachGame((key) => {
let gameDB = gameDBs[key]
uidMap[key] = {}
uids[key] = []
uidList[key] = []
games[key] = gameDB
// 优先设置CK UID
lodash.forEach(mysUsers, (mys) => {
lodash.forEach(mys.uids[key] || [], (uid) => {
uid = uid + ''
if (uid && !uidMap[key][uid]) {
uidMap[key][uid] = { uid, type: 'ck', ltuid: mys.ltuid }
uids[key].push(uid)
uidList[key].push(uid)
}
})
})
let uidReg = /\d{9}/
// 存在数据库记录则进行设置
if (gameDB) {
let regUids = gameDB.data
// 依次设置verify、reg uid数据
lodash.forEach(['verify', 'reg'], (uidType) => {
lodash.forEach(regUids, (ds, uid) => {
if (uid && ds.type === uidType && !uidMap[key][uid]) {
uid = uid + ''
if (uid && uidReg.test(uid) && ds.type === uidType && !uidMap[key][uid]) {
uidMap[key][uid] = { uid, type: ds.type }
uids[key].push(uid)
uidList[key].push(uid)
}
})
})
@ -178,16 +176,16 @@ export default class NoteUser extends BaseModel {
// 如果当前选中uid未在记录中则补充为reg数据
let uid = gameDB.uid
if (uid && !uidMap[key][uid]) {
uid = uid + ''
uidMap[key][uid] = { uid, type: 'reg' }
uids[key].push(uid)
uidList[key].push(uid)
}
}
// 设置选中uid
if (mys && mys.uids[key]?.[0]) {
self.uid[key] = mys.uids[key]?.[0] || self.uid[key] || ''
if (setMainUid === false || setMainUid[key] === false) {
mainUid[key] = uidList[key]?.[0] || ''
} else {
self.uid[key] = self.uid[key] || gameDB?.uid || uids[key]?.[0] || ''
mainUid[key] = setMainUid[key] || mainUid[key] || gameDB?.uid || uidList[key]?.[0] || ''
}
})
}
@ -199,24 +197,24 @@ export default class NoteUser extends BaseModel {
// 获取当前UID
getUid (game = 'gs') {
let gameKey = this.gameKey(game)
return this.uid[gameKey] || this.uids[gameKey][0] || ''
return this.mainUid[gameKey] || this.uidList[gameKey][0] || ''
}
getSelfUid (game = 'gs') {
let gameKey = this.gameKey(game)
let uids = this.uidMap[gameKey].filter((v) => v.type === 'ck')
if (uids.length === 0) {
let uidList = this.uidMap[gameKey].filter((v) => v.type === 'ck')
if (uidList.length === 0) {
return false
}
let find = lodash.find(uids, (v) => v.uid + '' === uid + '', 0)
return find ? find.uid : uids[0].uid
let find = lodash.find(uidList, (v) => v.uid + '' === uid + '', 0)
return find ? find.uid : uidList[0].uid
}
// 获取UID列表
getUidList (game = 'gs') {
let ret = []
let gameKey = this.gameKey(game)
lodash.forEach(this.uids[gameKey], (uid) => {
lodash.forEach(this.uidList[gameKey], (uid) => {
ret.push(this.uidMap[gameKey][uid])
})
return ret
@ -246,11 +244,11 @@ export default class NoteUser extends BaseModel {
// 添加UID
addRegUid (uid, game = 'gs') {
let gameKey = this.gameKey(game)
uid = uid + ''
if (!this.uidMap[gameKey][uid]) {
this.uidMap[gameKey][uid] = { uid, type: 'reg' }
this.uids[gameKey].push(uid)
this.setMainUid(uid, game)
}
this.setMainUid(uid, game)
}
// 删除UID
@ -258,7 +256,7 @@ export default class NoteUser extends BaseModel {
let gameKey = this.gameKey(game)
if (this.uidMap[gameKey][uid] && this.uidMap[gameKey][uid].type !== 'ck') {
delete this.uidMap[gameKey][uid]
lodash.remove(this.uids[gameKey], (u) => u === uid)
lodash.remove(this.uidList[gameKey], (u) => u === uid)
}
}
@ -269,7 +267,7 @@ export default class NoteUser extends BaseModel {
*/
async getRegUid (game = 'gs') {
let gameKey = this.gameKey(game)
return this.uid[gameKey] || ''
return this.mainUid[gameKey] || ''
}
/**
@ -290,32 +288,38 @@ export default class NoteUser extends BaseModel {
setMainUid (uid = '', game = 'gs') {
let gameKey = this.gameKey(game)
// 兼容传入index
if (uid < 100 && this.uids[gameKey][uid]) {
uid = this.uids[gameKey][uid]
if (uid < 100 && this.uidList[gameKey][uid]) {
uid = this.uidList[gameKey][uid]
}
if (this.uidMap[gameKey][uid]) {
this.uid[gameKey] = uid
this.mainUid[gameKey] = uid
}
this.initUids()
let mainUid = {}
mainUid[gameKey] = uid
this.initUids(mainUid)
}
// 添加MysUser
addMysUser (mysUser) {
this.mysUsers[mysUser.ltuid] = mysUser
this.initUids(mysUser)
this.initUids(mysUser.getMainUid())
}
// 删除当前用户绑定CK
async delCk (ltuid = '', needRefreshCache = true) {
if (!ltuid || !this.mysUsers[ltuid]) {
return
async delCk (ltuid = '') {
console.log('delCk即将废弃')
return await this.delMysUser(ltuid)
}
async delMysUser (ltuid = '') {
if (ltuid && this.mysUsers[ltuid]) {
let mys = this.mysUsers[ltuid]
delete this.mysUsers[ltuid]
await mys.del()
}
let mys = this.mysUsers[ltuid]
delete this.mysUsers[ltuid]
mys.del()
await this.initUids()
this.initUids(false)
await this.save()
}
/**

View File

@ -101,7 +101,7 @@ export default class MysInfo {
/** at用户 */
if (at) {
let atUser = await NoteUser.create(at)
uid = atUser.uid
uid = atUser.getUid(e)
if (uid) return String(uid)
if (e.noTips !== true) e.reply('尚未绑定uid', false, { at })
return false
@ -114,8 +114,8 @@ export default class MysInfo {
}
// 消息携带UID、当前用户UID、群名片携带UID 依次获取
uid = matchUid(msg) || user.uid || matchUid(e.sender.card)
if (!matchMsgUid) uid = user.uid
uid = matchUid(msg) || user.getUid(e) || matchUid(e.sender.card)
if (!matchMsgUid) uid = user.getUid(e)
if (uid) {
/** 没有绑定的自动绑定 */
return await user.setRegUid(uid, false)

View File

@ -68,7 +68,7 @@ export default class User extends base {
if (param.cookie_token_v2 && (param.account_mid_v2 || param.ltmid_v2)) { //
// account_mid_v2 为版本必须带的字段不带的话会一直提示绑定cookie失败 请重新登录
flagV2 = true
data.ck = `account_mid_v2=${param.account_mid_v2};cookie_token_v2=${param.cookie_token_v2};ltoken_v2=${param.ltoken_v2};ltmid_v2=${param.ltmid_v2};`
data.ck = `ltuid=${param.ltuid || param.login_uid};account_mid_v2=${param.account_mid_v2};cookie_token_v2=${param.cookie_token_v2};ltoken_v2=${param.ltoken_v2};ltmid_v2=${param.ltmid_v2};`
}
if (param.mi18nLang) {
data.ck += ` mi18nLang=${param.mi18nLang};`
@ -140,12 +140,11 @@ export default class User extends base {
let user = await this.user()
// 获取当前uid
let uidData = user.getUidData(this.e)
let uidms = user.getUidList(this.e)
if (!uidData || uidData.type !== 'ck' || !uidData.ltuid) {
return `删除失败当前的UID${uidData.uid}无CK信息`
}
let uids = await user.delCk(uidData.ltuid)
return `绑定cookie已删除}`
await user.delMysUser(uidData.ltuid)
return `绑定cookie已删除`
}
/** 绑定uid若有ck的话优先使用ck-uid */
@ -319,11 +318,9 @@ export default class User extends base {
}
await user.save()
if (fs.existsSync(`./data/MysCookie/${qq}.yaml`)) {
/* fs.rename(`./data/MysCookie/${qq}.yaml`, `./data/MysCookieBak/${qq}.yaml`, (err) => {
if (err) {
console.log(err)
}
}) */
fs.rename(`./data/MysCookie/${qq}.yaml`, `./data/MysCookieBak/${qq}.yaml`, (err) => {
if (err) console.log(err)
})
}
count++
}
@ -336,11 +333,10 @@ export default class User extends base {
if (!user.hasCk) {
this.e.reply('当前尚未绑定cookie')
}
let ck = user.mainCk
if (!lodash.isEmpty(ck)) {
await this.e.reply(`当前绑定cookie\nuid${ck.uid}`)
await this.e.reply(ck.ck)
let mys = user.getMysUser(this.e)
if (mys) {
await this.e.reply(`当前绑定cookie\nuid${mys.getUid(this.e)}`)
await this.e.reply(mys.ck)
}
}