解决被设置为只关注被艾特消息时不能撤回监听的问题

This commit is contained in:
yeyang
2022-10-15 17:25:16 +08:00
parent 01d752aab9
commit afaa991ef3
2 changed files with 191 additions and 202 deletions

View File

@@ -11,192 +11,194 @@ export class anotice extends plugin {
priority: 2000,
})
}
async accept(e) {
// 判断是否为机器人消息
if (e.user_id == cfg.qq) return
// 判断是否主人消息
if (cfg.masterQQ.includes(e.user_id)) return
//删除缓存时间
let deltime = Number(await redis.get(`yenai:notice:deltime`))
// 判断群聊还是私聊
if (e.isGroup) {
// 关闭撤回停止存储
if (await redis.get(`yenai:notice:groupRecall`)) {
// 写入
await redis.set(
`notice:messageGroup:${e.message_id}`,
JSON.stringify(e.message),
{ EX: deltime }
)
}
} else if (e.isPrivate) {
// 关闭撤回停止存储
if (await redis.get(`yenai:notice:PrivateRecall`)) {
// 写入
await redis.set(
`notice:messagePrivate:${e.message_id}`,
JSON.stringify(e.message),
{ EX: deltime }
)
}
}
// 消息通知
let msg = ''
let forwardMsg
if (
e.message[0].type == 'flash' &&
e.message_type === 'group' &&
await redis.get(`yenai:notice:flashPhoto`)
) {
logger.mark("[椰奶]群聊闪照")
msg = [
segment.image(`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`),
'[消息 - 闪照消息]\n',
`发送人QQ${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' &&
await redis.get(`yenai:notice:flashPhoto`)
) {
logger.mark("[椰奶]讨论组闪照")
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[消息 - 闪照消息]\n',
`发送人QQ${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' &&
await redis.get(`yenai:notice:flashPhoto`)
) {
logger.mark("[椰奶]好友闪照")
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[消息 - 闪照消息]\n',
`发送人QQ${e.user_id}\n`,
`发送人昵称:${e.sender.nickname}\n`,
`闪照链接:${e.message[0].url}`
]
} else if (e.message_type === 'private' && e.sub_type === 'friend') {
if (!await redis.get(`yenai:notice:privateMessage`)) return
let res = e.message
// 特殊消息处理
let arr = this.getSpecial(e.message)
if (arr) {
forwardMsg = arr.msg
res = arr.type
}
logger.mark("[椰奶]好友消息")
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[消息 - 好友消息]\n',
`好友QQ${e.user_id}\n`,
`好友昵称:${e.sender.nickname}\n`,
'消息内容:',
...res
]
// 添加提示消息
let key = `tz: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 (!await redis.get(`yenai:notice:grouptemporaryMessage`)) return
// 特殊消息处理
let res = e.message
let arr = this.getSpecial(e.message)
if (arr) {
forwardMsg = arr.msg
res = arr.type
}
logger.mark("[椰奶]群临时消息")
// 发送的消息
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[消息 - 群临时消息]\n',
`来源群号:${e.sender.group_id}\n`,
`发送人QQ${e.user_id}\n`,
'消息内容:',
...res
]
} else if (e.message_type === 'group') {
if (!await redis.get(`yenai:notice:groupMessage`)) return
// 特殊消息处理
let res = e.message
let arr = this.getSpecial(e.message)
if (arr) {
forwardMsg = arr.msg
res = arr.type
}
logger.mark("[椰奶]群聊消息")
msg = [
segment.image(`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`),
'[消息 - 群聊消息]\n',
`来源群号:${e.group_id}\n`,
`来源群名:${e.group_name}\n`,
`发送人QQ${e.user_id}\n`,
`发送人昵称:${e.sender.nickname}\n`,
'消息内容:',
...res
]
} else if (e.message_type === 'discuss') {
if (!await redis.get(`yenai:notice:groupMessage`)) return
logger.mark("[椰奶]讨论组消息")
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[消息 - 群聊消息]\n',
`来源讨论组号:${e.discuss_id}\n`,
`来源讨论组名:${e.discuss_name}\n`,
`发送人QQ${e.user_id}\n`,
`发送人昵称:${e.sender.nickname}\n`,
`消息内容:${e.raw_message}`
]
}
// 发送消息
await xcfg.getSend(msg)
if (forwardMsg) {
await xcfg.getSend(forwardMsg)
}
}
// 特殊消息处理
getSpecial(msg) {
let res = msg
if (res[0].type === 'record') {
// 语音
return {
msg: segment.record(res[0].url),
type: '[语音]'
}
} else if (res[0].type === 'video') {
// 视频
return {
msg: segment.video(res[0].file),
type: '[视频]'
}
} else if (res[0].type === 'xml') {
// 合并消息
return {
msg: res,
type: '[合并消息]'
}
} else return false
}
}
Bot.on("message", async (e) => {
// 判断是否为机器人消息
if (e.user_id == cfg.qq) return
// 判断是否主人消息
if (cfg.masterQQ.includes(e.user_id)) return
//删除缓存时间
let deltime = Number(await redis.get(`yenai:notice:deltime`))
// 判断群聊还是私聊
if (e.isGroup) {
// 关闭撤回停止存储
if (await redis.get(`yenai:notice:groupRecall`)) {
// 写入
await redis.set(
`notice:messageGroup:${e.message_id}`,
JSON.stringify(e.message),
{ EX: deltime }
)
}
} else if (e.isPrivate) {
// 关闭撤回停止存储
if (await redis.get(`yenai:notice:PrivateRecall`)) {
// 写入
await redis.set(
`notice:messagePrivate:${e.message_id}`,
JSON.stringify(e.message),
{ EX: deltime }
)
}
}
// 消息通知
let msg = ''
let forwardMsg
if (
e.message[0].type == 'flash' &&
e.message_type === 'group' &&
await redis.get(`yenai:notice:flashPhoto`)
) {
logger.mark("[椰奶]群聊闪照")
msg = [
segment.image(`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`),
'[消息 - 闪照消息]\n',
`发送人QQ${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' &&
await redis.get(`yenai:notice:flashPhoto`)
) {
logger.mark("[椰奶]讨论组闪照")
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[消息 - 闪照消息]\n',
`发送人QQ${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' &&
await redis.get(`yenai:notice:flashPhoto`)
) {
logger.mark("[椰奶]好友闪照")
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[消息 - 闪照消息]\n',
`发送人QQ${e.user_id}\n`,
`发送人昵称:${e.sender.nickname}\n`,
`闪照链接:${e.message[0].url}`
]
} else if (e.message_type === 'private' && e.sub_type === 'friend') {
if (!await redis.get(`yenai:notice:privateMessage`)) return
let res = e.message
// 特殊消息处理
let arr = getSpecial(e.message)
if (arr) {
forwardMsg = arr.msg
res = arr.type
}
logger.mark("[椰奶]好友消息")
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[消息 - 好友消息]\n',
`好友QQ${e.user_id}\n`,
`好友昵称:${e.sender.nickname}\n`,
'消息内容:',
...res
]
// 添加提示消息
let key = `tz: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 (!await redis.get(`yenai:notice:grouptemporaryMessage`)) return
// 特殊消息处理
let res = e.message
let arr = getSpecial(e.message)
if (arr) {
forwardMsg = arr.msg
res = arr.type
}
logger.mark("[椰奶]群临时消息")
// 发送的消息
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[消息 - 群临时消息]\n',
`来源群号:${e.sender.group_id}\n`,
`发送人QQ${e.user_id}\n`,
'消息内容:',
...res
]
} else if (e.message_type === 'group') {
if (!await redis.get(`yenai:notice:groupMessage`)) return
// 特殊消息处理
let res = e.message
let arr = getSpecial(e.message)
if (arr) {
forwardMsg = arr.msg
res = arr.type
}
logger.mark("[椰奶]群聊消息")
msg = [
segment.image(`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`),
'[消息 - 群聊消息]\n',
`来源群号:${e.group_id}\n`,
`来源群名:${e.group_name}\n`,
`发送人QQ${e.user_id}\n`,
`发送人昵称:${e.sender.nickname}\n`,
'消息内容:',
...res
]
} else if (e.message_type === 'discuss') {
if (!await redis.get(`yenai:notice:groupMessage`)) return
logger.mark("[椰奶]讨论组消息")
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[消息 - 群聊消息]\n',
`来源讨论组号:${e.discuss_id}\n`,
`来源讨论组名:${e.discuss_name}\n`,
`发送人QQ${e.user_id}\n`,
`发送人昵称:${e.sender.nickname}\n`,
`消息内容:${e.raw_message}`
]
}
// 发送消息
await xcfg.getSend(msg)
if (forwardMsg) {
await xcfg.getSend(forwardMsg)
}
})
// 特殊消息处理
function getSpecial(msg) {
let res = msg
if (res[0].type === 'record') {
// 语音
return {
msg: segment.record(res[0].url),
type: '[语音]'
}
} else if (res[0].type === 'video') {
// 视频
return {
msg: segment.video(res[0].file),
type: '[视频]'
}
} else if (res[0].type === 'xml') {
// 合并消息
return {
msg: res,
type: '[合并消息]'
}
} else return false
}

