Files
yenai-plugin/apps/events/message.js
2024-04-03 20:43:35 +08:00

198 lines
6.1 KiB
JavaScript

import { common } from '../../model/index.js'
import { Config } from '../../components/index.js'
Bot.on?.('message', async (e) => {
// 判断是否存在消息
if (!e?.message?.length) return false
// 判断是否为机器人消息
if (e.user_id == (e.bot ?? Bot).uin) return false
// 判断是否主人消息
if (Config.masterQQ.includes(e.user_id)) return false
// 删除缓存时间
const deltime = Config.whole.deltime
// 判断群聊还是私聊
if (e.message_type == 'group') {
// 关闭撤回停止存储
if (Config.getGroup(e.group_id).groupRecall) {
// logger.debug(`[Yenai-Plugin]存储群消息${e.group_id}=>${e.message_id}`)
// 写入
await redis.set(
`notice:messageGroup:${e.message_id}`,
JSON.stringify(e.message),
{ EX: deltime }
)
}
} else if (e.message_type == 'private') {
// 关闭撤回停止存储
if (Config.whole.PrivateRecall) {
// logger.debug(`[Yenai-Plugin]存储私聊消息${e.user_id}=>${e.message_id}`)
// 写入
await redis.set(
`notice:messagePrivate:${e.message_id}`,
JSON.stringify(e.message),
{ EX: deltime }
)
}
}
// 消息通知
let msg = null
let forwardMsg = null
if (
e.message[0].type == 'flash' &&
e.message_type === 'group'
) {
if (!Config.getGroup(e.group_id).flashPhoto) return false
logger.info('[Yenai-Plugin]群聊闪照')
msg = [
segment.image(`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`),
`[消息(${e.self_id}) - 闪照消息]\n`,
`发送人账号:${e.user_id}\n`,
`发送人昵称:${e.sender.nickname}\n`,
`来源群号:${e.group_id}\n`,
`来源群名:${e.group_name}\n`,
`闪照链接:${e.message[0].url}`
]
} else if (
e.message[0].type == 'flash' &&
e.message_type === 'discuss' &&
Config.whole.flashPhoto
) {
logger.info('[Yenai-Plugin]讨论组闪照')
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
`[消息(${e.self_id}) - 闪照消息]\n`,
`发送人账号:${e.user_id}\n`,
`发送人昵称:${e.sender.nickname}\n`,
`讨论组号:${e.discuss_id}\n`,
`讨论组名:${e.discuss_name}\n`,
`闪照链接:${e.message[0].url}`
]
} else if (
e.message[0].type == 'flash' &&
e.message_type === 'private' &&
Config.whole.flashPhoto
) {
logger.info('[Yenai-Plugin]好友闪照')
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
`[消息(${e.self_id}) - 闪照消息]\n`,
`发送人账号:${e.user_id}\n`,
`发送人昵称:${e.sender.nickname}\n`,
`闪照链接:${e.message[0].url}`
]
} else if (e.message_type === 'private' && e.sub_type === 'friend') {
if (!Config.whole.privateMessage) return false
// 特殊消息处理
const arr = getMsgType(e.message)
if (arr) {
forwardMsg = arr.msg
e.message = arr.type
}
logger.info('[Yenai-Plugin]好友消息')
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
`[消息(${e.self_id}) - 好友消息]\n`,
`好友账号:${e.user_id}\n`,
`好友昵称:${e.sender.nickname}\n`,
'消息内容:',
...e.message
]
// 添加提示消息
const key = `yenai:notice:privateMessage:${e.user_id}`
if (!(await redis.get(key))) {
await redis.set(key, '1', { EX: 600 })
msg.push(
'\n-------------\n',
'引用该消息:回复 <内容>\n',
`或发送:回复 ${e.user_id} <内容>`
)
}
} else if (e.message_type === 'private' && e.sub_type === 'group') {
if (!Config.getGroup(e.group_id).grouptemporaryMessage) return false
// 特殊消息处理
const arr = getMsgType(e.message)
if (arr) {
forwardMsg = arr.msg
e.message = arr.type
}
logger.info('[Yenai-Plugin]群临时消息')
// 发送的消息
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
`[消息(${e.self_id}) - 群临时消息]\n`,
`来源群号:${e.sender.group_id}\n`,
`发送人账号:${e.user_id}\n`,
'消息内容:',
...e.message
]
// 添加提示消息
const key = `yenai:notice:tempprivateMessage:${e.user_id}`
if (!(await redis.get(key))) {
await redis.set(key, '1', { EX: 600 })
msg.push(
'\n-------------\n',
'可回复 "加为好友" 添加好友\n或 "回复 <消息>"'
)
}
} else if (e.message_type === 'group') {
if (!Config.getGroup(e.group_id).groupMessage) return false
// 特殊消息处理
const arr = getMsgType(e.message)
if (arr) {
forwardMsg = arr.msg
e.message = arr.type
}
logger.info('[Yenai-Plugin]群聊消息')
msg = [
segment.image(`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`),
`[消息(${e.self_id}) - 群聊消息]\n`,
`来源群号:${e.group_id}\n`,
`来源群名:${e.group_name}\n`,
`发送人账号:${e.user_id}\n`,
`发送人昵称:${e.sender.nickname}\n`,
'消息内容:',
...e.message
]
} else if (e.message_type === 'discuss') {
if (!Config.getGroup(e.group_id).groupMessage) return false
logger.info('[Yenai-Plugin]讨论组消息')
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
`[消息(${e.self_id}) - 群聊消息]\n`,
`来源讨论组号:${e.discuss_id}\n`,
`来源讨论组名:${e.discuss_name}\n`,
`发送人账号:${e.user_id}\n`,
`发送人昵称:${e.sender.nickname}\n`,
`消息内容:${e.raw_message}`
]
} else {
return false
}
// 发送消息
await common.sendMasterMsg(msg)
if (forwardMsg) await common.sendMasterMsg(forwardMsg)
})
// 特殊消息处理
/**
*
* @param msg
*/
function getMsgType (msg) {
const msgType = {
record: {
msg: segment.record(msg[0].url),
type: '[语音]'
},
video: {
msg: segment.video(msg[0].file),
type: '[视频]'
},
xml: {
msg,
type: '[合并消息]'
}
}
return msgType[msg[0].type]
}