miao-plugin/apps/character/AvatarWife.js
Kokomi 6b11badb66 #喵喵设置 中可设置禁用获取角色或面板原图功能
增加`#删除面板`命令,目前绑定CK用户使用,Bot主人可删除任意UID数据
2023-02-18 04:42:05 +08:00

189 lines
5.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// #老婆
import lodash from 'lodash'
import { Common } from '../../components/index.js'
import { Character, MysApi, Player } from '../../models/index.js'
import Avatar from './AvatarCard.js'
const relationMap = {
wife: {
keyword: '老婆,媳妇,妻子,娘子'.split(','),
type: 0
},
husband: {
keyword: '老公,丈夫,夫君,郎君'.split(','),
type: 1
},
gf: {
keyword: '女朋友,女友,女神'.split(','),
type: 0
},
bf: {
keyword: '男朋友,男友,男神'.split(','),
type: 1
},
daughter: {
keyword: '女儿'.split(','),
type: 2
},
son: {
keyword: '儿子'.split(','),
type: 3
}
}
const relation = lodash.flatMap(relationMap, (d) => d.keyword)
const wifeReg = `^#?\\s*(${relation.join('|')})\\s*(设置|选择|指定|列表|查询|列表|是|是谁|照片|相片|图片|写真|图像)?\\s*([^\\d]*)\\s*(\\d*)$`
async function getAvatarList (player, type) {
await player.refreshMysDetail()
let list = []
player.forEachAvatar((avatar) => {
if (type !== false) {
if (!avatar.char.checkWifeType(type)) {
return true
}
}
list.push(avatar)
})
if (list.length <= 0) {
return false
}
let sortKey = 'level,fetter,weapon_level,rarity,weapon_rarity,cons,weapon_affix_level'
list = lodash.orderBy(list, sortKey, lodash.repeat('desc,', sortKey.length).split(','))
return list
}
const Wife = {
reg: wifeReg,
async render (e) {
let msg = e.msg || ''
if (!msg && !e.isPoke) return false
if (e.isPoke) {
if (!Common.cfg('avatarPoke')) {
return false
}
} else if (!Common.cfg('avatarCard')) {
return false
}
let msgRet = (new RegExp(wifeReg)).exec(msg)
if (e.isPoke) {
msgRet = []
} else if (!msgRet) {
return false
}
let target = msgRet[1]
let action = msgRet[2] || '卡片'
let actionParam = msgRet[3] || ''
if (!'设置,选择,挑选,指定'.split(',').includes(action) && actionParam) {
return false
}
let targetCfg = lodash.find(relationMap, (cfg, key) => {
cfg.key = key
return cfg.keyword.includes(target)
})
if (!targetCfg && !e.isPoke) return true
let avatarList = []
let avatar = {}
let wifeList = []
let mys = await MysApi.init(e)
if (!mys || !mys.uid) {
return true
}
let player = Player.create(e)
let selfUser = mys.selfUser
let isSelf = true
let renderType = (action === '卡片' ? 'card' : 'photo')
let addRet = []
switch (action) {
case '卡片':
case '照片':
case '相片':
case '图片':
case '写真':
// 展示老婆卡片
// 如果选择过,则进行展示
if (!e.isPoke) {
wifeList = await selfUser.getCfg(`wife.${targetCfg.key}`, [])
// 存在设置
if (wifeList && wifeList.length > 0 && isSelf && !e.isPoke) {
if (wifeList[0] === '随机') {
// 如果选择为全部,则从列表中随机选择一个
avatarList = await getAvatarList(player, targetCfg.type, mys)
let avatar = lodash.sample(avatarList)
return Avatar.renderAvatar(e, avatar, renderType)
} else {
// 如果指定过,则展示指定角色
return Avatar.renderAvatar(e, lodash.sample(wifeList), renderType)
}
}
}
// 如果未指定过,则从列表中排序并随机选择
avatarList = await getAvatarList(player, e.isPoke ? false : targetCfg.type, mys)
if (avatarList && avatarList.length > 0) {
avatar = lodash.sample(avatarList)
return await Avatar.renderAvatar(e, avatar, renderType)
}
e.reply('在当前米游社公开展示的角色中未能找到适合展示的角色..')
return true
case '设置':
case '选择':
case '挑选':
case '指定':
if (!isSelf) {
e.reply('只能指定自己的哦~')
return true
}
// 选择老婆
actionParam = actionParam.replace(/(|、|;|)/g, ',')
wifeList = actionParam.split(',')
if (lodash.intersection(['全部', '任意', '随机', '全都要'], wifeList).length > 0) {
addRet = ['随机']
} else {
wifeList = lodash.map(wifeList, (name) => {
let char = Character.get(name)
if (char && char.checkWifeType(targetCfg.type)) {
return char.name
}
})
wifeList = lodash.filter(lodash.uniq(wifeList), (d) => !!d)
addRet = wifeList
if (addRet.length === 0) {
e.reply(`在可选的${targetCfg.keyword[0]}列表中未能找到 ${actionParam} ~`)
return true
}
}
await selfUser.setCfg(`wife.${targetCfg.key}`, addRet)
e.reply(`${targetCfg.keyword[0]}已经设置:${addRet.join('')}`)
return true
case '列表':
case '是':
case '是谁':
// 查看当前选择老婆
if (!isSelf) {
e.reply('只能查看自己的哦~')
return true
}
wifeList = await selfUser.getCfg(`wife.${targetCfg.key}`, [])
if (wifeList && wifeList.length > 0) {
e.reply(`你的${targetCfg.keyword[0]}是:${wifeList.join('')}`)
} else {
e.reply(`尚未设置,回复#${targetCfg.keyword[0]}设置+角色名 来设置,如果设置多位请用逗号间隔`)
}
break
}
return true
},
async poke (e) {
return await Wife.render(e)
}
}
export default Wife