diff --git a/apps/character/AvatarCard.js b/apps/character/AvatarCard.js index c6ae1417..185efe93 100644 --- a/apps/character/AvatarCard.js +++ b/apps/character/AvatarCard.js @@ -1,4 +1,4 @@ -import { Character, MysApi, Player } from '#miao.models' +import { Button, Character, MysApi, Player } from '#miao.models' import { Cfg, Common, Meta } from '#miao' import lodash from 'lodash' import moment from 'moment' @@ -79,7 +79,7 @@ let Avatar = { scale = 1.45 } // 渲染图像 - let msgRes = await Common.render('character/character-card', { + let msgRes = await e.reply([await Common.render('character/character-card', { saveId: uid, uid, bg, @@ -88,7 +88,7 @@ let Avatar = { custom, isRelease, data - }, { e, scale, retMsgId: true }) + }, { e, scale, retType: "base64" }), new Button(e).profile(char, uid)]) if (msgRes) { // 如果消息发送成功,就将message_id和图片路径存起来,3小时过期 const message_id = [e.message_id] diff --git a/apps/character/AvatarWife.js b/apps/character/AvatarWife.js index 6ac144ba..b51b1561 100644 --- a/apps/character/AvatarWife.js +++ b/apps/character/AvatarWife.js @@ -102,11 +102,11 @@ const Wife = { let renderType = (action === '卡片' ? 'card' : 'photo') let addRet = [] switch (action) { - case '卡片': case '照片': case '相片': case '图片': case '写真': + case '卡片': // 展示老婆卡片 // 如果选择过,则进行展示 if (!e.isPoke) { diff --git a/apps/gacha/Gacha.js b/apps/gacha/Gacha.js index d4b7f2b7..7d1bd7fd 100644 --- a/apps/gacha/Gacha.js +++ b/apps/gacha/Gacha.js @@ -1,7 +1,7 @@ import { Common } from '#miao' import { getTargetUid } from '../profile/ProfileCommon.js' import GachaData from './GachaData.js' -import { Character, Player } from '#miao.models' +import { Button, Character, Player } from '#miao.models' let Gacha = { async detail (e) { @@ -29,15 +29,15 @@ let Gacha = { let gacha = GachaData.analyse(e.user_id, uid, type) if (!gacha) { - e.reply(`UID:${uid} 本地暂无抽卡信息,请通过【#抽卡帮助】获得绑定帮助...`) + e.reply([`UID:${uid} 本地暂无抽卡信息,请通过【#抽卡帮助】获得绑定帮助...`, new Button(e).gacha()]) return true } - await Common.render('gacha/gacha-detail', { + this.reply([await Common.render('gacha/gacha-detail', { save_id: uid, uid, gacha, face: Gacha.getFace(uid) - }, { e, scale: 1.4, retMsgId: true }) + }, { e, scale: 1.4, retType: "base64" }), new Button(e).gacha()]) }, async stat (e) { let msg = e.msg.replace(/#|统计|分析|池/g, '') @@ -58,15 +58,15 @@ let Gacha = { } let gacha = GachaData.stat(e.user_id, uid, type) if (!gacha) { - e.reply(`UID:${uid} 本地暂无抽卡信息,请通过【#抽卡帮助】获得绑定帮助...`) + e.reply([`UID:${uid} 本地暂无抽卡信息,请通过【#抽卡帮助】获得绑定帮助...`, new Button(e).gacha()]) return true } - await Common.render('gacha/gacha-stat', { + e.reply([await Common.render('gacha/gacha-stat', { save_id: uid, uid, gacha, face: Gacha.getFace(uid) - }, { e, scale: 1.4 }) + }, { e, scale: 1.4, retType: "base64" }), new Button(e).gacha()]) }, getFace (uid) { @@ -87,4 +87,4 @@ let Gacha = { } } } -export default Gacha +export default Gacha \ No newline at end of file diff --git a/apps/profile.js b/apps/profile.js index cd80b1b2..42c41ad4 100644 --- a/apps/profile.js +++ b/apps/profile.js @@ -18,13 +18,13 @@ app.reg({ name: '面板角色列表', desc: '查看当前已获取面板数据的角色列表', fn: ProfileList.render, - rule: /^#(星铁|原神)?(面板角色|角色面板|面板)(列表)?\s*(\d{9,10})?$/ + rule: /^#(星铁|原神)?(面板角色|角色面板|面板)(列表)?\s*(\d{9})?$/ }, profileDetail: { name: '角色面板', fn: ProfileDetail.detail, - rule: /^#*([^#]+)\s*(详细|详情|面板|面版|圣遗物|武器[1-7]?|伤害([1-9]+\d*)?)\s*(\d{9,10})*(.*[换变改].*)?$/ + rule: /^#*([^#]+)\s*(详细|详情|面板|面版|圣遗物|武器[1-7]?|伤害([1-9]+\d*)?)\s*(\d{9})*(.*[换变改].*)?$/ }, profileChange: { @@ -66,7 +66,7 @@ app.reg({ artisList: { name: '面板圣遗物列表', fn: profileArtisList, - rule: /^#圣遗物列表\s*(\d{9,10})?$/ + rule: /^#圣遗物列表\s*(\d{9})?$/ }, profileStat: { @@ -87,7 +87,7 @@ app.reg({ name: '角色查询', fn: ProfileStat.avatarList, rule: /^#喵喵(角色|查询)[ |0-9]*$/, - yzRule: /^(#(五|四|5|4|星)*(角色|查询|查询角色|角色查询|人物)[ |0-9]*$)|(^(#*uid|#*UID)\+*([1-9]|18)[0-9]{8}$)|(^#[\+|+]*([1-9]|18)[0-9]{8})/, + yzRule: /^(#(五|四|5|4|星)*(角色|查询|查询角色|角色查询|人物)[ |0-9]*$)|(^(#*uid|#*UID)\+*[1|2|5-9][0-9]{8}$)|(^#[\+|+]*[1|2|5-9][0-9]{8})/, yzCheck: () => Cfg.get('avatarList', false) }, @@ -114,7 +114,7 @@ app.reg({ name: '面板更新', describe: '【#角色】 获取游戏橱窗详情数据', fn: ProfileList.refresh, - rule: /^#(星铁|原神)?(全部面板更新|更新全部面板|获取游戏角色详情|更新面板|面板更新)\s*(\d{9,10})?$/ + rule: /^#(星铁|原神)?(全部面板更新|更新全部面板|获取游戏角色详情|更新面板|面板更新)\s*(\d{9})?$/ }, uploadImg: { @@ -142,13 +142,13 @@ app.reg({ name: '删除面板', describe: '【#角色】 删除游戏橱窗详情数据', fn: ProfileList.del, - rule: /^#(删除全部面板|删除面板|删除面板数据)\s*(\d{9,10})?$/ + rule: /^#(删除全部面板|删除面板|删除面板数据)\s*(\d{9})?$/ }, profileReload: { name: '重新加载面板', fn: ProfileList.reload, - rule: /^#(星铁|原神)?(加载|重新加载|重载)面板\s*(\d{9,10})?$/ + rule: /^#(星铁|原神)?(加载|重新加载|重载)面板\s*(\d{9})?$/ } }) diff --git a/apps/profile/ProfileArtis.js b/apps/profile/ProfileArtis.js index c927b14b..2c8ae191 100644 --- a/apps/profile/ProfileArtis.js +++ b/apps/profile/ProfileArtis.js @@ -5,7 +5,7 @@ import lodash from 'lodash' import { Cfg, Common, Meta } from '#miao' import { getTargetUid, profileHelp, getProfileRefresh } from './ProfileCommon.js' -import { Artifact, Character, Player } from '#miao.models' +import { Artifact, Button, Character, Player } from '#miao.models' import ArtisMarkCfg from '../../models/artis/ArtisMarkCfg.js' /* @@ -31,7 +31,7 @@ export async function profileArtis (e) { let artisKeyTitle = Artifact.getArtisKeyTitle() // 渲染图像 - return await Common.render('character/artis-mark', { + return e.reply([await Common.render('character/artis-mark', { uid, elem: char.elem, splash: profile.costumeSplash, @@ -43,7 +43,7 @@ export async function profileArtis (e) { charCfg, game, changeProfile: e._profileMsg - }, { e, scale: 1.6 / 1.1 }) + }, { e, scale: 1.6 / 1.1, retType: "base64" }), new Button(e).profile(char, uid)]) } /* @@ -94,4 +94,4 @@ export async function profileArtisList (e) { artis, artisKeyTitle }, { e, scale: 1.4 }) -} +} \ No newline at end of file diff --git a/apps/profile/ProfileChange.js b/apps/profile/ProfileChange.js index eccec22e..30f0761d 100644 --- a/apps/profile/ProfileChange.js +++ b/apps/profile/ProfileChange.js @@ -20,12 +20,12 @@ const ProfileChange = { * @param msg * @returns {{}} */ - matchMsg(msg) { + matchMsg (msg) { if (!/(变|改|换)/.test(msg)) { return false } msg = msg.toLowerCase().replace(/uid ?:? ?/, '').replace('', '') - let regRet = /^#*(\d{9,10})?(.+?)(详细|详情|面板|面版|圣遗物|伤害[1-7]?)?\s*(\d{9,10})?[变换改](.+)/.exec(msg) + let regRet = /^#*(\d{9})?(.+?)(详细|详情|面板|面版|圣遗物|伤害[1-7]?)?\s*(\d{9})?[变换改](.+)/.exec(msg) if (!regRet || !regRet[2]) { return false } @@ -39,31 +39,31 @@ const ProfileChange = { const isGs = game === 'gs' const keyMap = isGs ? { - artis: '圣遗物', - arti1: '花,生之花', - arti2: '毛,羽,羽毛,死之羽', - arti3: '沙,沙漏,表,时之沙', - arti4: '杯,杯子,空之杯', - arti5: '头,冠,理之冠,礼冠,帽子,帽', - weapon: '武器' - } + artis: '圣遗物', + arti1: '花,生之花', + arti2: '毛,羽,羽毛,死之羽', + arti3: '沙,沙漏,表,时之沙', + arti4: '杯,杯子,空之杯', + arti5: '头,冠,理之冠,礼冠,帽子,帽', + weapon: '武器' + } : { - artis: '圣遗物,遗器', - arti1: '头,帽子,头部', - arti2: '手,手套,手部', - arti3: '衣,衣服,甲,躯干,', - arti4: '鞋,靴,鞋子,靴子,脚,脚部', - arti5: '球,位面球', - arti6: '绳,线,链接绳,连接绳', - weapon: '武器,光锥' - } + artis: '圣遗物,遗器', + arti1: '头,帽子,头部', + arti2: '手,手套,手部', + arti3: '衣,衣服,甲,躯干,', + arti4: '鞋,靴,鞋子,靴子,脚,脚部', + arti5: '球,位面球', + arti6: '绳,线,链接绳,连接绳', + weapon: '武器,光锥' + } let keyTitleMap = {} lodash.forEach(keyMap, (val, key) => { lodash.forEach(val.split(','), (v) => { keyTitleMap[v] = key }) }) - const keyReg = new RegExp(`^(\\d{9,10})?\\s*(.+?)\\s*(\\d{9,10})?\\s*((?:${lodash.keys(keyTitleMap).join('|')}|\\+)+)$`) + const keyReg = new RegExp(`^(\\d{9})?\\s*(.+?)\\s*(\\d{9})?\\s*((?:${lodash.keys(keyTitleMap).join('|')}|\\+)+)$`) ret.char = char.id ret.mode = regRet[3] === '换' ? '面板' : regRet[3] @@ -197,7 +197,7 @@ const ProfileChange = { * @param game * @returns {Avatar|boolean} */ - getProfile(uid, charid, ds, game = 'gs') { + getProfile (uid, charid, ds, game = 'gs') { if (!charid) { return false } diff --git a/apps/profile/ProfileCommon.js b/apps/profile/ProfileCommon.js index af85252d..d8fac8c9 100644 --- a/apps/profile/ProfileCommon.js +++ b/apps/profile/ProfileCommon.js @@ -2,13 +2,13 @@ * 面板公共方法及处理 * */ import { Version } from '#miao' -import { Character, MysApi, Player } from '#miao.models' +import { Button, Character, MysApi, Player } from '#miao.models' /* * 获取面板查询的 目标uid * */ const _getTargetUid = async function (e) { - let uidReg = /([1-9]|18)[0-9]{8}/ + let uidReg = /[1-9][0-9]{8}/ if (e.uid && uidReg.test(e.uid)) { return e.uid @@ -28,7 +28,7 @@ const _getTargetUid = async function (e) { } uid = user.uid if ((!uid || !uidReg.test(uid)) && !e._replyNeedUid) { - e.reply('请先发送【#绑定+你的UID】来绑定查询目标\n星铁请使用【#星铁绑定+UID】') + e.reply(['请先发送【#绑定+你的UID】来绑定查询目标\n星铁请使用【#星铁绑定+UID】', new Button(e).bindUid()]) e._replyNeedUid = true return false } @@ -38,7 +38,7 @@ const _getTargetUid = async function (e) { return uid || false } -export async function getTargetUid(e) { +export async function getTargetUid (e) { let uid = await _getTargetUid(e) if (uid) { e.uid = uid @@ -46,7 +46,7 @@ export async function getTargetUid(e) { return uid } -export async function getProfileRefresh(e, avatar) { +export async function getProfileRefresh (e, avatar) { let char = Character.get(avatar) if (!char) { return false @@ -61,7 +61,7 @@ export async function getProfileRefresh(e, avatar) { } if (!profile || !profile.hasData) { if (!e._isReplyed) { - e.reply(`请确认${char.name}已展示在【游戏内】的角色展柜中,并打开了“显示角色详情”。然后请使用 #更新面板\n命令来获取${char.name}的面板详情`) + e.reply([`请确认${char.name}已展示在【游戏内】的角色展柜中,并打开了“显示角色详情”。然后请使用 #更新面板\n命令来获取${char.name}的面板详情`, new Button(e).profileList(player.uid), new Button(e).profile(char, player.uid)]) } return false } @@ -71,7 +71,7 @@ export async function getProfileRefresh(e, avatar) { /* * 面板帮助 * */ -export async function profileHelp(e) { +export async function profileHelp (e) { e.reply(segment.image(`file://${process.cwd()}/plugins/miao-plugin/resources/character/imgs/help.jpg`)) return true } diff --git a/apps/profile/ProfileDetail.js b/apps/profile/ProfileDetail.js index c3d00cc1..59bb398e 100644 --- a/apps/profile/ProfileDetail.js +++ b/apps/profile/ProfileDetail.js @@ -2,6 +2,7 @@ import lodash from 'lodash' import { getTargetUid, getProfileRefresh } from './ProfileCommon.js' import ProfileList from './ProfileList.js' import { Cfg, Common, Data, Format } from '#miao' +import { Button } from '#miao.models' import { MysApi, ProfileRank, Character, Weapon, Artifact } from '#miao.models' import ProfileChange from './ProfileChange.js' import { profileArtis } from './ProfileArtis.js' @@ -125,7 +126,7 @@ let ProfileDetail = { let selfUser = await MysApi.initUser(e) if (!selfUser) { - e.reply('尚未绑定UID') + e.reply(['尚未绑定UID', new Button(e).bindUid()]) return true } @@ -244,7 +245,7 @@ let ProfileDetail = { changeProfile: e._profileMsg } // 渲染图像 - let msgRes = await Common.render('character/profile-detail', renderData, { e, scale: 1.6, retMsgId: true }) + const msgRes = await e.reply([await Common.render('character/profile-detail', renderData, { e, scale: 1.6, retType: "base64" }), new Button(e).profile(char, uid)]) if (msgRes) { // 如果消息发送成功,就将message_id和图片路径存起来,3小时过期 const message_id = [e.message_id] diff --git a/apps/profile/ProfileList.js b/apps/profile/ProfileList.js index 0bcc8544..420103a1 100644 --- a/apps/profile/ProfileList.js +++ b/apps/profile/ProfileList.js @@ -1,7 +1,7 @@ import lodash from 'lodash' import { getTargetUid } from './ProfileCommon.js' import { Common, Data } from '#miao' -import { ProfileRank, Player, Character } from '#miao.models' +import { Button, ProfileRank, Player, Character } from '#miao.models' const ProfileList = { /** @@ -9,10 +9,10 @@ const ProfileList = { * @param e * @returns {Promise} */ - async refresh(e) { + async refresh (e) { let uid = await getTargetUid(e) if (!uid) { - e._replyNeedUid || e.reply('请先发送【#绑定+你的UID】来绑定查询目标\n星铁请使用【#星铁绑定+UID】') + e._replyNeedUid || e.reply(['请先发送【#绑定+你的UID】来绑定查询目标\n星铁请使用【#星铁绑定+UID】', new Button(e).bindUid()]) return true } @@ -21,7 +21,7 @@ const ProfileList = { await player.refreshProfile(2) if (!player?._update?.length) { - e._isReplyed || e.reply('获取角色面板数据失败,请确认角色已在游戏内橱窗展示,并开放了查看详情。设置完毕后请5分钟后再进行请求~') + e._isReplyed || e.reply(['获取角色面板数据失败,请确认角色已在游戏内橱窗展示,并开放了查看详情。设置完毕后请5分钟后再进行请求~', new Button(e).profileList(uid)]) e._isReplyed = true } else { let ret = {} @@ -32,7 +32,7 @@ const ProfileList = { } }) if (lodash.isEmpty(ret)) { - e._isReplyed || e.reply('获取角色面板数据失败,未能请求到角色数据。请确认角色已在游戏内橱窗展示,并开放了查看详情。设置完毕后请5分钟后再进行请求~') + e._isReplyed || e.reply(['获取角色面板数据失败,未能请求到角色数据。请确认角色已在游戏内橱窗展示,并开放了查看详情。设置完毕后请5分钟后再进行请求~', new Button(e).profileList(uid)]) e._isReplyed = true } else { e.newChar = ret @@ -48,10 +48,10 @@ const ProfileList = { * @returns {Promise} */ - async render(e) { + async render (e) { let uid = await getTargetUid(e) if (!uid) { - e._replyNeedUid || e.reply('请先发送【#绑定+你的UID】来绑定查询目标\n星铁请使用【#星铁绑定+UID】') + e._replyNeedUid || e.reply(['请先发送【#绑定+你的UID】来绑定查询目标\n星铁请使用【#星铁绑定+UID】', new Button(e).bindUid()]) return true } @@ -86,7 +86,7 @@ const ProfileList = { await player.refresh({ profile: true }) } if (!player.hasProfile) { - e.reply(`本地暂无uid${uid}[${player.game}]的面板数据...`) + e.reply([`本地暂无uid${uid}[${player.game}]的面板数据...`, new Button(e).profileList(uid)]) return true } let profiles = player.getProfiles() @@ -129,7 +129,7 @@ const ProfileList = { player.save() // 渲染图像 - return await Common.render('character/profile-list', { + return e.reply([await Common.render('character/profile-list', { save_id: uid, uid, chars, @@ -141,7 +141,7 @@ const ProfileList = { allowRank: rank && rank.allowRank, rankCfg, elem: player.isGs ? 'hydro' : 'sr' - }, { e, scale: 1.6 }) + }, { e, scale: 1.6, retType: "base64" }), new Button(e).profileList(uid, newChar)]) }, /** @@ -149,8 +149,8 @@ const ProfileList = { * @param e * @returns {Promise} */ - async del(e) { - let ret = /^#(删除全部面板|删除面板|删除面板数据)\s*(\d{9,10})?$/.exec(e.msg) + async del (e) { + let ret = /^#(删除全部面板|删除面板|删除面板数据)\s*(\d{9})?$/.exec(e.msg) let uid = await getTargetUid(e) if (!uid) { return true @@ -164,22 +164,22 @@ const ProfileList = { } if (!targetUid) { - e.reply(`你确认要删除面板数据吗? 请回复 #删除面板${uid} 以删除面板数据`) + e.reply([`你确认要删除面板数据吗? 请回复 #删除面板${uid} 以删除面板数据`, new Button(e).profileList(uid)]) return true } let ckUids = (user?.ckUids || []).join(',').split(',') if (!ckUids.includes(targetUid) && !e.isMaster) { - e.reply(`仅允许删除自己的UID数据[${ckUids.join(',')}]`) + e.reply([`仅允许删除自己的UID数据[${ckUids.join(',')}]`, new Button(e).profileList(uid)]) return true } Player.delByUid(targetUid) - e.reply(`UID${targetUid}的本地数据已删除,排名数据已清除...`) + e.reply([`UID${targetUid}的本地数据已删除,排名数据已清除...`, new Button(e).profileList(uid)]) return true }, - async reload(e) { + async reload (e) { let uid = await getTargetUid(e) if (!uid) { return true @@ -189,4 +189,4 @@ const ProfileList = { return ProfileList.render(e) } } -export default ProfileList +export default ProfileList \ No newline at end of file diff --git a/apps/profile/ProfileRank.js b/apps/profile/ProfileRank.js index 80342951..1f10611b 100644 --- a/apps/profile/ProfileRank.js +++ b/apps/profile/ProfileRank.js @@ -1,6 +1,6 @@ import ProfileDetail from './ProfileDetail.js' import { Data, Common, Format, Cfg } from '#miao' -import { Character, ProfileRank, ProfileDmg, Player } from '#miao.models' +import { Button, Character, ProfileRank, ProfileDmg, Player } from '#miao.models' import lodash from 'lodash' export async function groupRank (e) { @@ -61,14 +61,14 @@ export async function groupRank (e) { return await ProfileDetail.render(e, char) } else { if (mode === 'dmg' && !ProfileDmg.dmgRulePath(char.name, char.game)) { - e.reply(`暂无排名:${char.name}暂不支持伤害计算,无法进行排名..`) + e.reply([`暂无排名:${char.name}暂不支持伤害计算,无法进行排名..`, new Button(e).profile(char)]) } else { e.reply('暂无排名:请通过【#面板】查看角色面板以更新排名信息...') } } } else if (type === 'list') { if (mode === 'dmg' && char && !ProfileDmg.dmgRulePath(char.name, char.game)) { - e.reply(`暂无排名:${char.name}暂不支持伤害计算,无法进行排名..`) + e.reply([`暂无排名:${char.name}暂不支持伤害计算,无法进行排名..`, new Button(e).profile(char)]) } else { let uids = [] if (char) { @@ -80,9 +80,9 @@ export async function groupRank (e) { return renderCharRankList({ e, uids, char, mode, groupId }) } else { if (e.isSr) { - e.reply('暂无排名:请通过【*面板】查看角色面板以更新排名信息...') + e.reply(['暂无排名:请通过【*面板】查看角色面板以更新排名信息...', new Button(e).profile(char)]) } else { - e.reply('暂无排名:请通过【#面板】查看角色面板以更新排名信息...') + e.reply(['暂无排名:请通过【#面板】查看角色面板以更新排名信息...', new Button(e).profile(char)]) } } } @@ -114,7 +114,7 @@ export async function resetRank (e) { charName = char.name } await ProfileRank.resetRank(groupId, charId, game) - e.reply(`本群${charName}排名已重置...`) + e.reply([`本群${charName}排名已重置...`, new Button(e).profile(char)]) } /** @@ -266,7 +266,7 @@ async function renderCharRankList ({ e, uids, char, mode, groupId }) { const rankCfg = await ProfileRank.getGroupCfg(groupId) // 渲染图像 - return await Common.render('character/rank-profile-list', { + return e.reply([await Common.render('character/rank-profile-list', { save_id: char.id, game: e.isSr ? 'sr' : 'gs', list, @@ -275,5 +275,5 @@ async function renderCharRankList ({ e, uids, char, mode, groupId }) { bodyClass: `char-${char.name}`, rankCfg, mode - }, { e, scale: 1.4 }) + }, { e, scale: 1.4, retType: "base64" }), new Button(e).profile(char)]) } diff --git a/index.js b/index.js index f13a7646..3ae38215 100644 --- a/index.js +++ b/index.js @@ -1,9 +1,11 @@ import { Data, Version } from '#miao' import Index from './tools/index.js' -if (!global.segment) { +if (!global.segment) global.segment = (await import('oicq')).segment -} + +if (!segment.button) + segment.button = () => "" export * from './apps/index.js'