View File

@@ -3,7 +3,6 @@ import fs from "fs";
import lodash from "lodash";
import Common from "../components/Common.js";
import common from '../../../lib/common/common.js'
import cfg from "../../../lib/config/config.js";
export class NewConfig extends plugin {
@@ -43,11 +42,6 @@ export class NewConfig extends plugin {
// 解析消息
let index = e.msg.replace(/#|椰奶设置|开启|关闭/g, "")
let groupCfg = cfg.getConfig('group')?.default
if (groupCfg.onlyReplyAt == 1 && configs[index] == "groupRecall") {
return e.reply('❎ 因您开启了"仅关注主动@机器人的消息",群撤回监听无法生效!!!')
}
if (!configs.hasOwnProperty(index)) return
// 开启还是关闭
@@ -58,7 +52,7 @@ export class NewConfig extends plugin {
logger.error(`[椰奶]启用失败${index}`, err)
})
} else {
await redis.del(`yenai:notice:${index}`).then(() => {
await redis.del(`yenai:notice:${configs[index]}`).then(() => {
logger.mark(`[椰奶]已禁用${index}`)
}).catch(err => {
logger.error(`[椰奶]禁用失败${index}`, err)
@@ -98,17 +92,10 @@ export class NewConfig extends plugin {
}
let no = ["sese", "deltime", "notificationsAll"]
let groupCfg = cfg.getConfig('group')?.default
if (yes) {
for (let i in configs) {
if (no.includes(configs[i])) continue
if (groupCfg.onlyReplyAt == 1 && configs[i] == "groupRecall") {
e.reply('❎ 因您开启了"仅关注主动@机器人的消息",群撤回监听无法生效!!!')
continue
}
await redis.set(`yenai:notice:${configs[i]}`, "1").then(() => {
logger.mark(`[椰奶]已启用${i}`)
}).catch(err => {