Files
yenai-plugin/apps/notice_group.js
2023-01-05 23:22:29 +08:00

298 lines
12 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import plugin from '../../../lib/plugins/plugin.js'
import { segment } from 'oicq'
import Cfg from '../model/Config.js'
import { Config } from '../components/index.js'
import moment from 'moment'
/** 群通知 */
export class newgroups extends plugin {
constructor() {
super({
name: '椰奶群通知',
event: 'notice.group',
priority: 2000,
})
}
async accept(e) {
let msg
let forwardMsg
switch (e.sub_type) {
case 'increase': {
if (e.user_id === Bot.uin) {
if (!Config.getGroup(e.group_id).groupNumberChange) return
logger.mark("[椰奶]新增群聊")
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 新增群聊]\n',
`新增群号:${e.group_id}`
]
} else {
if (!Config.getGroup(e.group_id).groupMemberNumberChange) return
logger.mark("[椰奶]新增群员")
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 新增群员]\n',
`群号:${e.group_id}\n`,
`新成员QQ${e.user_id}\n`,
`新成员昵称:${e.nickname}`
]
}
break
}
case 'decrease': {
if (e.dismiss) {
if (!Config.getGroup(e.group_id).groupNumberChange) return
logger.mark("[椰奶]群聊被解散")
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 群聊被解散]\n',
`操作人QQ${e.operator_id}\n`,
`解散群号:${e.group_id}`
]
} else if (e.user_id === Bot.uin && e.operator_id !== Bot.uin) {
if (!Config.getGroup(e.group_id).groupNumberChange) return
logger.mark("[椰奶]机器人被踢")
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 机器人被踢]\n',
`操作人QQ${e.operator_id}\n`,
`被踢群号:${e.group_id}`
]
} else if (e.user_id === Bot.uin && e.operator_id === Bot.uin) {
if (!Config.getGroup(e.group_id).groupNumberChange) return
logger.mark("[椰奶]机器人退群")
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 机器人退群]\n',
`退出群号:${e.group_id}`
]
} else if (e.operator_id === e.user_id) {
if (!Config.getGroup(e.group_id).groupMemberNumberChange) return
logger.mark("[椰奶]群员退群")
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 群员退群]\n',
`退群人QQ${e.user_id}\n`,
`退群人昵称:${e.member === null || e.member === void 0
? void 0
: e.member.nickname
}\n`,
`退群人群名片:${e.member === null || e.member === void 0 ? void 0 : e.member.card
}\n`,
`退出群号:${e.group_id}`
]
} else if (e.operator_id !== e.user_id) {
if (!Config.getGroup(e.group_id).groupMemberNumberChange) return
logger.mark("[椰奶]群员被踢")
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 群员被踢]\n',
`操作人QQ${e.operator_id}\n`,
`被踢人QQ${e.user_id}\n`,
`被踢人昵称:${e.member === null || e.member === void 0
? void 0
: e.member.nickname
}\n`,
`被踢人群名片:${e.member === null || e.member === void 0 ? void 0 : e.member.card
}\n`,
`被踢群号:${e.group_id}`
]
}
break
}
// 群管理变动
case 'admin': {
if (!Config.getGroup(e.group_id).groupAdminChange) return
e.set ? logger.mark("[椰奶]机器人被设置管理") : logger.mark("[椰奶]机器人被取消管理")
if (e.user_id === Bot.uin) {
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
e.set
? '[通知 - 机器人被设置管理]:\n'
: '[通知 - 机器人被取消管理]:\n',
`被操作群号:${e.group_id}`
]
} else {
e.set ? logger.mark("[椰奶]新增群管理员") : logger.mark("[椰奶]取消群管理员")
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
e.set ? '[通知 - 新增群管理员]:\n' : '[通知 - 取消群管理员]:\n',
`被操作QQ${e.user_id}\n`,
`被操作群号:${e.group_id}`
]
}
break
}
// 禁言 (这里仅处理机器人被禁言)
case 'ban': {
let Forbiddentime = Cfg.getsecondformat(e.duration)
if (!Config.getGroup(e.group_id).botBeenBanned) return
if (e.user_id != Bot.uin) return
if (e.duration == 0) {
logger.mark("[椰奶]机器人被解除禁言")
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 机器人被解除禁言]\n',
`处理人QQ${e.operator_id}\n`,
`处理群号:${e.group_id}`
]
} else if (e.user_id === Bot.uin) {
logger.mark("[椰奶]机器人被禁言")
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 机器人被禁言]\n',
`禁言人QQ${e.operator_id}\n`,
`禁言群号:${e.group_id}\n`,
`禁言时长:${Forbiddentime}`
]
}
break
}
// 群转让
case 'transfer': {
if (!Config.getGroup(e.group_id).groupNumberChange) return
logger.mark("[椰奶]群聊转让")
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 群聊转让]\n',
`转让群号:${e.group_id}\n`,
`旧群主:${e.operator_id}\n`,
`新群主:${e.user_id}`
]
break
}
// 群撤回
case 'recall': {
// 开启或关闭
if (!Config.getGroup(e.group_id).groupRecall) return
// 是否为机器人撤回
if (e.user_id == Bot.uin) return
// 是否为主人撤回
if (Cfg.masterQQ.includes(e.user_id)) return
// 读取
let res = JSON.parse(
await redis.get(`notice:messageGroup:${e.message_id}`)
)
// 无数据 return出去
if (!res) return
// 不同消息处理
let special = ''
if (res[0].type === 'flash') {
// 闪照处理
forwardMsg = await e.group.makeForwardMsg([
{
message: segment.image(res[0].url),
nickname: e.group.pickMember(e.user_id).card,
user_id: e.user_id
}
])
special = '[闪照]'
} else if (res[0].type === 'record') {
// 语音
forwardMsg = segment.record(res[0].url)
special = '[语音]'
} else if (res[0].type === 'video') {
// 视频
forwardMsg = segment.video(res[0].file)
special = '[视频]'
} else if (res[0].type === 'xml') {
// 合并消息
forwardMsg = res
special = '[合并消息]'
} else {
// 正常处理
forwardMsg = await Bot.pickFriend(Cfg.masterQQ[0]).makeForwardMsg([
{
message: res,
nickname: e.group.pickMember(e.user_id).card,
user_id: e.user_id
}
])
}
// 判断是否管理撤回
let isManage = ''
if (e.operator_id != e.user_id) {
isManage = `撤回管理:${e.group.pickMember(e.operator_id).card}(${e.operator_id
})\n`
}
isManage ? logger.mark("[椰奶]群聊管理撤回") : logger.mark("[椰奶]群聊撤回")
// 发送的消息
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
`[通知 - 群聊${isManage ? '管理' : ''}撤回]\n`,
`撤回群名:${e.group_name}\n`,
`撤回群号:${e.group_id}\n`,
isManage,
`${isManage ? '被撤回人' : '撤回人员'}${e.group.pickMember(e.user_id).card
}(${e.user_id})\n`,
`撤回时间:${moment(e.time * 1000).format("MM-DD HH:mm:ss")}`,
special ? `\n特殊消息:${special}` : ''
]
break
}
default:
return
}
await Cfg.getSend(msg)
if (forwardMsg) {
await Cfg.getSend(forwardMsg)
}
}
}