diff --git a/apps/handle.js b/apps/handle.js new file mode 100644 index 0000000..dd45fc7 --- /dev/null +++ b/apps/handle.js @@ -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}`)) + } + + +} \ No newline at end of file diff --git a/apps/notice.js b/apps/notice.js index b5d922d..2451a91 100644 --- a/apps/notice.js +++ b/apps/notice.js @@ -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}`)) - } } diff --git a/apps/set.js b/apps/set.js index 721934b..10ee0b8 100644 --- a/apps/set.js +++ b/apps/set.js @@ -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" } diff --git a/config/noticecfg.json b/config/noticecfg.json deleted file mode 100644 index fdc6363..0000000 --- a/config/noticecfg.json +++ /dev/null @@ -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 -} diff --git a/index.js b/index.js index 67a84be..0d5eab4 100644 --- a/index.js +++ b/index.js @@ -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}`)) })