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 = [] let games = []
await MysUtil.eachGame(async (key) => { await MysUtil.eachGame(async (key) => {
let game = user.games[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 = await db.createGame({
game: key game: key
}) })
} }
if (game) { if (game) {
game.uid = user.uid[key] game.uid = user.mainUid[key]
game.data = user.uidMap[key] game.data = user.uidMap[key]
games.push(game) games.push(game)
await game.save() await game.save()

View File

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

View File

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

View File

@ -101,7 +101,7 @@ export default class MysInfo {
/** at用户 */ /** at用户 */
if (at) { if (at) {
let atUser = await NoteUser.create(at) let atUser = await NoteUser.create(at)
uid = atUser.uid uid = atUser.getUid(e)
if (uid) return String(uid) if (uid) return String(uid)
if (e.noTips !== true) e.reply('尚未绑定uid', false, { at }) if (e.noTips !== true) e.reply('尚未绑定uid', false, { at })
return false return false
@ -114,8 +114,8 @@ export default class MysInfo {
} }
// 消息携带UID、当前用户UID、群名片携带UID 依次获取 // 消息携带UID、当前用户UID、群名片携带UID 依次获取
uid = matchUid(msg) || user.uid || matchUid(e.sender.card) uid = matchUid(msg) || user.getUid(e) || matchUid(e.sender.card)
if (!matchMsgUid) uid = user.uid if (!matchMsgUid) uid = user.getUid(e)
if (uid) { if (uid) {
/** 没有绑定的自动绑定 */ /** 没有绑定的自动绑定 */
return await user.setRegUid(uid, false) 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)) { // if (param.cookie_token_v2 && (param.account_mid_v2 || param.ltmid_v2)) { //
// account_mid_v2 为版本必须带的字段不带的话会一直提示绑定cookie失败 请重新登录 // account_mid_v2 为版本必须带的字段不带的话会一直提示绑定cookie失败 请重新登录
flagV2 = true 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) { if (param.mi18nLang) {
data.ck += ` mi18nLang=${param.mi18nLang};` data.ck += ` mi18nLang=${param.mi18nLang};`
@ -140,12 +140,11 @@ export default class User extends base {
let user = await this.user() let user = await this.user()
// 获取当前uid // 获取当前uid
let uidData = user.getUidData(this.e) let uidData = user.getUidData(this.e)
let uidms = user.getUidList(this.e)
if (!uidData || uidData.type !== 'ck' || !uidData.ltuid) { if (!uidData || uidData.type !== 'ck' || !uidData.ltuid) {
return `删除失败当前的UID${uidData.uid}无CK信息` return `删除失败当前的UID${uidData.uid}无CK信息`
} }
let uids = await user.delCk(uidData.ltuid) await user.delMysUser(uidData.ltuid)
return `绑定cookie已删除}` return `绑定cookie已删除`
} }
/** 绑定uid若有ck的话优先使用ck-uid */ /** 绑定uid若有ck的话优先使用ck-uid */
@ -319,11 +318,9 @@ export default class User extends base {
} }
await user.save() await user.save()
if (fs.existsSync(`./data/MysCookie/${qq}.yaml`)) { if (fs.existsSync(`./data/MysCookie/${qq}.yaml`)) {
/* fs.rename(`./data/MysCookie/${qq}.yaml`, `./data/MysCookieBak/${qq}.yaml`, (err) => { fs.rename(`./data/MysCookie/${qq}.yaml`, `./data/MysCookieBak/${qq}.yaml`, (err) => {
if (err) { if (err) console.log(err)
console.log(err) })
}
}) */
} }
count++ count++
} }
@ -336,11 +333,10 @@ export default class User extends base {
if (!user.hasCk) { if (!user.hasCk) {
this.e.reply('当前尚未绑定cookie') this.e.reply('当前尚未绑定cookie')
} }
let ck = user.mainCk let mys = user.getMysUser(this.e)
if (mys) {
if (!lodash.isEmpty(ck)) { await this.e.reply(`当前绑定cookie\nuid${mys.getUid(this.e)}`)
await this.e.reply(`当前绑定cookie\nuid${ck.uid}`) await this.e.reply(mys.ck)
await this.e.reply(ck.ck)
} }
} }