mirror of
https://github.com/yoimiya-kokomi/miao-plugin.git
synced 2024-11-21 22:48:13 +00:00
适配 TRSS-Yunzai 原图、上传图片、戳一戳 功能 (#610)
This commit is contained in:
parent
5e70298547
commit
08edd41ce7
@ -85,9 +85,17 @@ let Avatar = {
|
|||||||
isRelease,
|
isRelease,
|
||||||
data
|
data
|
||||||
}, { e, scale, retMsgId: true })
|
}, { e, scale, retMsgId: true })
|
||||||
if (msgRes && msgRes.message_id) {
|
if (msgRes) {
|
||||||
// 如果消息发送成功,就将message_id和图片路径存起来,3小时过期
|
// 如果消息发送成功,就将message_id和图片路径存起来,3小时过期
|
||||||
await redis.set(`miao:original-picture:${msgRes.message_id}`, JSON.stringify({ type: 'character', img: bg.img }), { EX: 3600 * 3 })
|
const message_id = [e.message_id]
|
||||||
|
if (Array.isArray(msgRes.message_id)) {
|
||||||
|
message_id.push(...msgRes.message_id)
|
||||||
|
} else {
|
||||||
|
message_id.push(msgRes.message_id)
|
||||||
|
}
|
||||||
|
for (const i of message_id) {
|
||||||
|
await redis.set(`miao:original-picture:${i}`, JSON.stringify({ type: 'character', img: bg.img }), { EX: 3600 * 3 })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
},
|
},
|
||||||
|
@ -42,13 +42,17 @@ export async function uploadCharacterImg (e) {
|
|||||||
imageMessages.push(val)
|
imageMessages.push(val)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (imageMessages.length === 0 && e.source) {
|
if (imageMessages.length === 0) {
|
||||||
let source
|
let source
|
||||||
if (e.isGroup) {
|
if (e.getReply) {
|
||||||
// 支持at图片添加,以及支持后发送
|
source = await e.getReply()
|
||||||
source = (await e.group.getChatHistory(e.source?.seq, 1)).pop()
|
} else if (e.source) {
|
||||||
} else {
|
if (e.group?.getChatHistory) {
|
||||||
source = (await e.friend.getChatHistory((e.source?.time + 1), 1)).pop()
|
// 支持at图片添加,以及支持后发送
|
||||||
|
source = (await e.group.getChatHistory(e.source?.seq, 1)).pop()
|
||||||
|
} else if (e.friend?.getChatHistory) {
|
||||||
|
source = (await e.friend.getChatHistory((e.source?.time + 1), 1)).pop()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (source) {
|
if (source) {
|
||||||
for (let val of source.message) {
|
for (let val of source.message) {
|
||||||
@ -63,7 +67,7 @@ export async function uploadCharacterImg (e) {
|
|||||||
resid = val.id
|
resid = val.id
|
||||||
}
|
}
|
||||||
if (!resid) break
|
if (!resid) break
|
||||||
let message = await Bot.getForwardMsg(resid)
|
let message = await e.bot.getForwardMsg(resid)
|
||||||
for (const item of message) {
|
for (const item of message) {
|
||||||
for (const i of item.message) {
|
for (const i of item.message) {
|
||||||
if (i.type === 'image') {
|
if (i.type === 'image') {
|
||||||
@ -109,8 +113,12 @@ async function saveImages (e, name, imageMessages) {
|
|||||||
e.reply([segment.at(e.user_id, senderName), '添加失败:图片太大了。'])
|
e.reply([segment.at(e.user_id, senderName), '添加失败:图片太大了。'])
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
let fileName = val.file.substring(0, val.file.lastIndexOf('.'))
|
let fileName = ""
|
||||||
let fileType = val.file.substring(val.file.lastIndexOf('.') + 1)
|
let fileType = "png"
|
||||||
|
if (val.file) {
|
||||||
|
fileName = val.file.substring(0, val.file.lastIndexOf('.'))
|
||||||
|
fileType = val.file.substring(val.file.lastIndexOf('.') + 1)
|
||||||
|
}
|
||||||
if (response.headers.get('content-type') === 'image/gif') {
|
if (response.headers.get('content-type') === 'image/gif') {
|
||||||
fileType = 'gif'
|
fileType = 'gif'
|
||||||
}
|
}
|
||||||
@ -132,7 +140,7 @@ async function saveImages (e, name, imageMessages) {
|
|||||||
fs.rename(imgPath, newImgPath, () => {
|
fs.rename(imgPath, newImgPath, () => {
|
||||||
})
|
})
|
||||||
imgCount++
|
imgCount++
|
||||||
Bot.logger.mark(`添加成功: ${path}/${fileName}`)
|
Bot.logger.mark(`添加成功: ${newImgPath}`)
|
||||||
}
|
}
|
||||||
e.reply([segment.at(e.user_id, senderName), `\n成功添加${imgCount}张${name}${isProfile ? '面板图' : '图片'}。`])
|
e.reply([segment.at(e.user_id, senderName), `\n成功添加${imgCount}张${name}${isProfile ? '面板图' : '图片'}。`])
|
||||||
return true
|
return true
|
||||||
@ -211,11 +219,6 @@ export async function profileImgList (e) {
|
|||||||
e.reply('已禁止获取面板图列表')
|
e.reply('已禁止获取面板图列表')
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
let nickname = Bot.nickname
|
|
||||||
if (e.isGroup) {
|
|
||||||
let info = await Bot.getGroupMemberInfo(e.group_id, Bot.uin)
|
|
||||||
nickname = info.card || info.nickname
|
|
||||||
}
|
|
||||||
let name = char.name
|
let name = char.name
|
||||||
let pathSuffix = `profile/normal-character/${name}`
|
let pathSuffix = `profile/normal-character/${name}`
|
||||||
let path = resPath + pathSuffix
|
let path = resPath + pathSuffix
|
||||||
@ -229,19 +232,23 @@ export async function profileImgList (e) {
|
|||||||
})
|
})
|
||||||
msglist.push({
|
msglist.push({
|
||||||
message: [`当前查看的是${name}面板图,共${imgs.length}张,可输入【#删除${name}面板图(序列号)】进行删除`],
|
message: [`当前查看的是${name}面板图,共${imgs.length}张,可输入【#删除${name}面板图(序列号)】进行删除`],
|
||||||
nickname: nickname,
|
|
||||||
user_id: Bot.uin
|
|
||||||
})
|
})
|
||||||
for (let i = 0; i < imgs.length; i++) {
|
for (let i = 0; i < imgs.length; i++) {
|
||||||
// 合并转发最多99? 但是我感觉不会有这么多先不做处理
|
// 合并转发最多99? 但是我感觉不会有这么多先不做处理
|
||||||
console.log(`${path}${imgs[i]}`)
|
console.log(`${path}${imgs[i]}`)
|
||||||
msglist.push({
|
msglist.push({
|
||||||
message: [`${i + 1}.`, segment.image(`file://${path}/${imgs[i]}`)],
|
message: [`${i + 1}.`, segment.image(`file://${path}/${imgs[i]}`)],
|
||||||
nickname: nickname,
|
|
||||||
user_id: Bot.uin
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
let msgRsg = await e.reply(await Bot.makeForwardMsg(msglist))
|
let msg
|
||||||
|
if (e.group?.makeForwardMsg) {
|
||||||
|
msg = await e.group.makeForwardMsg(msglist)
|
||||||
|
} else if (e.friend?.makeForwardMsg) {
|
||||||
|
msg = await e.friend.makeForwardMsg(msglist)
|
||||||
|
} else {
|
||||||
|
msg = await Bot.makeForwardMsg(msglist)
|
||||||
|
}
|
||||||
|
let msgRsg = await e.reply(msg)
|
||||||
if (!msgRsg) e.reply('风控了,可私聊查看', true)
|
if (!msgRsg) e.reply('风控了,可私聊查看', true)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error(err)
|
logger.error(err)
|
||||||
|
@ -201,12 +201,20 @@ let ProfileDetail = {
|
|||||||
}
|
}
|
||||||
// 渲染图像
|
// 渲染图像
|
||||||
let msgRes = await Common.render('character/profile-detail', renderData, { e, scale: 1.6, retMsgId: true })
|
let msgRes = await Common.render('character/profile-detail', renderData, { e, scale: 1.6, retMsgId: true })
|
||||||
if (msgRes && msgRes.message_id) {
|
if (msgRes) {
|
||||||
// 如果消息发送成功,就将message_id和图片路径存起来,3小时过期
|
// 如果消息发送成功,就将message_id和图片路径存起来,3小时过期
|
||||||
await redis.set(`miao:original-picture:${msgRes.message_id}`, JSON.stringify({
|
const message_id = [e.message_id]
|
||||||
type: 'profile',
|
if (Array.isArray(msgRes.message_id)) {
|
||||||
img: renderData?.data?.costumeSplash
|
message_id.push(...msgRes.message_id)
|
||||||
}), { EX: 3600 * 3 })
|
} else {
|
||||||
|
message_id.push(msgRes.message_id)
|
||||||
|
}
|
||||||
|
for (const i of message_id) {
|
||||||
|
await redis.set(`miao:original-picture:${i}`, JSON.stringify({
|
||||||
|
type: 'profile',
|
||||||
|
img: renderData?.data?.costumeSplash
|
||||||
|
}), { EX: 3600 * 3 })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
},
|
},
|
||||||
|
@ -3,25 +3,29 @@ import { MysApi } from '#miao.models'
|
|||||||
|
|
||||||
/** 获取角色卡片的原图 */
|
/** 获取角色卡片的原图 */
|
||||||
export async function getOriginalPicture (e) {
|
export async function getOriginalPicture (e) {
|
||||||
if (!e.hasReply && !e.source) {
|
let source
|
||||||
return true
|
if (e.reply_id) {
|
||||||
}
|
source = { message_id: e.reply_id }
|
||||||
// 引用的消息不是自己的消息
|
} else {
|
||||||
if (e.source.user_id !== e.self_id) {
|
if (!e.hasReply && !e.source) {
|
||||||
return true
|
return false
|
||||||
}
|
}
|
||||||
// 引用的消息不是纯图片
|
// 引用的消息不是自己的消息
|
||||||
if (!/^\[图片]$/.test(e.source.message)) {
|
if (e.source.user_id !== e.self_id) {
|
||||||
return true
|
return false
|
||||||
|
}
|
||||||
|
// 引用的消息不是纯图片
|
||||||
|
if (!/^\[图片]$/.test(e.source.message)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// 获取原消息
|
||||||
|
if (e.group?.getChatHistory) {
|
||||||
|
source = (await e.group.getChatHistory(e.source.seq, 1)).pop()
|
||||||
|
} else if (e.friend?.getChatHistory) {
|
||||||
|
source = (await e.friend.getChatHistory(e.source.time, 1)).pop()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let originalPic = Cfg.get('originalPic') * 1
|
let originalPic = Cfg.get('originalPic') * 1
|
||||||
// 获取原消息
|
|
||||||
let source
|
|
||||||
if (e.isGroup) {
|
|
||||||
source = (await e.group.getChatHistory(e.source.seq, 1)).pop()
|
|
||||||
} else {
|
|
||||||
source = (await e.friend.getChatHistory(e.source.time, 1)).pop()
|
|
||||||
}
|
|
||||||
if (source) {
|
if (source) {
|
||||||
let imgPath = await redis.get(`miao:original-picture:${source.message_id}`)
|
let imgPath = await redis.get(`miao:original-picture:${source.message_id}`)
|
||||||
if (imgPath) {
|
if (imgPath) {
|
||||||
@ -48,17 +52,12 @@ export async function getOriginalPicture (e) {
|
|||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if (source.time) {
|
// 对at错图像的增加嘲讽...
|
||||||
let time = new Date()
|
e.reply(segment.image(`file://${process.cwd()}/plugins/miao-plugin/resources/common/face/what.jpg`))
|
||||||
// 对at错图像的增加嘲讽...
|
return false
|
||||||
if (time / 1000 - source.time < 3600) {
|
|
||||||
e.reply(segment.image(`file://${process.cwd()}/plugins/miao-plugin/resources/common/face/what.jpg`))
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
e.reply('消息太过久远了,俺也忘了原图是啥了,下次早点来吧~')
|
e.reply('消息太过久远了,俺也忘了原图是啥了,下次早点来吧~')
|
||||||
return true
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
/* #敌人等级 */
|
/* #敌人等级 */
|
||||||
|
@ -76,13 +76,14 @@ class App {
|
|||||||
|
|
||||||
cls.prototype[key] = async function (e) {
|
cls.prototype[key] = async function (e) {
|
||||||
e = this.e || e
|
e = this.e || e
|
||||||
|
const self_id = e.self_id || e.bot?.uin || Bot.uin
|
||||||
if (event === 'poke') {
|
if (event === 'poke') {
|
||||||
if (e.notice_type === 'group') {
|
if (e.notice_type === 'group') {
|
||||||
if (e.target_id !== Bot.uin && !e.isPoke) {
|
if (e.target_id !== self_id && !e.isPoke) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
// group状态下,戳一戳的发起人是operator
|
// group状态下,戳一戳的发起人是operator
|
||||||
if (e.user_id === Bot.uin) {
|
if (e.user_id === self_id) {
|
||||||
e.user_id = e.operator_id
|
e.user_id = e.operator_id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -77,11 +77,20 @@ const { changelogs, currentVersion } = readLogFile('miao')
|
|||||||
|
|
||||||
const yunzaiVersion = packageJson.version
|
const yunzaiVersion = packageJson.version
|
||||||
const isV3 = yunzaiVersion[0] === '3'
|
const isV3 = yunzaiVersion[0] === '3'
|
||||||
const isMiao = packageJson.name === 'miao-yunzai'
|
let isMiao = false
|
||||||
|
let name = "Yunzai-Bot"
|
||||||
|
if (packageJson.name === 'miao-yunzai') {
|
||||||
|
isMiao = true
|
||||||
|
name = "Miao-Yunzai"
|
||||||
|
} else if (packageJson.name === 'trss-yunzai') {
|
||||||
|
isMiao = true
|
||||||
|
name = "TRSS-Yunzai"
|
||||||
|
}
|
||||||
|
|
||||||
let Version = {
|
let Version = {
|
||||||
isV3,
|
isV3,
|
||||||
isMiao,
|
isMiao,
|
||||||
|
name,
|
||||||
get version () {
|
get version () {
|
||||||
return currentVersion
|
return currentVersion
|
||||||
},
|
},
|
||||||
|
@ -6,7 +6,6 @@ const Render = {
|
|||||||
if (!e.runtime) {
|
if (!e.runtime) {
|
||||||
console.log('未找到e.runtime,请升级至最新版Yunzai')
|
console.log('未找到e.runtime,请升级至最新版Yunzai')
|
||||||
}
|
}
|
||||||
let BotName = Version.isMiao ? 'Miao-Yunzai' : 'Yunzai-Bot'
|
|
||||||
return e.runtime.render('miao-plugin', path, params, {
|
return e.runtime.render('miao-plugin', path, params, {
|
||||||
retType: cfg.retMsgId ? 'msgId' : 'default',
|
retType: cfg.retMsgId ? 'msgId' : 'default',
|
||||||
beforeRender ({ data }) {
|
beforeRender ({ data }) {
|
||||||
@ -30,7 +29,7 @@ const Render = {
|
|||||||
sys: {
|
sys: {
|
||||||
scale: Cfg.scale(cfg.scale || 1)
|
scale: Cfg.scale(cfg.scale || 1)
|
||||||
},
|
},
|
||||||
copyright: `Created By ${BotName}<span class="version">${Version.yunzai}</span>${pluginName}</span>`,
|
copyright: `Created By ${Version.name}<span class="version">${Version.yunzai}</span>${pluginName}</span>`,
|
||||||
pageGotoParams: {
|
pageGotoParams: {
|
||||||
waitUntil: 'networkidle2'
|
waitUntil: 'networkidle2'
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user