diff --git a/apps/admin.js b/apps/admin.js index 25688575..47f2b40a 100644 --- a/apps/admin.js +++ b/apps/admin.js @@ -30,9 +30,11 @@ export async function userStat(e) { } export async function rebuildCookie(e) { - if (!e.isMaster) { - return; - } + let MysApi = await e.initMysApi({ + auth: "master" + }); + if (!MysApi) return true; + let count = 0; for (let qq in NoteCookie) { let uid = NoteCookie[qq].uid; @@ -45,3 +47,53 @@ export async function rebuildCookie(e) { } e.reply(`重建${count}个缓存`) } + +export async function userStatus(e, { Models }) { + let MysApi = await e.initMysApi({ + auth: "master" + }); + if (!MysApi) return true; + + let { MysUser } = Models; + let userList = await MysUser.getAll(); + let ret = []; + for (let idx in userList) { + let data = userList[idx]; + ret.push(`UID:${data.uid}, Count:${data.count}`); + } + e.reply(ret.join("\n")); + + return true; + +} + +export async function userCacheRebuild(e, { Models }) { + let MysApi = await e.initMysApi({ + auth: "master" + }); + if (!MysApi) return true; + + let { MysUser } = Models; + await MysUser._delCache(); + e.reply("用户缓存已清除"); + return true; +} + +export async function mysUserCk(e, { Models }) { + let MysApi = await e.initMysApi({ + auth: "master" + }); + if (!MysApi) return true; + + let uid = e.msg.replace("#ck", ""); + + let { MysUser } = Models; + let user = await MysUser.get(uid); + + let ret = []; + console.log(user); + let cookie = await user.getCookie(); + console.log(cookie) + e.reply("完成"); + return true; +} \ No newline at end of file diff --git a/apps/character.js b/apps/character.js index 2935650d..9b7f0d8e 100644 --- a/apps/character.js +++ b/apps/character.js @@ -21,47 +21,35 @@ export async function init(isUpdate = false) { } // 查看当前角色 -export async function character(e, { render, MysApi, User }) { +export async function character(e, { render, User }) { if (!e.msg) { return; } - let name = e.msg.replace(/#?|老婆|老公|[1|2|5][0-9]{8}/g, "").trim(); + let name = e.msg.replace(/#|老婆|老公|[1|2|5][0-9]{8}/g, "").trim(); + let char = Character.get(name); if (!char) { return false; } - let check = await User.checkAuth(e, "bind", { - action: "查询角色详情" + + let MysApi = await e.initMysApi({ + auth: "all", + target: "uid", + cookieType: "all", + actionName: "查询角色详情" }); - if (!check) { + + if (!MysApi) { return true; } - let roleId = char.id; + let roleId = char.id, uid = e.targetUser.uid; - getUrl = MysApi.getUrl; - getServer = MysApi.getServer; - - let { selfUser, targetUser } = e; - if (!targetUser.uid) { - e.reply("未能找到查询角色"); - return true; - } - - let uid = targetUser.uid; - - let res = await MysApi.requestData(e, uid, "character"); + let charData = await MysApi.getData('character'); + if (!charData) return true; - if (res.retcode == "-1") { - return true; - } - - if (checkRetcode(res, uid, e)) { - return true; - } - - let avatars = res.data.avatars; + let avatars = charData.avatars; let length = avatars.length; avatars = lodash.keyBy(avatars, "id"); @@ -86,49 +74,30 @@ export async function character(e, { render, MysApi, User }) { } return true; } + let avatar = avatars[roleId]; - limitSet(e); - - avatars = avatars[roleId]; - - - let talent = await getTalent(e, uid, avatars, MysApi); - let crownNum = lodash.filter(lodash.map(talent, (d) => d.level_original), (d) => d >= 10).length - let base64 = await render("miao-plugin", "character", { - _plugin: true, - save_id: uid, - uid: uid, - talent, - crownNum, - talentMap: { a: "普攻", e: "战技", q: "爆发" }, - bg: getCharacterImg(char.name), - ...getCharacterData(avatars), - ds: char.getData("name,id,title,desc"), - }, "png"); - - if (base64) { - e.reply(segment.image(`base64://${base64}`)); - } + renderAvatar(e, avatar, MysApi, render); return true; //事件结束不再往下 } //#老婆 -export async function wife(e, { render, MysApi, User }) { +export async function wife(e, { render, User }) { let msg = e.msg; if (!msg) { return; } - let check = await User.checkAuth(e, "bind", { - action: "查询角色详情" + + let MysApi = await e.initMysApi({ + auth: "all", + target: "uid", + cookieType: "all", + actionName: "查询信息" }); - if (!check) { - return true; - } + if (!MysApi) return true; msg = msg.replace(/#|\w/g, ""); - let i = 0; if (["老婆", "媳妇", "妻子", "娘子", "女朋友", "女友", "女神"].includes(msg)) { i = 0; @@ -143,25 +112,10 @@ export async function wife(e, { render, MysApi, User }) { return true; } - let { selfUser, targetUser } = e; - if (!targetUser.uid) { - e.reply("暂未查询到角色信息"); - return true; - } + let data = await MysApi.getData("character"); + if (!data) return true; - let uid = targetUser.uid; - - let res = await MysApi.requestData(e, uid, "character"); - - if (res.retcode == "-1") { - return true; - } - - if (checkRetcode(res, uid, e)) { - return true; - } - - let avatars = res.data.avatars; + let avatars = data.avatars; if (avatars.length <= 0) { return true; @@ -177,27 +131,6 @@ export async function wife(e, { render, MysApi, User }) { val.rarity = 5; } - //等级+好感*10+命座*5+五星*20 - val.sort = val.level + val.fetter * 10 + val.actived_constellation_num * 5 * (val.rarity - 3) + (val.rarity - 4) * 20; - - //超过80级的每级*5 - if (val.level > 80) { - val.sort += (val.level - 80) * 5; - } - - //武器 等级+五星*25+精炼*5 - val.sort += val.weapon.level + (val.weapon.rarity - 4) * 25 + val.weapon.affix_level * 5; - - //武器超过80级的每级*5 - if (val.weapon.level > 80) { - val.sort += (val.weapon.level - 80) * 5; - } - - //圣遗物等级 - for (let rel of val.reliquaries) { - val.sort += rel.level * 1.2; - } - list.push(val); } @@ -205,18 +138,25 @@ export async function wife(e, { render, MysApi, User }) { return true; } - //limitSet(e); + let sortKey = "level,fetter,weapon_level,rarity,weapon_rarity,cons,weapon_affix_level"; - list = lodash.orderBy(list, ["sort"], ["desc"]); + list = lodash.orderBy(list, sortKey, lodash.repeat("desc,", sortKey.length).split(",")); + let avatar = lodash.sample(list.slice(0, 5)); + renderAvatar(e, avatar, MysApi, render); + return true; +} - avatars = lodash.sample(list.slice(0, 5)); +// 渲染角色卡片 +async function renderAvatar(e, avatar, MysApi, render) { + let talent = await getTalent(e, avatar, MysApi); + // 计算皇冠个数 + let crownNum = lodash.filter(lodash.map(talent, (d) => d.level_original), (d) => d >= 10).length; - let talent = await getTalent(e, uid, avatars, MysApi); + let uid = e.targetUser.uid; - let char = Character.get(avatars.name); - - let crownNum = lodash.filter(lodash.map(talent, (d) => d.level_original), (d) => d >= 10).length + let char = Character.get(avatar.name); + //渲染图像 let base64 = await render("miao-plugin", "character", { _plugin: true, save_id: uid, @@ -224,35 +164,29 @@ export async function wife(e, { render, MysApi, User }) { talent, crownNum, talentMap: { a: "普攻", e: "战技", q: "爆发" }, - bg: getCharacterImg(char.name), - ...getCharacterData(avatars), + bg: getCharacterImg(avatar.name), + ...getCharacterData(avatar), ds: char.getData("name,id,title,desc"), }, "png"); if (base64) { e.reply(segment.image(`base64://${base64}`)); } - - return true; -} - - -// 设置角色图像 -export async function setCharacterImg(e, render) { - } //获取角色技能数据 -async function getTalent(e, uid, avatars, MysApi) { +async function getTalent(e, avatars, MysApi) { let skill = {}; - let skillres = await MysApi.requestData(e, uid, "detail", { + let skillres = await MysApi.getData("detail", { avatar_id: avatars.id, }); + if (skillres.retcode == 0 && skillres.data && skillres.data.skill_list) { skill.id = avatars.id; let skill_list = lodash.orderBy(skillres.data.skill_list, ["id"], ["asc"]); + for (let val of skill_list) { val.level_original = val.level_current; if (val.name.includes("普通攻击")) { @@ -282,12 +216,12 @@ async function getTalent(e, uid, avatars, MysApi) { skill.q.level_current += 3; } } - } - return skill; } + +// 获取角色数据 function getCharacterData(avatars) { let list = []; let set = {}; @@ -362,231 +296,7 @@ function getCharacterData(avatars) { }; } -//获取uid -async function getUid(e) { - let res; - let reg = /[1|2|5][0-9]{8}/g; - //从消息中获取 - if (e.msg) { - res = e.msg.match(reg); - if (res) { - //redis保存uid - redis.set(`genshin:uid:${e.user_id}`, res[0], { EX: 2592000 }); - return { isSelf: false, uid: res[0] }; - } - } - - //从群昵称获取 - res = e.sender.card.toString().match(reg); - - if (res) { - //redis保存uid - redis.set(`genshin:uid:${e.user_id}`, res[0], { EX: 2592000 }); - - return { isSelf: true, uid: res[0] }; - } - - //从redis获取 - res = await redis.get(`genshin:uid:${e.user_id}`); - if (res) { - redis.expire(`genshin:uid:${e.user_id}`, 2592000); - return { isSelf: true, uid: res }; - } - - return { isSelf: true, uid: false }; -} - -async function mysApi(e, uid, type, data = {}) { - if (BotConfig.mysCookies.length <= 0) { - Bot.logger.error("请打开config.js,配置米游社cookie"); - return { retcode: -300 }; - } - - let dayEnd = getDayEnd(); - - let cookie, index, isNew; - let selfCookie = NoteCookie[e.user_id]; - - //私聊发送的cookie - if (selfCookie && selfCookie.uid == uid) { - cookie = selfCookie.cookie; - } - //配置里面的cookie - else if (BotConfig.dailyNote && BotConfig.dailyNote[e.user_id] && BotConfig.dailyNote[e.user_id].uid == uid) { - cookie = BotConfig.dailyNote[e.user_id].cookie; - } else { - //获取uid集合 - let uid_arr = await redis.get(`genshin:ds:qq:${e.user_id}`); - - if (uid_arr) { - uid_arr = JSON.parse(uid_arr); - if (!uid_arr.includes(uid)) { - uid_arr.push(uid); - - await redis.set(`genshin:ds:qq:${e.user_id}`, JSON.stringify(uid_arr), { - EX: dayEnd, - }); - } - } else { - uid_arr = [uid]; - - await redis.set(`genshin:ds:qq:${e.user_id}`, JSON.stringify(uid_arr), { - EX: dayEnd, - }); - } - - if (uid_arr.length > e.groupConfig.mysUidLimit && !e.isMaster) { - return { retcode: -200 }; - } - - //限制无用uid查询 - if (uid < 100000050) { - return { retcode: 10102, message: "Data is not public for the user" }; - } - - isNew = false; - index = await redis.get(`genshin:ds:uid:${uid}`); - if (!index) { - //获取没有到30次的index - for (let i in BotConfig.mysCookies) { - //跳过达到上限的cookie - if (await redis.get(`genshin:ds:max:${i}}`)) { - continue; - } - let count = await redis.sendCommand(["scard", `genshin:ds:index:${i}`]); - if (count < 27) { - index = i; - break; - } - } - //查询已达上限 - if (!index) { - return { retcode: -100 }; - } - isNew = true; - } - if (!BotConfig.mysCookies[index]) { - return { retcode: -300 }; - } - - if (!BotConfig.mysCookies[index].includes("ltoken")) { - Bot.logger.error("米游社cookie错误,请重新配置"); - return { retcode: -400 }; - } - } - - let { url, headers, query, body } = getUrl(type, uid, data); - headers.Cookie = cookie || BotConfig.mysCookies[index]; - - let param = { - headers, - timeout: 10000, - }; - if (body) { - param.method = "post"; - param.body = body; - } else { - param.method = "get"; - } - - let response = {}; - try { - response = await fetch(url, param); - } catch (error) { - Bot.logger.error(error); - return false; - } - if (!response.ok) { - Bot.logger.error(response); - return false; - } - const res = await response.json(); - - if (!res) { - Bot.logger.mark(`mys接口没有返回`); - return false; - } - - if (isNew) { - await redis.sendCommand(["sadd", `genshin:ds:index:${index}`, uid]); - redis.expire(`genshin:ds:index:${index}`, dayEnd); - redis.set(`genshin:ds:uid:${uid}`, index, { EX: dayEnd }); - } - - if (res.retcode != 0 && ![10102, 1008, -1].includes(res.retcode)) { - let ltuid = headers.Cookie.match(/ltuid=(\w{0,9})/g)[0].replace(/ltuid=|;/g, ""); - - if (selfCookie && selfCookie.uid == uid) { - Bot.logger.mark(`mys接口报错:${JSON.stringify(res)},体力配置cookie,ltuid:${ltuid}`); - //体力cookie失效 - if (res.message == "Please login") { - delete NoteCookie[e.user_id]; - } - } else { - Bot.logger.mark(`mys接口报错:${JSON.stringify(res)},第${Number(index) + 1}个cookie,ltuid:${ltuid}`); - - //标记达到上限的cookie,自动切换下一个 - if ([10101].includes(res.retcode)) { - redis.set(`genshin:ds:max:${index}`, "1", { EX: dayEnd }); - } - } - } - - return res; -} - -function checkRetcode(res, uid, e) { - let qqName = ""; - switch (res.retcode) { - case 0: - Bot.logger.debug(`mys查询成功:${uid}`); - return false; - case -1: - break; - case -100: - e.reply("无法查询,已达上限\n请配置更多cookie"); - break; - case -200: - qqName = lodash.truncate(e.sender.card, { length: 8 }); - e.reply([segment.at(e.user_id, qqName), "\n今日查询已达上限"]); - break; - case -300: - e.reply("尚未配置公共查询cookie,无法查询原神角色信息\n私聊发送【配置cookie】进行设置"); - break; - case -400: - e.reply("米游社cookie错误,请重新配置"); - break; - case 1001: - case 10001: - case 10103: - e.reply("米游社接口报错,暂时无法查询"); - break; - case 1008: - qqName = lodash.truncate(e.sender.card, { length: 8 }); - e.reply([segment.at(e.user_id, qqName), "\n请先去米游社绑定角色"]); - break; - case 10101: - e.reply("查询已达今日上限"); - break; - case 10102: - if (res.message == "Data is not public for the user") { - qqName = lodash.truncate(e.sender.card, { length: 8 }); - e.reply([segment.at(e.user_id, qqName), "\n米游社数据未公开"]); - } else { - e.reply(`id:${uid}请先去米游社绑定角色`); - } - break; - } - - return true; -} - -/** - * @param {角色昵称} keyword - * @param {是否搜索角色默认名} search_val - * @returns - */ export function roleIdToName(keyword, search_val = false) { if (!keyword) { return false; diff --git a/index.js b/index.js index 3e0b44c7..65bb1a7e 100644 --- a/index.js +++ b/index.js @@ -1,21 +1,23 @@ export const rule = { character: { prehash: true, - reg: "^#(.*)(#.*)?$", - priority: 208, + reg: "^#(.*)?$", + priority: 203, describe: "【#刻晴】角色详情", }, wife: { - reg: "^#(老婆|妻子|媳妇|娘子|女朋友|女友|女神|老公|丈夫|夫君|郎君|男朋友|男友|男神|女儿|儿子)(1|2)*$", - priority: 206, + prehash: true, + reg: "^#(老婆|妻子|媳妇|娘子|女朋友|女友|女神|老公|丈夫|夫君|郎君|男朋友|男友|男神|女儿|儿子)[ |0-9]*$", + priority: 203, describe: "【#老婆,#老公,#女儿】角色详情", }, + /* setCharacterImg: { prehash: true, reg: "^#(添加|更新)(.*)图片(#.*)?(上|右|下|左)?$", priority: 208, }, - +*/ userStat: { prehash: true, reg: "^#*user\s*\d*", @@ -24,11 +26,27 @@ export const rule = { rebuildCookie: { prehash: true, reg: "#rebuild" + }, + userStatus: { + prehash: true, + reg: "^#cc$", + priority: 200 + }, + + userCacheRebuild: { + prehash: true, + reg: "^#dd$", + priority: 200 + }, + mysUserCk: { + prehash: true, + reg: "^#ck[0-9]+$", + priority: 200 } }; -import { character, setCharacterImg, wife } from "./apps/character.js"; -import { userStat, rebuildCookie } from "./apps/admin.js"; +import { character, wife } from "./apps/character.js"; +import { userStat, rebuildCookie, userStatus, userCacheRebuild, mysUserCk } from "./apps/admin.js"; -export { character, setCharacterImg, userStat, rebuildCookie, wife }; +export { character, userStat, rebuildCookie, wife, userStatus, userCacheRebuild, mysUserCk }; diff --git a/resources/characterImg/default/01.jpg b/resources/characterImg/default/01.jpg new file mode 100644 index 00000000..2b4c55e6 Binary files /dev/null and b/resources/characterImg/default/01.jpg differ diff --git a/resources/characterImg/default/02.jpg b/resources/characterImg/default/02.jpg new file mode 100644 index 00000000..22ab033f Binary files /dev/null and b/resources/characterImg/default/02.jpg differ diff --git a/resources/characterImg/优菈/13.jpg b/resources/characterImg/优菈/13.jpg new file mode 100644 index 00000000..d05b95af Binary files /dev/null and b/resources/characterImg/优菈/13.jpg differ diff --git a/resources/characterImg/优菈/14.jpg b/resources/characterImg/优菈/14.jpg new file mode 100644 index 00000000..3c05e3ee Binary files /dev/null and b/resources/characterImg/优菈/14.jpg differ diff --git a/resources/characterImg/八重神子/23.jpg b/resources/characterImg/八重神子/23.jpg new file mode 100644 index 00000000..ca2c0334 Binary files /dev/null and b/resources/characterImg/八重神子/23.jpg differ diff --git a/resources/characterImg/刻晴/28.jpg b/resources/characterImg/刻晴/28.jpg new file mode 100644 index 00000000..0f5a8d22 Binary files /dev/null and b/resources/characterImg/刻晴/28.jpg differ diff --git a/resources/characterImg/刻晴/29.jpg b/resources/characterImg/刻晴/29.jpg new file mode 100644 index 00000000..4cf43833 Binary files /dev/null and b/resources/characterImg/刻晴/29.jpg differ diff --git a/resources/characterImg/刻晴/30.jpg b/resources/characterImg/刻晴/30.jpg new file mode 100644 index 00000000..915de2a3 Binary files /dev/null and b/resources/characterImg/刻晴/30.jpg differ diff --git a/resources/characterImg/刻晴/31.jpg b/resources/characterImg/刻晴/31.jpg new file mode 100644 index 00000000..407045e1 Binary files /dev/null and b/resources/characterImg/刻晴/31.jpg differ diff --git a/resources/characterImg/夜兰/01.jpg b/resources/characterImg/夜兰/01.jpg new file mode 100644 index 00000000..77b19f70 Binary files /dev/null and b/resources/characterImg/夜兰/01.jpg differ diff --git a/resources/characterImg/宵宫/01.jpg b/resources/characterImg/宵宫/01.jpg index a0afdd25..16792367 100644 Binary files a/resources/characterImg/宵宫/01.jpg and b/resources/characterImg/宵宫/01.jpg differ diff --git a/resources/characterImg/宵宫/02.jpg b/resources/characterImg/宵宫/02.jpg index 16792367..002ada75 100644 Binary files a/resources/characterImg/宵宫/02.jpg and b/resources/characterImg/宵宫/02.jpg differ diff --git a/resources/characterImg/宵宫/03.jpg b/resources/characterImg/宵宫/03.jpg index 002ada75..97bd4410 100644 Binary files a/resources/characterImg/宵宫/03.jpg and b/resources/characterImg/宵宫/03.jpg differ diff --git a/resources/characterImg/宵宫/04.jpg b/resources/characterImg/宵宫/04.jpg new file mode 100644 index 00000000..e16111d7 Binary files /dev/null and b/resources/characterImg/宵宫/04.jpg differ diff --git a/resources/characterImg/宵宫/05.jpg b/resources/characterImg/宵宫/05.jpg new file mode 100644 index 00000000..07757a0c Binary files /dev/null and b/resources/characterImg/宵宫/05.jpg differ diff --git a/resources/characterImg/宵宫/06.jpg b/resources/characterImg/宵宫/06.jpg new file mode 100644 index 00000000..41f48a45 Binary files /dev/null and b/resources/characterImg/宵宫/06.jpg differ diff --git a/resources/characterImg/宵宫/07.jpg b/resources/characterImg/宵宫/07.jpg new file mode 100644 index 00000000..fd9bf862 Binary files /dev/null and b/resources/characterImg/宵宫/07.jpg differ diff --git a/resources/characterImg/宵宫/08.jpg b/resources/characterImg/宵宫/08.jpg new file mode 100644 index 00000000..97a0dc8e Binary files /dev/null and b/resources/characterImg/宵宫/08.jpg differ diff --git a/resources/characterImg/宵宫/09.jpg b/resources/characterImg/宵宫/09.jpg new file mode 100644 index 00000000..e8514c2d Binary files /dev/null and b/resources/characterImg/宵宫/09.jpg differ diff --git a/resources/characterImg/宵宫/10.jpg b/resources/characterImg/宵宫/10.jpg new file mode 100644 index 00000000..7b6b06df Binary files /dev/null and b/resources/characterImg/宵宫/10.jpg differ diff --git a/resources/characterImg/宵宫/11.jpg b/resources/characterImg/宵宫/11.jpg new file mode 100644 index 00000000..0ae9fa72 Binary files /dev/null and b/resources/characterImg/宵宫/11.jpg differ diff --git a/resources/characterImg/宵宫/12.jpg b/resources/characterImg/宵宫/12.jpg new file mode 100644 index 00000000..a7847c9b Binary files /dev/null and b/resources/characterImg/宵宫/12.jpg differ diff --git a/resources/characterImg/宵宫/13.jpg b/resources/characterImg/宵宫/13.jpg new file mode 100644 index 00000000..07caba08 Binary files /dev/null and b/resources/characterImg/宵宫/13.jpg differ diff --git a/resources/characterImg/宵宫/14.jpg b/resources/characterImg/宵宫/14.jpg new file mode 100644 index 00000000..d981a640 Binary files /dev/null and b/resources/characterImg/宵宫/14.jpg differ diff --git a/resources/characterImg/宵宫/15.jpg b/resources/characterImg/宵宫/15.jpg new file mode 100644 index 00000000..04579881 Binary files /dev/null and b/resources/characterImg/宵宫/15.jpg differ diff --git a/resources/characterImg/枫原万叶/12.jpg b/resources/characterImg/枫原万叶/12.jpg new file mode 100644 index 00000000..14938954 Binary files /dev/null and b/resources/characterImg/枫原万叶/12.jpg differ diff --git a/resources/characterImg/琴/7.jpg b/resources/characterImg/琴/7.jpg new file mode 100644 index 00000000..72e0b9c3 Binary files /dev/null and b/resources/characterImg/琴/7.jpg differ diff --git a/resources/characterImg/甘雨/28.jpg b/resources/characterImg/甘雨/28.jpg new file mode 100644 index 00000000..5ed43d98 Binary files /dev/null and b/resources/characterImg/甘雨/28.jpg differ diff --git a/resources/characterImg/甘雨/29.jpg b/resources/characterImg/甘雨/29.jpg new file mode 100644 index 00000000..6f35760b Binary files /dev/null and b/resources/characterImg/甘雨/29.jpg differ diff --git a/resources/characterImg/甘雨/30.jpg b/resources/characterImg/甘雨/30.jpg new file mode 100644 index 00000000..67a2f233 Binary files /dev/null and b/resources/characterImg/甘雨/30.jpg differ diff --git a/resources/characterImg/甘雨/31.jpg b/resources/characterImg/甘雨/31.jpg new file mode 100644 index 00000000..610c0802 Binary files /dev/null and b/resources/characterImg/甘雨/31.jpg differ diff --git a/resources/characterImg/甘雨/32.jpg b/resources/characterImg/甘雨/32.jpg new file mode 100644 index 00000000..694b1761 Binary files /dev/null and b/resources/characterImg/甘雨/32.jpg differ diff --git a/resources/characterImg/甘雨/33.jpg b/resources/characterImg/甘雨/33.jpg new file mode 100644 index 00000000..940dac34 Binary files /dev/null and b/resources/characterImg/甘雨/33.jpg differ diff --git a/resources/characterImg/申鹤/12.jpg b/resources/characterImg/申鹤/12.jpg new file mode 100644 index 00000000..e224503f Binary files /dev/null and b/resources/characterImg/申鹤/12.jpg differ diff --git a/resources/characterImg/神里绫人/01.jpg b/resources/characterImg/神里绫人/01.jpg new file mode 100644 index 00000000..df18e401 Binary files /dev/null and b/resources/characterImg/神里绫人/01.jpg differ diff --git a/resources/characterImg/神里绫华/25.jpg b/resources/characterImg/神里绫华/25.jpg new file mode 100644 index 00000000..9e253725 Binary files /dev/null and b/resources/characterImg/神里绫华/25.jpg differ diff --git a/resources/characterImg/神里绫华/26.jpg b/resources/characterImg/神里绫华/26.jpg new file mode 100644 index 00000000..ed6b800a Binary files /dev/null and b/resources/characterImg/神里绫华/26.jpg differ diff --git a/resources/characterImg/神里绫华/27.jpg b/resources/characterImg/神里绫华/27.jpg new file mode 100644 index 00000000..c86d72c0 Binary files /dev/null and b/resources/characterImg/神里绫华/27.jpg differ diff --git a/resources/characterImg/神里绫华/28.jpg b/resources/characterImg/神里绫华/28.jpg new file mode 100644 index 00000000..b573f7ad Binary files /dev/null and b/resources/characterImg/神里绫华/28.jpg differ diff --git a/resources/characterImg/胡桃/39.jpg b/resources/characterImg/胡桃/39.jpg new file mode 100644 index 00000000..503fa1c4 Binary files /dev/null and b/resources/characterImg/胡桃/39.jpg differ diff --git a/resources/characterImg/芭芭拉/20.jpg b/resources/characterImg/芭芭拉/20.jpg new file mode 100644 index 00000000..83757c53 Binary files /dev/null and b/resources/characterImg/芭芭拉/20.jpg differ diff --git a/resources/characterImg/荧/09.jpg b/resources/characterImg/荧/09.jpg new file mode 100644 index 00000000..6bb0b685 Binary files /dev/null and b/resources/characterImg/荧/09.jpg differ diff --git a/resources/characterImg/诺艾尔/10.jpg b/resources/characterImg/诺艾尔/10.jpg new file mode 100644 index 00000000..7af49804 Binary files /dev/null and b/resources/characterImg/诺艾尔/10.jpg differ diff --git a/resources/characterImg/迪奥娜/02.jpg b/resources/characterImg/迪奥娜/02.jpg index ba47839a..a89d3d1b 100644 Binary files a/resources/characterImg/迪奥娜/02.jpg and b/resources/characterImg/迪奥娜/02.jpg differ diff --git a/resources/characterImg/迪奥娜/09.jpg b/resources/characterImg/迪奥娜/09.jpg deleted file mode 100644 index a89d3d1b..00000000 Binary files a/resources/characterImg/迪奥娜/09.jpg and /dev/null differ diff --git a/resources/characterImg/雷电将军/24.jpg b/resources/characterImg/雷电将军/24.jpg new file mode 100644 index 00000000..be80a981 Binary files /dev/null and b/resources/characterImg/雷电将军/24.jpg differ diff --git a/resources/characterImg/雷电将军/25.jpg b/resources/characterImg/雷电将军/25.jpg new file mode 100644 index 00000000..bb68b7ff Binary files /dev/null and b/resources/characterImg/雷电将军/25.jpg differ diff --git a/resources/characterImg/雷电将军/26.jpg b/resources/characterImg/雷电将军/26.jpg new file mode 100644 index 00000000..cd5fddc3 Binary files /dev/null and b/resources/characterImg/雷电将军/26.jpg differ diff --git a/resources/characterImg/魈/22.jpg b/resources/characterImg/魈/22.jpg new file mode 100644 index 00000000..dc3de6c1 Binary files /dev/null and b/resources/characterImg/魈/22.jpg differ