From d2649e88fd6f2df09f90a404ebba17dbc39f5f5a Mon Sep 17 00:00:00 2001 From: Kokomi <102026640+yoimiya-kokomi@users.noreply.github.com> Date: Thu, 11 May 2023 06:08:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4ck=E3=80=81=E6=88=91=E7=9A=84?= =?UTF-8?q?ck=E5=91=BD=E4=BB=A4=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/genshin/model/db/UserDB.js | 4 +- plugins/genshin/model/mys/MysUser.js | 12 ++- plugins/genshin/model/mys/NoteUser.js | 101 +++++++++++++------------- plugins/genshin/model/mys/mysInfo.js | 6 +- plugins/genshin/model/user.js | 16 ++-- 5 files changed, 73 insertions(+), 66 deletions(-) diff --git a/plugins/genshin/model/db/UserDB.js b/plugins/genshin/model/db/UserDB.js index fb48ddf..2faf1df 100644 --- a/plugins/genshin/model/db/UserDB.js +++ b/plugins/genshin/model/db/UserDB.js @@ -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() diff --git a/plugins/genshin/model/mys/MysUser.js b/plugins/genshin/model/mys/MysUser.js index 83af857..39c8aae 100644 --- a/plugins/genshin/model/mys/MysUser.js +++ b/plugins/genshin/model/mys/MysUser.js @@ -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}]`) } diff --git a/plugins/genshin/model/mys/NoteUser.js b/plugins/genshin/model/mys/NoteUser.js index b48c36a..59ea427 100644 --- a/plugins/genshin/model/mys/NoteUser.js +++ b/plugins/genshin/model/mys/NoteUser.js @@ -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,18 +144,18 @@ 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) => { if (uid && !uidMap[key][uid]) { uidMap[key][uid] = { uid, type: 'ck', ltuid: mys.ltuid } - uids[key].push(uid) + uidList[key].push(uid) } }) }) + // 存在数据库记录则进行设置 if (gameDB) { let regUids = gameDB.data @@ -170,7 +164,7 @@ export default class NoteUser extends BaseModel { lodash.forEach(regUids, (ds, uid) => { if (uid && ds.type === uidType && !uidMap[key][uid]) { uidMap[key][uid] = { uid, type: ds.type } - uids[key].push(uid) + uidList[key].push(uid) } }) }) @@ -179,15 +173,14 @@ export default class NoteUser extends BaseModel { let uid = gameDB.uid if (uid && !uidMap[key][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 +192,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 +239,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 +251,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 +262,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 +283,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]?.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() } /** diff --git a/plugins/genshin/model/mys/mysInfo.js b/plugins/genshin/model/mys/mysInfo.js index 71ae0e2..a3e4086 100644 --- a/plugins/genshin/model/mys/mysInfo.js +++ b/plugins/genshin/model/mys/mysInfo.js @@ -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) diff --git a/plugins/genshin/model/user.js b/plugins/genshin/model/user.js index 6f21b73..54cc860 100644 --- a/plugins/genshin/model/user.js +++ b/plugins/genshin/model/user.js @@ -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 */ @@ -336,11 +335,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) } }