Merge branch 'dev' of https://gitee.com/yoimiya-kokomi/Miao-Yunzai
This commit is contained in:
commit
9794cc5094
|
@ -19,10 +19,22 @@ const COLUMNS = {
|
||||||
// CK
|
// CK
|
||||||
ck: Types.STRING,
|
ck: Types.STRING,
|
||||||
device: Types.STRING,
|
device: Types.STRING,
|
||||||
|
uids: {
|
||||||
gsUids: Types.STRING,
|
type: Types.STRING,
|
||||||
|
get () {
|
||||||
srUids: Types.STRING
|
let data = this.getDataValue('uids')
|
||||||
|
let ret = {}
|
||||||
|
try {
|
||||||
|
ret = JSON.parse(data)
|
||||||
|
} catch (e) {
|
||||||
|
ret = {}
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
},
|
||||||
|
set (uids) {
|
||||||
|
this.setDataValue('uids', JSON.stringify(uids))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class MysUserDB extends BaseModel {
|
class MysUserDB extends BaseModel {
|
||||||
|
@ -45,8 +57,7 @@ class MysUserDB extends BaseModel {
|
||||||
this.ck = mys.ck
|
this.ck = mys.ck
|
||||||
this.type = mys.type
|
this.type = mys.type
|
||||||
this.device = mys.device
|
this.device = mys.device
|
||||||
this.gsUids = (mys.gsUids || []).join(',')
|
this.uids = mys.uids
|
||||||
this.srUids = (mys.srUids || []).join(',')
|
|
||||||
await db.save()
|
await db.save()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
import BaseModel from './BaseModel.js'
|
import BaseModel from './BaseModel.js'
|
||||||
import lodash from 'lodash'
|
import lodash from 'lodash'
|
||||||
|
import { UserGameDB } from './index.js'
|
||||||
|
import MysUtil from '../mys/MysUtil.js'
|
||||||
|
|
||||||
const { Types } = BaseModel
|
const { Types } = BaseModel
|
||||||
|
|
||||||
|
@ -23,15 +25,7 @@ const COLUMNS = {
|
||||||
// 头像
|
// 头像
|
||||||
face: Types.STRING,
|
face: Types.STRING,
|
||||||
|
|
||||||
ltuids: Types.STRING,
|
ltuids: Types.STRING
|
||||||
|
|
||||||
// 原神UID
|
|
||||||
gsUid: Types.STRING,
|
|
||||||
gsRegUids: Types.STRING,
|
|
||||||
|
|
||||||
// 星铁UID
|
|
||||||
srUid: Types.STRING,
|
|
||||||
srRegUids: Types.STRING
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class UserDB extends BaseModel {
|
class UserDB extends BaseModel {
|
||||||
|
@ -39,7 +33,12 @@ class UserDB extends BaseModel {
|
||||||
// user_id
|
// user_id
|
||||||
id = type === 'qq' ? '' + id : type + id
|
id = type === 'qq' ? '' + id : type + id
|
||||||
// DB查询
|
// DB查询
|
||||||
let user = await UserDB.findByPk(id)
|
let user = await UserDB.findByPk(id, {
|
||||||
|
include: {
|
||||||
|
model: UserGameDB,
|
||||||
|
as: 'games'
|
||||||
|
}
|
||||||
|
})
|
||||||
if (!user) {
|
if (!user) {
|
||||||
user = await UserDB.build({
|
user = await UserDB.build({
|
||||||
id,
|
id,
|
||||||
|
@ -53,15 +52,29 @@ class UserDB extends BaseModel {
|
||||||
let db = this
|
let db = this
|
||||||
let ltuids = []
|
let ltuids = []
|
||||||
lodash.forEach(user.mysUsers, (mys) => {
|
lodash.forEach(user.mysUsers, (mys) => {
|
||||||
if (mys.ck) {
|
if (mys.ck && mys.ltuid) {
|
||||||
ltuids.push(mys.ltuid)
|
ltuids.push(mys.ltuid)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
db.ltuids = ltuids.join(',')
|
db.ltuids = ltuids.join(',')
|
||||||
lodash.forEach(['gs', 'sr'], (key) => {
|
let games = []
|
||||||
db[`${key}Uid`] = user[`${key}Uid`] ? user[`${key}Uid`] : user.uids[key]?.[0] || ''
|
await MysUtil.eachGame(async (key) => {
|
||||||
db[`${key}RegUids`] = JSON.stringify(user.uidMap[key])
|
let game = user.games[key]
|
||||||
|
if (!game && (user.uid[key] || !lodash.isEmpty(user.uidMap[key]))) {
|
||||||
|
game = await db.createGame({
|
||||||
|
game: key
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (game) {
|
||||||
|
game.uid = user.uid[key]
|
||||||
|
game.data = user.uidMap[key]
|
||||||
|
games.push(game)
|
||||||
|
await game.save()
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
if (games.length > 0) {
|
||||||
|
await this.setGames(games)
|
||||||
|
}
|
||||||
await this.save()
|
await this.save()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
import BaseModel from './BaseModel.js'
|
||||||
|
import lodash from 'lodash'
|
||||||
|
|
||||||
|
const { Types } = BaseModel
|
||||||
|
|
||||||
|
const COLUMNS = {
|
||||||
|
// 用户ID,qq为数字
|
||||||
|
userId: {
|
||||||
|
type: Types.STRING
|
||||||
|
},
|
||||||
|
game: Types.STRING,
|
||||||
|
uid: Types.STRING,
|
||||||
|
data: {
|
||||||
|
type: Types.STRING,
|
||||||
|
get () {
|
||||||
|
let data = this.getDataValue('data')
|
||||||
|
let ret = {}
|
||||||
|
try {
|
||||||
|
data = JSON.parse(data)
|
||||||
|
} catch (e) {
|
||||||
|
data = []
|
||||||
|
}
|
||||||
|
lodash.forEach(data, (ds) => {
|
||||||
|
if (ds.uid) {
|
||||||
|
ret[ds.uid] = ds
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return ret
|
||||||
|
},
|
||||||
|
set (data) {
|
||||||
|
this.setDataValue('data', JSON.stringify(lodash.values(data)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class UserGameDB extends BaseModel {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseModel.initDB(UserGameDB, COLUMNS)
|
||||||
|
await UserGameDB.sync()
|
||||||
|
|
||||||
|
export default UserGameDB
|
|
@ -1,5 +1,6 @@
|
||||||
import UserDB from './UserDB.js'
|
import UserDB from './UserDB.js'
|
||||||
import MysUserDB from './MysUserDB.js'
|
import MysUserDB from './MysUserDB.js'
|
||||||
|
import UserGameDB from './UserGameDB.js'
|
||||||
|
|
||||||
|
|
||||||
UserDB.belongsToMany(MysUserDB, {
|
UserDB.belongsToMany(MysUserDB, {
|
||||||
|
@ -9,4 +10,15 @@ MysUserDB.belongsToMany(UserDB, {
|
||||||
through: 'UserLtuids'
|
through: 'UserLtuids'
|
||||||
})
|
})
|
||||||
|
|
||||||
export { UserDB, MysUserDB }
|
UserDB.hasMany(UserGameDB, {
|
||||||
|
onDelete: 'RESTRICT',
|
||||||
|
onUpdate: 'RESTRICT',
|
||||||
|
foreignKey: 'userId',
|
||||||
|
as: 'games'
|
||||||
|
})
|
||||||
|
UserGameDB.belongsTo(UserDB, {
|
||||||
|
foreignKey: 'userId',
|
||||||
|
as: 'games'
|
||||||
|
})
|
||||||
|
|
||||||
|
export { UserDB, MysUserDB, UserGameDB }
|
|
@ -1,5 +1,6 @@
|
||||||
import moment from 'moment'
|
import moment from 'moment'
|
||||||
import BaseModel from './BaseModel.js'
|
import BaseModel from './BaseModel.js'
|
||||||
|
import MysUtil from './MysUtil.js'
|
||||||
|
|
||||||
const servs = ['mys', 'hoyolab']
|
const servs = ['mys', 'hoyolab']
|
||||||
// 超时时间不必精确,直接定24小时即可
|
// 超时时间不必精确,直接定24小时即可
|
||||||
|
@ -38,7 +39,7 @@ export default class DailyCache extends BaseModel {
|
||||||
if (!uid || game === 'config') {
|
if (!uid || game === 'config') {
|
||||||
key = 'sys:config'
|
key = 'sys:config'
|
||||||
} else {
|
} else {
|
||||||
game = game === 'sr' ? 'sr' : 'gs'
|
game = MysUtil.getGameKey(game)
|
||||||
let serv = /^[6-9]|^hoyo|^os/i.test(uid) ? servs[1] : servs[0]
|
let serv = /^[6-9]|^hoyo|^os/i.test(uid) ? servs[1] : servs[0]
|
||||||
key = `${game}:${serv}`
|
key = `${game}:${serv}`
|
||||||
}
|
}
|
||||||
|
|
|
@ -264,7 +264,7 @@ export default class MysUser extends BaseModel {
|
||||||
|
|
||||||
getUids (game = 'gs') {
|
getUids (game = 'gs') {
|
||||||
let gameKey = this.gameKey(game)
|
let gameKey = this.gameKey(game)
|
||||||
return this[`${gameKey}Uids`] || []
|
return this.uids[gameKey] || []
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -378,10 +378,10 @@ export default class MysUser extends BaseModel {
|
||||||
this.ck = data.ck || this.ck || ''
|
this.ck = data.ck || this.ck || ''
|
||||||
this.type = data.type || this.type || 'mys'
|
this.type = data.type || this.type || 'mys'
|
||||||
this.device = data.device || this.device || MysUtil.getDeviceGuid()
|
this.device = data.device || this.device || MysUtil.getDeviceGuid()
|
||||||
|
this.uids = this.uids || {}
|
||||||
let self = this
|
let self = this
|
||||||
MysUtil.eachGame((game) => {
|
MysUtil.eachGame((game) => {
|
||||||
let key = `${game}Uids`
|
self.uids[game] = data?.uids?.[game] || self.uids[game] || []
|
||||||
self[key] = lodash.isString(data[key]) ? (data[key] || '').split(',') : (lodash.isArray(data[key]) ? data[key] : (self[key] || []))
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -400,7 +400,7 @@ export default class MysUser extends BaseModel {
|
||||||
uid = '' + uid
|
uid = '' + uid
|
||||||
if (/\d{9}/.test(uid)) {
|
if (/\d{9}/.test(uid)) {
|
||||||
let gameKey = this.gameKey(game)
|
let gameKey = this.gameKey(game)
|
||||||
let uids = this[`${gameKey}Uids`]
|
let uids = this.uids[gameKey]
|
||||||
if (!uids.includes(uid)) {
|
if (!uids.includes(uid)) {
|
||||||
uids.push(uid)
|
uids.push(uid)
|
||||||
}
|
}
|
||||||
|
@ -419,7 +419,7 @@ export default class MysUser extends BaseModel {
|
||||||
}
|
}
|
||||||
let self = this
|
let self = this
|
||||||
await MysUtil.eachGame(async (game) => {
|
await MysUtil.eachGame(async (game) => {
|
||||||
let uids = self[`${game}Uids`]
|
let uids = self.uids[game]
|
||||||
await this.addQueryUid(uids, game)
|
await this.addQueryUid(uids, game)
|
||||||
let cache = self.getCache(game)
|
let cache = self.getCache(game)
|
||||||
let cacheSearchList = await cache.get(tables.del, this.ltuid, true)
|
let cacheSearchList = await cache.get(tables.del, this.ltuid, true)
|
||||||
|
@ -445,28 +445,20 @@ export default class MysUser extends BaseModel {
|
||||||
//
|
//
|
||||||
/**
|
/**
|
||||||
* 删除缓存, 供User解绑CK时调用
|
* 删除缓存, 供User解绑CK时调用
|
||||||
* @param user
|
|
||||||
* @returns {Promise<boolean>}
|
* @returns {Promise<boolean>}
|
||||||
*/
|
*/
|
||||||
async del (user) {
|
async del () {
|
||||||
if (user && user.qq) {
|
// TODO 检查一ltuid多绑定的情况
|
||||||
let qqList = await this.cache.kGet(tables.qq, this.ltuid, true)
|
|
||||||
let newList = lodash.pull(qqList, user.qq * 1)
|
|
||||||
await this.cache.kSet(tables.qq, this.ltuid, newList)
|
|
||||||
if (newList.length > 0) {
|
|
||||||
// 如果数组还有其他元素,说明该ltuid还有其他绑定,不进行缓存删除
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 将查询过的uid缓存起来,以备后续重新绑定时恢复
|
// 将查询过的uid缓存起来,以备后续重新绑定时恢复
|
||||||
let uids = await this.getQueryUids()
|
let self = this
|
||||||
await this.servCache.set(tables.del, uids)
|
await MysUtil.eachGame(async (game) => {
|
||||||
|
let uids = await this.getQueryUids(game)
|
||||||
// 标记ltuid为失效
|
let cache = self.getCache(game)
|
||||||
await this.servCache.zDel(tables.detail, this.ltuid)
|
await cache.set(tables.del, uids)
|
||||||
await this.cache.zDel(tables.uid, this.ltuid)
|
// 标记ltuid为失效
|
||||||
await this.cache.kDel(tables.ck, this.ltuid)
|
await cache.zDel(tables.detail, this.ltuid)
|
||||||
await this.cache.kDel(tables.qq, this.ltuid)
|
})
|
||||||
|
await self.db.delete()
|
||||||
logger.mark(`[删除失效ck][ltuid:${this.ltuid}]`)
|
logger.mark(`[删除失效ck][ltuid:${this.ltuid}]`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -502,13 +494,13 @@ export default class MysUser extends BaseModel {
|
||||||
|
|
||||||
// 获取当前用户已查询uid列表
|
// 获取当前用户已查询uid列表
|
||||||
async getQueryUids (game = 'gs') {
|
async getQueryUids (game = 'gs') {
|
||||||
let cache = this.getCache('game')
|
let cache = this.getCache(game)
|
||||||
return await cache.zList(tables.detail, this.ltuid)
|
return await cache.zList(tables.detail, this.ltuid)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 根据uid获取查询ltuid
|
// 根据uid获取查询ltuid
|
||||||
async getQueryLtuid (uid, game = 'gs') {
|
async getQueryLtuid (uid, game = 'gs') {
|
||||||
let cache = this.getCache('game')
|
let cache = this.getCache(game)
|
||||||
return await cache.zKey(tables.detail, uid)
|
return await cache.zKey(tables.detail, uid)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -518,7 +510,7 @@ export default class MysUser extends BaseModel {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
let gameKey = this.gameKey(game)
|
let gameKey = this.gameKey(game)
|
||||||
let uids = this[`${gameKey}Uids`]
|
let uids = this.uids[gameKey]
|
||||||
return uids.includes(uid + '')
|
return uids.includes(uid + '')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
import { Data } from '#miao'
|
import { Data } from '#miao'
|
||||||
|
|
||||||
|
const games = ['gs', 'sr']
|
||||||
|
|
||||||
const MysUtil = {
|
const MysUtil = {
|
||||||
// 获取标准ltuid
|
// 获取标准ltuid
|
||||||
getLtuid (data) {
|
getLtuid (data) {
|
||||||
|
@ -36,7 +38,7 @@ const MysUtil = {
|
||||||
|
|
||||||
// 循环game
|
// 循环game
|
||||||
async eachGame (fn) {
|
async eachGame (fn) {
|
||||||
await Data.forEach(['gs', 'sr'], fn)
|
await Data.forEach(games, fn)
|
||||||
},
|
},
|
||||||
|
|
||||||
// 循环server
|
// 循环server
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import BaseModel from './BaseModel.js'
|
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 gsCfg from '../gsCfg.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'
|
||||||
|
@ -24,14 +25,6 @@ export default class NoteUser extends BaseModel {
|
||||||
return this._cacheThis()
|
return this._cacheThis()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取当前用户uid
|
|
||||||
* 如果为绑定用户,优先获取ck对应uid,否则获取绑定uid
|
|
||||||
*/
|
|
||||||
get uid () {
|
|
||||||
return this.getUid()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 当前用户是否具备CK
|
* 当前用户是否具备CK
|
||||||
*/
|
*/
|
||||||
|
@ -105,8 +98,6 @@ export default class NoteUser extends BaseModel {
|
||||||
let user = new NoteUser(qq)
|
let user = new NoteUser(qq)
|
||||||
await user.initDB(db)
|
await user.initDB(db)
|
||||||
|
|
||||||
// 检查绑定uid (regUid)
|
|
||||||
await user.getRegUid()
|
|
||||||
// 传入data则使用,否则读取
|
// 传入data则使用,否则读取
|
||||||
return user
|
return user
|
||||||
}
|
}
|
||||||
|
@ -143,39 +134,61 @@ export default class NoteUser extends BaseModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 初始化Uid
|
// 初始化Uid
|
||||||
initUids () {
|
initUids (mys = false) {
|
||||||
let self = this
|
let self = this
|
||||||
|
self.uid = {}
|
||||||
self.uids = {}
|
self.uids = {}
|
||||||
self.uidMap = {}
|
self.uidMap = {}
|
||||||
const { db, uids, uidMap, mysUsers } = self
|
self.games = {}
|
||||||
lodash.forEach(['gs', 'sr'], (key) => {
|
const { db, uids, games, uidMap, mysUsers } = self
|
||||||
// 绑定UID
|
|
||||||
|
let gameDBs = {}
|
||||||
|
lodash.forEach(db?.games, (gameDB) => {
|
||||||
|
gameDBs[gameDB.game] = gameDB
|
||||||
|
})
|
||||||
|
|
||||||
|
MysUtil.eachGame((key) => {
|
||||||
|
let gameDB = gameDBs[key]
|
||||||
uidMap[key] = {}
|
uidMap[key] = {}
|
||||||
uids[key] = []
|
uids[key] = []
|
||||||
// 设置CK UID
|
games[key] = gameDB
|
||||||
|
|
||||||
|
// 优先设置CK UID
|
||||||
lodash.forEach(mysUsers, (mys) => {
|
lodash.forEach(mysUsers, (mys) => {
|
||||||
lodash.forEach(mys[`${key}Uids`], (uid) => {
|
lodash.forEach(mys.uids[key] || [], (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)
|
uids[key].push(uid)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
let regUids = db[`${key}RegUids`] || '{}'
|
// 存在数据库记录则进行设置
|
||||||
try {
|
if (gameDB) {
|
||||||
regUids = JSON.parse(regUids)
|
let regUids = gameDB.data
|
||||||
} catch (e) {
|
// 依次设置verify、reg uid数据
|
||||||
regUids = {}
|
lodash.forEach(['verify', 'reg'], (uidType) => {
|
||||||
}
|
lodash.forEach(regUids, (ds, uid) => {
|
||||||
lodash.forEach(['verify', 'reg'], (uidType) => {
|
if (uid && ds.type === uidType && !uidMap[key][uid]) {
|
||||||
lodash.forEach(regUids, (ds, uid) => {
|
uidMap[key][uid] = { uid, type: ds.type }
|
||||||
if (uid && ds.type === uidType && !uidMap[key][uid]) {
|
uids[key].push(uid)
|
||||||
uidMap[key][uid] = { uid, type: ds.type }
|
}
|
||||||
uids[key].push(uid)
|
})
|
||||||
}
|
|
||||||
})
|
})
|
||||||
})
|
|
||||||
self[`${key}Uid`] = self[`${key}Uid`] || db[`${key}Uid`] || uids[key]?.[0] || ''
|
// 如果当前选中uid未在记录中,则补充为reg数据
|
||||||
|
let uid = gameDB.uid
|
||||||
|
if (uid && !uidMap[key][uid]) {
|
||||||
|
uidMap[key][uid] = { uid, type: 'reg' }
|
||||||
|
uids[key].push(uid)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置选中uid
|
||||||
|
if (mys && mys.uids[key]?.[0]) {
|
||||||
|
self.uid[key] = mys.uids[key]?.[0] || self.uid[key] || ''
|
||||||
|
} else {
|
||||||
|
self.uid[key] = self.uid[key] || gameDB?.uid || uids[key]?.[0] || ''
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,12 +198,13 @@ export default class NoteUser extends BaseModel {
|
||||||
|
|
||||||
// 获取当前UID
|
// 获取当前UID
|
||||||
getUid (game = 'gs') {
|
getUid (game = 'gs') {
|
||||||
return this.isGs(game) ? this.gsUid : this.srUid
|
let gameKey = this.gameKey(game)
|
||||||
|
return this.uid[gameKey] || this.uids[gameKey][0] || ''
|
||||||
}
|
}
|
||||||
|
|
||||||
getSelfUid (game = 'gs') {
|
getSelfUid (game = 'gs') {
|
||||||
let gameKey = this.gameKey(game)
|
let gameKey = this.gameKey(game)
|
||||||
let uids = this[`${gameKey}UidMap`].filter((v) => v.type === 'ck')
|
let uids = this.uidMap[gameKey].filter((v) => v.type === 'ck')
|
||||||
if (uids.length === 0) {
|
if (uids.length === 0) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -212,7 +226,7 @@ export default class NoteUser extends BaseModel {
|
||||||
getUidData (game = 'gs') {
|
getUidData (game = 'gs') {
|
||||||
let gameKey = this.gameKey(game)
|
let gameKey = this.gameKey(game)
|
||||||
let uid = this.getUid(game)
|
let uid = this.getUid(game)
|
||||||
return this.uidMap[gameKey][uid]
|
return this.uidMap[gameKey]?.[uid]
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取当前的MysUser对象
|
// 获取当前的MysUser对象
|
||||||
|
@ -255,7 +269,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[`${gameKey}Uid`] || ''
|
return this.uid[gameKey] || ''
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -281,27 +295,27 @@ export default class NoteUser extends BaseModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.uidMap[gameKey][uid]) {
|
if (this.uidMap[gameKey][uid]) {
|
||||||
if (this.isGs(game)) {
|
this.uid[gameKey] = uid
|
||||||
this.gsUid = uid
|
|
||||||
} else {
|
|
||||||
this.srUid = uid
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.initUids()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加MysUser
|
// 添加MysUser
|
||||||
addMysUser (mysUser) {
|
addMysUser (mysUser) {
|
||||||
this.mysUsers[mysUser.ltuid] = mysUser
|
this.mysUsers[mysUser.ltuid] = mysUser
|
||||||
this.initUids()
|
this.initUids(mysUser)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除当前用户绑定CK
|
// 删除当前用户绑定CK
|
||||||
async delCk (ltuid = '', needRefreshCache = true) {
|
async delCk (ltuid = '', needRefreshCache = true) {
|
||||||
if (!this.mysUsers[ltuid]) {
|
if (!ltuid || !this.mysUsers[ltuid]) {
|
||||||
return false
|
return
|
||||||
}
|
}
|
||||||
|
let mys = this.mysUsers[ltuid]
|
||||||
delete this.mysUsers[ltuid]
|
delete this.mysUsers[ltuid]
|
||||||
this.initUids()
|
mys.del()
|
||||||
|
await this.initUids()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -6,6 +6,7 @@ import common from '../../../lib/common/common.js'
|
||||||
import MysInfo from './mys/mysInfo.js'
|
import MysInfo from './mys/mysInfo.js'
|
||||||
import NoteUser from './mys/NoteUser.js'
|
import NoteUser from './mys/NoteUser.js'
|
||||||
import MysUser from './mys/MysUser.js'
|
import MysUser from './mys/MysUser.js'
|
||||||
|
import MysUtil from './mys/MysUtil.js'
|
||||||
import { promisify } from 'node:util'
|
import { promisify } from 'node:util'
|
||||||
import YAML from 'yaml'
|
import YAML from 'yaml'
|
||||||
import { Data } from '#miao'
|
import { Data } from '#miao'
|
||||||
|
@ -58,6 +59,7 @@ export default class User extends base {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO:独立的mys数据,不走缓存ltuid
|
||||||
let mys = await MysUser.create(param.ltuid)
|
let mys = await MysUser.create(param.ltuid)
|
||||||
let data = {}
|
let data = {}
|
||||||
data.ck = `ltoken=${param.ltoken};ltuid=${param.ltuid || param.login_uid};cookie_token=${param.cookie_token || param.cookie_token_v2}; account_id=${param.ltuid || param.login_uid};`
|
data.ck = `ltoken=${param.ltoken};ltuid=${param.ltuid || param.login_uid};cookie_token=${param.cookie_token || param.cookie_token_v2}; account_id=${param.ltuid || param.login_uid};`
|
||||||
|
@ -81,9 +83,10 @@ export default class User extends base {
|
||||||
|
|
||||||
/** 检查ck是否失效 */
|
/** 检查ck是否失效 */
|
||||||
let uidRet = await mys.reqMysUid()
|
let uidRet = await mys.reqMysUid()
|
||||||
console.log('uidRet', uidRet)
|
|
||||||
if (uidRet.status !== 0) {
|
if (uidRet.status !== 0) {
|
||||||
logger.mark(`绑定cookie错误1:${this.checkMsg || 'cookie错误'}`)
|
logger.mark(`绑定cookie错误1:${this.checkMsg || 'cookie错误'}`)
|
||||||
|
// 清除mys数据
|
||||||
|
mys._delCache()
|
||||||
return await this.e.reply(`绑定cookie失败:${this.checkMsg || 'cookie错误'}`)
|
return await this.e.reply(`绑定cookie失败:${this.checkMsg || 'cookie错误'}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,10 +95,8 @@ export default class User extends base {
|
||||||
let userFullInfo = await mys.getUserFullInfo()
|
let userFullInfo = await mys.getUserFullInfo()
|
||||||
if (userFullInfo?.data?.user_info) {
|
if (userFullInfo?.data?.user_info) {
|
||||||
let userInfo = userFullInfo?.data?.user_info
|
let userInfo = userFullInfo?.data?.user_info
|
||||||
/*
|
// this.ltuid = userInfo.uid
|
||||||
this.ltuid = userInfo.uid
|
// this.ck = `${this.ck}ltuid=${this.ltuid};`
|
||||||
this.ck = `${this.ck}ltuid=${this.ltuid};`
|
|
||||||
*/
|
|
||||||
} else {
|
} else {
|
||||||
logger.mark(`绑定cookie错误2:${userFullInfo.message || 'cookie错误'}`)
|
logger.mark(`绑定cookie错误2:${userFullInfo.message || 'cookie错误'}`)
|
||||||
return await this.e.reply(`绑定cookie失败:${userFullInfo.message || 'cookie错误'}`)
|
return await this.e.reply(`绑定cookie失败:${userFullInfo.message || 'cookie错误'}`)
|
||||||
|
@ -105,6 +106,7 @@ export default class User extends base {
|
||||||
logger.mark(`${this.e.logFnc} 检查cookie正常 [ltuid:${mys.ltuid}]`)
|
logger.mark(`${this.e.logFnc} 检查cookie正常 [ltuid:${mys.ltuid}]`)
|
||||||
|
|
||||||
await user.addMysUser(mys)
|
await user.addMysUser(mys)
|
||||||
|
await mys.initCache()
|
||||||
await user.save()
|
await user.save()
|
||||||
|
|
||||||
logger.mark(`${this.e.logFnc} 保存cookie成功 [ltuid:${mys.ltuid}]`)
|
logger.mark(`${this.e.logFnc} 保存cookie成功 [ltuid:${mys.ltuid}]`)
|
||||||
|
@ -133,49 +135,17 @@ export default class User extends base {
|
||||||
await this.e.reply(msg)
|
await this.e.reply(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 检查ck是否可用 */
|
|
||||||
async checkCk (mys, param = {}) {
|
|
||||||
let res
|
|
||||||
for (let type of ['mys', 'hoyolab']) {
|
|
||||||
let roleRes = await mys.getGameRole(type)
|
|
||||||
if (roleRes?.retcode === 0) {
|
|
||||||
res = roleRes
|
|
||||||
/** 国际服的标记 */
|
|
||||||
if (type === 'hoyolab' && typeof (param.mi18nLang) === 'string' && !/mi18nLang/.test(mys.ck)) {
|
|
||||||
mys.ck += ` mi18nLang=${param.mi18nLang};`
|
|
||||||
mys.type = 'hoyolab'
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if (roleRes.retcode === -100) {
|
|
||||||
this.checkMsg = '该ck已失效,请重新登录获取'
|
|
||||||
} else {
|
|
||||||
this.checkMsg = roleRes.message || 'error'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!res) return false
|
|
||||||
let playerList = res?.data?.list || []
|
|
||||||
if (!playerList || playerList.length <= 0) {
|
|
||||||
this.checkMsg = '该账号尚未绑定原神或星穹角色!'
|
|
||||||
return false
|
|
||||||
} else {
|
|
||||||
playerList = playerList.filter(v => ['hk4e_cn', 'hkrpg_cn', 'hk4e_global', 'hkrpg_global'].includes(v.game_biz))
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 米游社默认展示的角色 */
|
|
||||||
for (let val of playerList) {
|
|
||||||
mys.addUid(val.game_uid, ['hk4e_cn', 'hk4e_global'].includes(val.game_biz) ? 'gs' : 'sr')
|
|
||||||
}
|
|
||||||
await mys.save()
|
|
||||||
return mys
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 删除绑定ck */
|
/** 删除绑定ck */
|
||||||
async delCk (uid = '') {
|
async delCk () {
|
||||||
let user = await this.user()
|
let user = await this.user()
|
||||||
let uids = await user.delCk()
|
// 获取当前uid
|
||||||
return `绑定cookie已删除,uid:${uids.join(',')}`
|
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已删除}`
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 绑定uid,若有ck的话优先使用ck-uid */
|
/** 绑定uid,若有ck的话优先使用ck-uid */
|
||||||
|
@ -192,8 +162,8 @@ export default class User extends base {
|
||||||
/** #uid */
|
/** #uid */
|
||||||
async showUid () {
|
async showUid () {
|
||||||
let user = await this.user()
|
let user = await this.user()
|
||||||
let msg = ['通过【#uid+序号】来切换uid']
|
let msg = []
|
||||||
lodash.forEach({ genshin: '原神', star: '星穹铁道' }, (gameName, game) => {
|
lodash.forEach({ gs: '原神', sr: '星穹铁道' }, (gameName, game) => {
|
||||||
let uidList = user.getUidList(game)
|
let uidList = user.getUidList(game)
|
||||||
let currUid = user.getUid(game)
|
let currUid = user.getUid(game)
|
||||||
if (uidList.length === 0) {
|
if (uidList.length === 0) {
|
||||||
|
@ -208,7 +178,12 @@ export default class User extends base {
|
||||||
msg.push(tmp)
|
msg.push(tmp)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
await this.e.reply(msg.join('\n'))
|
if (msg.length > 0) {
|
||||||
|
msg.unshift('通过【#uid+序号】来切换uid')
|
||||||
|
await this.e.reply(msg.join('\n'))
|
||||||
|
} else {
|
||||||
|
await this.e.reply('尚未绑定UID,发送CK或通过【#绑定123456789】命令来绑定UID')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 切换uid */
|
/** 切换uid */
|
||||||
|
@ -220,7 +195,7 @@ export default class User extends base {
|
||||||
return await this.e.reply('uid序号输入错误')
|
return await this.e.reply('uid序号输入错误')
|
||||||
}
|
}
|
||||||
index = Number(index) - 1
|
index = Number(index) - 1
|
||||||
await user.setMainUid(index, game)
|
user.setMainUid(index, game)
|
||||||
await user.save()
|
await user.save()
|
||||||
return await this.showUid()
|
return await this.showUid()
|
||||||
}
|
}
|
||||||
|
@ -318,13 +293,16 @@ export default class User extends base {
|
||||||
ck,
|
ck,
|
||||||
device,
|
device,
|
||||||
ltuid,
|
ltuid,
|
||||||
star: {},
|
uids: {},
|
||||||
genshin: {},
|
|
||||||
type: /America Server|Europe Server|Asia Server/.test(region) ? 'hoyolab' : 'mys'
|
type: /America Server|Europe Server|Asia Server/.test(region) ? 'hoyolab' : 'mys'
|
||||||
}
|
}
|
||||||
let tmp = ltuids[ltuid]
|
let tmp = ltuids[ltuid]
|
||||||
let game = region === '星穹列车' ? 'star' : 'genshin'
|
let game = region === '星穹列车' ? 'sr' : 'gs'
|
||||||
tmp[game][uid] = uid
|
tmp.uids[game] = tmp.uids[game] || []
|
||||||
|
let gameUids = tmp.uids[game]
|
||||||
|
if (!gameUids.includes(uid + '')) {
|
||||||
|
gameUids.push(uid + '')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!qq) {
|
if (!qq) {
|
||||||
continue
|
continue
|
||||||
|
@ -334,8 +312,6 @@ export default class User extends base {
|
||||||
let data = ltuids[ltuid]
|
let data = ltuids[ltuid]
|
||||||
let mys = await MysUser.create(data.ltuid)
|
let mys = await MysUser.create(data.ltuid)
|
||||||
if (mys) {
|
if (mys) {
|
||||||
data.gsUids = lodash.keys(data.genshin)
|
|
||||||
data.srUids = lodash.keys(data.star)
|
|
||||||
mys.setCkData(data)
|
mys.setCkData(data)
|
||||||
await mys.save()
|
await mys.save()
|
||||||
user.addMysUser(mys)
|
user.addMysUser(mys)
|
||||||
|
|
Loading…
Reference in New Issue