Files
yenai-plugin/apps/setting.js

279 lines
7.2 KiB
JavaScript

import plugin from '../../../lib/plugins/plugin.js'
import fs from 'fs'
import _ from 'lodash'
import { Config } from '../components/index.js'
import { setu, puppeteer } from '../model/index.js'
const cfgType = {
好友消息: 'privateMessage',
群消息: 'groupMessage',
群临时消息: 'grouptemporaryMessage',
群撤回: 'groupRecall',
好友撤回: 'PrivateRecall',
// 申请通知
好友申请: 'friendRequest',
群邀请: 'groupInviteRequest',
加群申请: 'addGroupApplication',
// 信息变动
群管理变动: 'groupAdminChange',
// 列表变动
好友列表变动: 'friendNumberChange',
群聊列表变动: 'groupNumberChange',
群成员变动: 'groupMemberNumberChange',
// 其他通知
闪照: 'flashPhoto',
禁言: 'botBeenBanned',
输入: 'input',
全部通知: 'notificationsAll',
删除缓存: 'deltime',
涩涩: 'sese',
状态: 'state',
涩涩pro: 'sesepro',
匿名: 'anonymous',
陌生人点赞: 'Strangers_love',
// 给有问题的用户关闭定时器
状态任务: 'statusTask',
代理: 'switchProxy'
}
let managereg = new RegExp(`^#椰奶设置(${Object.keys(cfgType).join('|')})(开启|关闭)$`)
export class Setting extends plugin {
constructor () {
super({
name: '椰奶配置',
event: 'message',
priority: 100,
rule: [
{
reg: managereg,
fnc: 'ConfigManage',
permission: 'master'
},
{
reg: '^#椰奶设置(删除缓存时间|渲染精度)(\\d+)秒?$',
fnc: 'ConfigNumber',
permission: 'master'
},
{
reg: '^#椰奶设置$',
fnc: 'index_Settings',
permission: 'master'
},
{
reg: '^#椰奶(sese|涩涩)设置$',
fnc: 'SeSe_Settings',
permission: 'master'
},
{
reg: '^#椰奶(启用|禁用)全部通知$',
fnc: 'SetAll',
permission: 'master'
},
{
reg: '^#(增加|减少|查看)头衔屏蔽词.*$',
fnc: 'NoTitle',
permission: 'master'
},
{
reg: '^#切换头衔屏蔽词匹配(模式)?$',
fnc: 'NoTitlepattern',
permission: 'master'
}
]
})
}
// 更改配置
async ConfigManage (e) {
// 解析消息
let regRet = managereg.exec(e.msg)
let index = regRet[1]
let yes = regRet[2] == '开启'
// 单独处理
if (index == '涩涩pro' && yes) Config.modify('whole', 'sese', yes)
if (index == '涩涩' && !yes) Config.modify('whole', 'sesepro', yes)
// 特殊处理
if (index == '代理') {
Config.modify('proxy', 'switchProxy', yes)
} else {
Config.modify('whole', cfgType[index], yes)
}
let specialSese = ['涩涩', '涩涩pro', '代理', '匿名']
if (specialSese.includes(index)) {
return this.SeSe_Settings(e)
}
// 处理
this.index_Settings(e)
return true
}
// 设置删除缓存时间
async ConfigNumber (e) {
let number = e.msg.match(/\d+/)
number = Number(number[0])
let type = ''
if (/渲染精度/.test(e.msg)) {
if (number < 50) number = 50
if (number > 200) number = 200
type = 'renderScale'
} else {
if (number < 120) number = 120
type = 'deltime'
}
Config.modify('whole', type, number)
this.index_Settings(e)
}
// 修改全部设置
async SetAll (e) {
let yes = /启用/.test(e.msg)
// 设置的任务
let type = [
'privateMessage',
'groupMessage',
'grouptemporaryMessage',
'groupRecall',
'PrivateRecall',
'friendRequest',
'groupInviteRequest',
'addGroupApplication',
'groupAdminChange',
'friendNumberChange',
'groupNumberChange',
'groupMemberNumberChange',
'flashPhoto',
'botBeenBanned',
'input'
]
for (let i in cfgType) {
if (!type.includes(cfgType[i])) continue
Config.modify('whole', cfgType[i], yes)
}
this.index_Settings(e)
return true
}
// 渲染发送图片
async index_Settings (e) {
let data = {}
const special = ['deltime', 'renderScale']
for (let key in Config.Notice) {
if (special.includes(key)) {
data[key] = Number(Config.Notice[key])
} else {
data[key] = getStatus(Config.Notice[key])
}
}
// 渲染图像
return await puppeteer.render('admin/index', {
...data,
bg: await rodom()
}, {
e,
scale: 1.4
})
}
// 查看涩涩设置
async SeSe_Settings (e) {
let set = setu.getSeSeConfig(e)
let { proxy, pixiv, bika, Notice: { sese, sesepro, anonymous } } = Config
let data = {
sese: getStatus(sese),
sesepro: getStatus(sesepro),
anonymous: getStatus(anonymous),
r18: getStatus(set.r18),
cd: Number(set.cd),
recall: set.recall ? set.recall : '无',
switchProxy: getStatus(proxy.switchProxy),
pixivDirectConnection: getStatus(pixiv.pixivDirectConnection),
bikaDirectConnection: getStatus(bika.bikaDirectConnection),
pixivImageProxy: pixiv.pixivImageProxy,
bikaImageProxy: bika.bikaImageProxy,
imageQuality: bika.imageQuality
}
// 渲染图像
return await puppeteer.render('admin/sese', {
...data,
bg: await rodom()
}, {
e,
scale: 1.4
})
}
// 增删查头衔屏蔽词
async NoTitle (e) {
let data = Config.groupTitle.Shielding_words
if (/查看/.test(e.msg)) {
return e.reply(`现有的头衔屏蔽词如下:${data.join('\n')}`)
}
let msg = e.msg.replace(/#|(增加|减少)头衔屏蔽词/g, '').trim().split(',')
let type = /增加/.test(e.msg)
let no = []; let yes = []
for (let i of msg) {
if (data.includes(i)) {
no.push(i)
} else {
yes.push(i)
}
}
no = _.compact(_.uniq(no))
yes = _.compact(_.uniq(yes))
if (type) {
if (!_.isEmpty(yes)) {
for (let i of yes) {
Config.modifyarr('groupTitle', 'Shielding_words', i, 'add')
}
e.reply(`✅ 成功添加:${yes.join(',')}`)
}
if (!_.isEmpty(no)) {
e.reply(`❎ 以下词已存在:${no.join(',')}`)
}
} else {
if (!_.isEmpty(no)) {
for (let i of no) {
Config.modifyarr('groupTitle', 'Shielding_words', i, 'del')
}
e.reply(`✅ 成功删除:${no.join(',')}`)
}
if (!_.isEmpty(yes)) {
e.reply(`❎ 以下词未在屏蔽词中:${yes.join(',')}`)
}
}
}
// 修改头衔匹配模式
async NoTitlepattern (e) {
let data = Config.groupTitle.Match_pattern ? 0 : 1
Config.modify('groupTitle', 'Match_pattern', data)
e.reply(`✅ 已修改匹配模式为${data ? '精确' : '模糊'}匹配`)
}
}
// 随机底图
const rodom = async function () {
let image = fs.readdirSync('./plugins/yenai-plugin/resources/admin/imgs/bg')
let listImg = []
for (let val of image) {
listImg.push(val)
}
let imgs = listImg.length == 1 ? listImg[0] : listImg[_.random(0, listImg.length - 1)]
return imgs
}
const getStatus = function (rote) {
if (rote) {
return '<div class="cfg-status" >已开启</div>'
} else {
return '<div class="cfg-status status-off">已关闭</div>'
}
}