第二次提交

This commit is contained in:
yeyang
2022-10-06 12:17:47 +08:00
parent 1432ac961f
commit 04b2e09584
5 changed files with 222 additions and 255 deletions

148
apps/handle.js Normal file
View File

@@ -0,0 +1,148 @@
import plugin from '../../../lib/plugins/plugin.js'
export class anotice extends plugin {
constructor() {
super({
name: '处理',
dsc: '申请处理',
event: 'message',
rule: [
{
/** 命令正则匹配 */
reg: '^#?同意申请.*$',
/** 执行方法 */
fnc: 'agree'
},
{
/** 命令正则匹配 */
reg: '^#?(同意|拒绝)$',
/** 执行方法 */
fnc: 'agrees'
},
{
/** 命令正则匹配 */
reg: '^#?回复.*$',
/** 执行方法 */
fnc: 'Replys'
}
]
})
}
/** 同意好友申请 */
async agree(e) {
if (!e.isMaster) return
let qq = e.message[0].text.replace(/#|同意申请/g, '').trim()
if (e.message[1]) {
qq = e.message[1].qq
} else {
qq = qq.match(/[1-9]\d*/g)
}
if (!qq) {
e.reply('❎ 请输入正确的QQ号')
return false
}
await Bot.pickFriend(qq)
.setFriendReq()
.then(() => e.reply(`✅ 已同意${qq}的好友申请`))
.catch((err) => console.log(err))
}
/** 引用同意好友申请和群邀请 */
async agrees(e) {
if (!e.isMaster) return
if (!e.source) return
if (!e.isPrivate) return
let yes = true
if (/拒绝/.test(e.msg)) {
yes = false
}
let source = (await e.friend.getChatHistory(e.source.time, 1)).pop()
let res
try {
res = source.raw_message.split('\n')
} catch {
e.reply('❎ 消息可能已过期')
return false
}
if (/申请人QQ/.test(res[1]) && /好友申请/.test(res[0])) {
let qq = res[1].match(/[1-9]\d*/g)
if (Bot.fl.get(Number(qq))) return e.reply('❎ 已经同意过该申请了哦~')
Bot.pickFriend(qq)
.setFriendReq('', yes)
.then(() => e.reply(`✅ 已${yes ? '同意' : '拒绝'}${qq}的好友申请`))
.catch(() => e.reply('❎ 请检查是否已同意该申请'))
} else if (
/目标群号/.test(res[1]) &&
/邀请人QQ/.test(res[3]) &&
/邀请码/.test(res[6])
) {
let groupid = res[1].match(/[1-9]\d*/g)
if (Bot.fl.get(Number(groupid))) { return e.reply('❎ 已经同意过该申请了哦~') }
let qq = res[3].match(/[1-9]\d*/g)
let seq = res[6].match(/[1-9]\d*/g)
Bot.pickUser(qq)
.setGroupInvite(groupid, seq, yes)
.then(() => e.reply(`✅ 已${yes ? '同意' : '拒绝'}${qq}的群邀请`))
.catch(() => e.reply('❎ 请检查是否已同意该邀请'))
} else {
e.reply('❎ 请检查是否引用正确')
}
}
// 回复好友消息
async Replys(e) {
if (!e.isMaster) return
if (!e.isPrivate) return
let qq;
let msgs = e.message[0].text.split(' ')
if (e.source) {
let source = (await e.friend.getChatHistory(e.source.time, 1)).pop();
let res;
try {
res = source.raw_message.split('\n')
} catch {
return e.reply('❎ 消息可能已过期')
}
if (/好友消息/.test(res[0]) && /好友QQ/.test(res[1])) {
qq = res[1].match(/[1-9]\d*/g)
} else if (/群临时消息/.test(res[0])) {
return e.reply('❎ 群临时消息无法回复,请添加好友')
} else {
return e.reply('❎ 请检查是否引用正确')
}
e.message[0].text = e.message[0].text.replace(/#|回复/g, '').trim()
} else {
if (msgs.length == 1 && !/\d/.test(msgs[0])) {
return e.reply('❎ QQ号不能为空')
} else if (/\d/.test(msgs[0])) {
qq = msgs[0].match(/[1-9]\d*/g)
e.message[0].text = msgs.slice(1).join(' ')
} else {
qq = msgs[1]
e.message[0].text = msgs.slice(2).join(' ')
}
}
if (!/^\d+$/.test(qq)) return e.reply('❎ QQ号不正确人家做不到的啦>_<~')
if (!Bot.fl.get(Number(qq))) return e.reply('❎ 好友列表查无此人')
if (!e.message[0].text) e.message.shift()
if (e.message.length === 0) return e.reply('❎ 消息不能为空')
Bot.pickFriend(qq)
.sendMsg(e.message)
.then(() => { e.reply('✅ 已把消息发给它了哦~') })
.catch((err) => e.reply(`❎ 发送失败\n错误信息为:${err.message}`))
}
}

View File

@@ -2,9 +2,7 @@ import plugin from '../../../lib/plugins/plugin.js'
import { segment } from 'oicq'
import cfg from '../../../lib/config/config.js'
import common from '../../../lib/common/common.js'
import xcfg from "../model/Config"
let config = {}
const ROLE_MAP = {
admin: '群管理',
@@ -21,11 +19,6 @@ export class Friends extends plugin {
event: 'notice.friend',
priority: 5000
})
this.configpath = './plugins/yenai-plugin/config/config.json'
}
async init() {
config = await xcfg.getread(this.configpath)
}
async accept(e) {
@@ -33,7 +26,7 @@ export class Friends extends plugin {
let forwardMsg
switch (e.sub_type) {
case 'increase': {
if (!config.friendNumberChange) return
if (!await redis.get(`yenai:notice:friendNumberChange`)) return
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[通知 - 新增好友]\n',
@@ -43,7 +36,7 @@ export class Friends extends plugin {
break
}
case 'decrease': {
if (!config.friendNumberChange) return
if (!await redis.get(`yenai:notice:friendNumberChange`)) return
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[通知 - 好友减少]\n',
@@ -53,7 +46,7 @@ export class Friends extends plugin {
break
}
case 'recall': {
if (!config.PrivateRecall) return
if (!await redis.get(`yenai:notice:PrivateRecall`)) return
if (e.user_id == cfg.qq) return
@@ -94,7 +87,7 @@ export class Friends extends plugin {
break
}
case 'poke': {
if (!config.privateMessage) return
if (!await redis.get(`yenai:notice:privateMessage`)) return
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[消息 - 戳一戳]\n',
@@ -128,7 +121,7 @@ export class newgroups extends plugin {
switch (e.sub_type) {
case 'increase': {
if (e.user_id === cfg.qq) {
if (!config.groupNumberChange) return
if (!await redis.get(`yenai:notice:groupNumberChange`)) return
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
@@ -137,7 +130,7 @@ export class newgroups extends plugin {
`新增群号:${e.group_id}`
]
} else {
if (!config.groupMemberNumberChange) return
if (!await redis.get(`yenai:notice:groupMemberNumberChange`)) return
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
@@ -152,7 +145,7 @@ export class newgroups extends plugin {
}
case 'decrease': {
if (e.dismiss) {
if (!config.groupNumberChange) return
if (!await redis.get(`yenai:notice:groupNumberChange`)) return
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
@@ -162,7 +155,7 @@ export class newgroups extends plugin {
`解散群号:${e.group_id}`
]
} else if (e.user_id === cfg.qq && e.operator_id !== cfg.qq) {
if (!config.groupNumberChange) return
if (!await redis.get(`yenai:notice:groupNumberChange`)) return
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
@@ -172,7 +165,8 @@ export class newgroups extends plugin {
`被踢群号:${e.group_id}`
]
} else if (e.user_id === cfg.qq && e.operator_id === cfg.qq) {
if (!config.groupNumberChange) return
if (!await redis.get(`yenai:notice:groupNumberChange`)) return
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
@@ -181,7 +175,8 @@ export class newgroups extends plugin {
`退出群号:${e.group_id}`
]
} else if (e.operator_id === e.user_id) {
if (!config.groupMemberNumberChange) return
if (!await redis.get(`yenai:notice:groupMemberNumberChange`)) return
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
@@ -197,7 +192,8 @@ export class newgroups extends plugin {
`退出群号:${e.group_id}`
]
} else if (e.operator_id !== e.user_id) {
if (!config.groupMemberNumberChange) return
if (!await redis.get(`yenai:notice:groupMemberNumberChange`)) return
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
@@ -218,7 +214,8 @@ export class newgroups extends plugin {
}
// 群管理变动
case 'admin': {
if (!config.groupAdminChange) return
if (!await redis.get(`yenai:notice:groupAdminChange`)) return
if (e.user_id === cfg.qq) {
msg = [
segment.image(
@@ -245,8 +242,10 @@ export class newgroups extends plugin {
case 'ban': {
let Forbiddentime = getsecond(e.duration)
if (!config.botBeenBanned) return
if (!await redis.get(`yenai:notice:botBeenBanned`)) return
if (e.user_id != cfg.qq) return
if (e.duration == 0) {
msg = [
segment.image(
@@ -271,7 +270,7 @@ export class newgroups extends plugin {
}
// 群转让
case 'transfer': {
if (!config.groupNumberChange) return
if (!await redis.get(`yenai:notice:groupNumberChange`)) return
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
@@ -286,7 +285,7 @@ export class newgroups extends plugin {
// 群撤回
case 'recall': {
// 开启或关闭
if (!config.groupRecall) return
if (!await redis.get(`yenai:notice:groupRecall`)) return
// 是否为机器人撤回
if (e.user_id == cfg.qq) return
// 是否为主人撤回
@@ -374,7 +373,7 @@ export class application extends plugin {
}
async accept(e) {
if (!config.friendRequest) return
if (!await redis.get(`yenai:notice:friendRequest`)) return
let msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[通知 - 添加好友申请]\n',
@@ -406,7 +405,7 @@ export class invitation extends plugin {
async accept(e) {
let msg = ''
if (!config.groupInviteRequest) return
if (!await redis.get(`yenai:notice:groupInviteRequest`)) return
if (cfg.masterQQ.includes(e.user_id)) return
@@ -429,34 +428,18 @@ export class invitation extends plugin {
}
}
/** 消息 */
let deltime
export class anotice extends plugin {
constructor() {
super({
name: '消息',
dsc: '闪照等消息',
event: 'message',
rule: [
{
/** 命令正则匹配 */
reg: '^#?同意申请.*$',
/** 执行方法 */
fnc: 'agree'
},
{
/** 命令正则匹配 */
reg: '^#?(同意|拒绝)$',
/** 执行方法 */
fnc: 'agrees'
},
{
/** 命令正则匹配 */
reg: '^#?回复.*$',
/** 执行方法 */
fnc: 'Replys'
}
]
})
}
async init() {
deltime = await redis.get(`yenai:notice:deltime`)
}
async accept(e) {
// 判断是否为机器人消息
@@ -464,6 +447,8 @@ export class anotice extends plugin {
// 判断是否主人消息
if (cfg.masterQQ.includes(e.user_id)) return
// 判断群聊还是私聊
if (e.isGroup) {
// 关闭撤回停止存储
@@ -472,7 +457,7 @@ export class anotice extends plugin {
await redis.set(
`notice:messageGroup:${e.message_id}`,
JSON.stringify(e.message),
{ EX: config.deltime }
{ EX: deltime }
)
}
} else if (e.isPrivate) {
@@ -482,7 +467,7 @@ export class anotice extends plugin {
await redis.set(
`notice:messagePrivate:${e.message_id}`,
JSON.stringify(e.message),
{ EX: config.deltime }
{ EX: deltime }
)
}
}
@@ -493,7 +478,7 @@ export class anotice extends plugin {
if (
e.message[0].type == 'flash' &&
e.message_type === 'group' &&
config.flashPhoto
await redis.get(`yenai:notice:flashPhoto`)
) {
msg = [
segment.image(`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`),
@@ -507,7 +492,7 @@ export class anotice extends plugin {
} else if (
e.message[0].type == 'flash' &&
e.message_type === 'discuss' &&
config.flashPhoto
await redis.get(`yenai:notice:flashPhoto`)
) {
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
@@ -521,7 +506,7 @@ export class anotice extends plugin {
} else if (
e.message[0].type == 'flash' &&
e.message_type === 'private' &&
config.flashPhoto
await redis.get(`yenai:notice:flashPhoto`)
) {
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
@@ -531,7 +516,7 @@ export class anotice extends plugin {
`闪照链接:${e.message[0].url}`
]
} else if (e.message_type === 'private' && e.sub_type === 'friend') {
if (!config.privateMessage) return
if (!await redis.get(`yenai:notice:privateMessage`)) return
let res = e.message
// 特殊消息处理
@@ -560,7 +545,7 @@ export class anotice extends plugin {
)
}
} else if (e.message_type === 'private' && e.sub_type === 'group') {
if (!config.grouptemporaryMessage) return
if (!await redis.get(`yenai:notice:grouptemporaryMessage`)) return
// 特殊消息处理
let res = e.message
let arr = this.getSpecial(e.message)
@@ -578,7 +563,7 @@ export class anotice extends plugin {
...res
]
} else if (e.message_type === 'group') {
if (!config.groupMessage) return
if (!await redis.get(`yenai:notice:groupMessage`)) return
// 特殊消息处理
let res = e.message
let arr = this.getSpecial(e.message)
@@ -598,7 +583,7 @@ export class anotice extends plugin {
...res
]
} else if (e.message_type === 'discuss') {
if (!config.groupMessage) return
if (!await redis.get(`yenai:notice:groupMessage`)) return
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[消息 - 群聊消息]\n',
@@ -639,121 +624,6 @@ export class anotice extends plugin {
}
} else return false
}
/** 同意好友申请 */
async agree(e) {
if (!e.isMaster) return
let qq = e.message[0].text.replace(/#|同意申请/g, '').trim()
if (e.message[1]) {
qq = e.message[1].qq
} else {
qq = qq.match(/[1-9]\d*/g)
}
if (!qq) {
e.reply('❎ 请输入正确的QQ号')
return false
}
await Bot.pickFriend(qq)
.setFriendReq()
.then(() => e.reply(`✅ 已同意${qq}的好友申请`))
.catch((err) => console.log(err))
}
/** 引用同意好友申请和群邀请 */
async agrees(e) {
if (!e.isMaster) return
if (!e.source) return
if (!e.isPrivate) return
let yes = true
if (/拒绝/.test(e.msg)) {
yes = false
}
let source = (await e.friend.getChatHistory(e.source.time, 1)).pop()
let res
try {
res = source.raw_message.split('\n')
} catch {
e.reply('❎ 消息可能已过期')
return false
}
if (/申请人QQ/.test(res[1]) && /好友申请/.test(res[0])) {
let qq = res[1].match(/[1-9]\d*/g)
if (Bot.fl.get(Number(qq))) return e.reply('❎ 已经同意过该申请了哦~')
Bot.pickFriend(qq)
.setFriendReq('', yes)
.then(() => e.reply(`✅ 已${yes ? '同意' : '拒绝'}${qq}的好友申请`))
.catch(() => e.reply('❎ 请检查是否已同意该申请'))
} else if (
/目标群号/.test(res[1]) &&
/邀请人QQ/.test(res[3]) &&
/邀请码/.test(res[6])
) {
// 这里借鉴了一下p佬的进群同意p佬我的超人
let groupid = res[1].match(/[1-9]\d*/g)
if (Bot.fl.get(Number(groupid))) { return e.reply('❎ 已经同意过该申请了哦~') }
let qq = res[3].match(/[1-9]\d*/g)
let seq = res[6].match(/[1-9]\d*/g)
Bot.pickUser(qq)
.setGroupInvite(groupid, seq, yes)
.then(() => e.reply(`✅ 已${yes ? '同意' : '拒绝'}${qq}的群邀请`))
.catch(() => e.reply('❎ 请检查是否已同意该邀请'))
} else {
e.reply('❎ 请检查是否引用正确')
}
}
// 回复好友消息
async Replys(e) {
if (!e.isMaster) return
if (!e.isPrivate) return
let qq;
let msgs = e.message[0].text.split(' ')
if (e.source) {
let source = (await e.friend.getChatHistory(e.source.time, 1)).pop();
let res;
try {
res = source.raw_message.split('\n')
} catch {
return e.reply('❎ 消息可能已过期')
}
if (/好友消息/.test(res[0]) && /好友QQ/.test(res[1])) {
qq = res[1].match(/[1-9]\d*/g)
} else if (/群临时消息/.test(res[0])) {
return e.reply('❎ 群临时消息无法回复,请添加好友')
} else {
return e.reply('❎ 请检查是否引用正确')
}
e.message[0].text = e.message[0].text.replace(/#|回复/g, '').trim()
} else {
if (msgs.length == 1 && !/\d/.test(msgs[0])) {
return e.reply('❎ QQ号不能为空')
} else if (/\d/.test(msgs[0])) {
qq = msgs[0].match(/[1-9]\d*/g)
e.message[0].text = msgs.slice(1).join(' ')
} else {
qq = msgs[1]
e.message[0].text = msgs.slice(2).join(' ')
}
}
if (!/^\d+$/.test(qq)) return e.reply('❎ QQ号不正确人家做不到的啦>_<~')
if (!Bot.fl.get(Number(qq))) return e.reply('❎ 好友列表查无此人')
if (!e.message[0].text) e.message.shift()
if (e.message.length === 0) return e.reply('❎ 消息不能为空')
Bot.pickFriend(qq)
.sendMsg(e.message)
.then(() => { e.reply('✅ 已把消息发给它了哦~') })
.catch((err) => e.reply(`❎ 发送失败\n错误信息为:${err.message}`))
}
}

View File

@@ -1,5 +1,4 @@
import plugin from '../../../lib/plugins/plugin.js'
import xcfg from "../model/Config"
export class NewConfig extends plugin {
constructor() {
@@ -29,40 +28,6 @@ export class NewConfig extends plugin {
},
]
})
this.path = './plugins/yenai-plugin/config'
this.configpath = './plugins/yenai-plugin/config/config.json'
}
async init() {
if (!fs.existsSync(this.path)) {
fs.mkdirSync(this.path)
}
// 检测有无配置文件,没有就创建默认配置文件
if (!fs.existsSync(this.configpath)) {
let configs = {
privateMessage: true, // 好友消息
groupMessage: false, // 群|讨论组消息(不建议开启)
grouptemporaryMessage: true, // 群临时消息
groupRecall: true, // 群撤回
PrivateRecall: true, // 好友撤回
// 申请通知
friendRequest: true, // 好友申请
groupInviteRequest: true, // 群邀请
// 信息变动
groupAdminChange: true, // 群管理变动
// 列表变动
friendNumberChange: true, // 好友列表变动
groupNumberChange: true, // 群聊列表变动
groupMemberNumberChange: false, // 群成员变动
// 其他通知
flashPhoto: true, // 闪照
botBeenBanned: true, // 机器人被禁言
// 是否给全部管理发送通知(默认只通知第一个管理)
notificationsAll: false,
// 设置删除消息缓存的时间单位s(用于撤回监听)
deltime: 600 // 不建议太大
}
await xcfg.getwrite(this.configpath, configs)
}
}
// 更改配置
@@ -76,7 +41,10 @@ export class NewConfig extends plugin {
let yes = false
if (/开启/.test(e.msg)) yes = true
// 回复
if (await getcfg(option, yes)) {
let res = await redis.set(`yenai:notice:${configs[option]}`, yes)
if (res == "OK") {
e.reply(`✅ 已${yes ? '开启' : '关闭'}${option}通知`)
}
}
@@ -93,14 +61,18 @@ export class NewConfig extends plugin {
if (time < 120) return e.reply('❎ 时间不能小于两分钟')
if (await getcfg('缓存时间', Number(time))) {
let res = await redis.set(`yenai:notice:deltime`, Number(time))
if (res == "OK") {
e.reply(`✅ 已设置删除缓存时间为${getsecond(time)}`)
}
}
async SeeConfig() {
let config = await xcfg.getread(this.configpath)
let config = {}
for (let i in configs) {
let res = await redis.get(`yenai:notice:${configs[i]}`)
config[i] = res
}
let msg = [
`闪照 ${config.flashPhoto ? '✅' : '❎'}\n`,
@@ -122,36 +94,25 @@ export class NewConfig extends plugin {
await this.e.reply(msg)
}
}
/**更改配置 */
async function getcfg(key, value) {
// 路径
let path = './plugins/yenai-plugin/config/config.json'
// 配置类
const parameter = {
好友消息: 'privateMessage',
群消息: 'groupMessage',
群临时消息: 'grouptemporaryMessage',
群撤回: 'groupRecall',
好友撤回: 'PrivateRecall',
好友申请: 'friendRequest',
群邀请: 'groupInviteRequest',
群管理变动: 'groupAdminChange',
好友列表变动: 'friendNumberChange',
群聊列表变动: 'groupNumberChange',
群成员变动: 'groupMemberNumberChange',
闪照: 'flashPhoto',
禁言: 'botBeenBanned',
全部管理: 'notificationsAll',
缓存时间: 'deltime'
}
// 判断是否有这一项类
if (!parameter.hasOwnProperty(key)) return false
// 读取配置
let cfg = await xcfg.getread(path)
// 更改配置
cfg[parameter[key]] = value
// 写入
await xcfg.getwrite(path, cfg)
return true
const configs = {
好友消息: "privateMessage",
群消息: "groupMessage",
群临时消息: "grouptemporaryMessage",
群撤回: "groupRecall",
好友撤回: "PrivateRecall",
// 申请通知
好友申请: "friendRequest",
群邀请: "groupInviteRequest",
// 信息变动
群管理变动: "groupAdminChange",
// 列表变动
好友列表变动: "friendNumberChange",
群聊列表变动: "groupNumberChange",
群成员变动: "groupMemberNumberChange",
// 其他通知
闪照: "flashPhoto",
禁言: "botBeenBanned",
全部通知: "notificationsAll",
删除缓存: "deltime"
}

View File

@@ -1,17 +0,0 @@
{
"privateMessage": true,
"groupMessage": false,
"grouptemporaryMessage": true,
"groupRecall": true,
"PrivateRecall": true,
"friendRequest": true,
"groupInviteRequest": true,
"groupAdminChange": true,
"friendNumberChange": true,
"groupNumberChange": true,
"groupMemberNumberChange": false,
"flashPhoto": true,
"botBeenBanned": true,
"notificationsAll": false,
"deltime": 600
}

View File

@@ -8,6 +8,11 @@ logger.info('-----------')
logger.info('椰奶插件初始化~')
logger.info('-----------')
if (!await redis.get(`yenai:notice:deltime`)) {
await redis.set(`yenai:notice:deltime`, "600")
}
files.forEach((file) => {
ret.push(import(`./apps/${file}`))
})