This commit is contained in:
yeyang
2024-03-22 20:57:47 +08:00
committed by 🌌
parent b8f1d7d0fa
commit f6f8c93ff9
15 changed files with 131 additions and 122 deletions

View File

@@ -22,5 +22,6 @@ module.exports = {
'camelcase': 'off',
'quote-props': ['error', 'consistent'],
'no-eval': ['error', { 'allowIndirect': true }]
}
},
ignorePatterns: ['resources/state/echarts.min.js']
}

1
.gitignore vendored
View File

@@ -4,6 +4,5 @@ data/
test.*
*.log
.vscode/
.eslintignore
temp/
*.css.map

5
.husky/pre-commit Normal file
View File

@@ -0,0 +1,5 @@
echo "-----------代码正在eslint格式化-----------"
pnpm run lint
echo "-----------代码格式化完成-----------"

View File

@@ -92,7 +92,7 @@ export class Admin extends plugin {
// 更改配置
async ConfigSwitch (e) {
if (!common.checkPermission(e, 'master')) return
if (!common.checkPermission(e, 'master')) return
// 解析消息
let regRet = SwitchCfgReg.exec(e.msg)
let key = regRet[1]
@@ -126,7 +126,7 @@ if (!common.checkPermission(e, 'master')) return
// 修改数字设置
async ConfigNumber (e) {
if (!common.checkPermission(e, 'master')) return
if (!common.checkPermission(e, 'master')) return
let regRet = e.msg.match(NumberCfgReg)
let type = NumberCfgType[regRet[1]]
let number = checkNumberValue(regRet[2], type.limit)
@@ -136,7 +136,7 @@ if (!common.checkPermission(e, 'master')) return
// 修改全部通知设置
async SetAllNotice (e) {
if (!common.checkPermission(e, 'master')) return
if (!common.checkPermission(e, 'master')) return
let yes = /启用/.test(e.msg)
for (let i in NoticeCfgType) {
Config.modify('whole', NoticeCfgType[i], yes)
@@ -145,7 +145,7 @@ if (!common.checkPermission(e, 'master')) return
}
async Settings (e) {
if (!common.checkPermission(e, 'master')) return
if (!common.checkPermission(e, 'master')) return
if (/sese|涩涩/.test(e.msg)) {
this.SeSe_Settings(e)
} else {

View File

@@ -16,7 +16,7 @@ let GroupListMsgReg = /^#发群列表\s?(\d+(,\d+){0,})\s?([^]*)$/
let friendTypeReg = /^#更改好友申请方式([0123])((.*)\s(.*))?$/
export class Assistant extends plugin {
constructor() {
constructor () {
super({
name: '椰奶小助手',
event: 'message',
@@ -134,13 +134,13 @@ export class Assistant extends plugin {
})
}
get Bot() {
get Bot () {
return this.e.bot ?? Bot
}
/** 改头像 */
async SetAvatar(e) {
if (!common.checkPermission(e, 'master')) return
async SetAvatar (e) {
if (!common.checkPermission(e, 'master')) return
if (!e.img) {
this.setContext('_avatarContext')
e.reply('⚠ 请发送图片')
@@ -155,7 +155,7 @@ if (!common.checkPermission(e, 'master')) return
})
}
async _avatarContext() {
async _avatarContext () {
let img = this.e.img
if (/取消/.test(this.e.msg)) {
this.finish('_avatarContext')
@@ -178,8 +178,8 @@ if (!common.checkPermission(e, 'master')) return
}
/** 改昵称 */
async SetNickname(e) {
if (!common.checkPermission(e, 'master')) return
async SetNickname (e) {
if (!common.checkPermission(e, 'master')) return
let name = e.msg.replace(/#|改昵称/g, '').trim()
await this.Bot.setNickname(name)
@@ -191,8 +191,8 @@ if (!common.checkPermission(e, 'master')) return
}
/** 改群名片 */
async SetGroupCard(e) {
if (!common.checkPermission(e, 'master')) return
async SetGroupCard (e) {
if (!common.checkPermission(e, 'master')) return
let group = ''
let card = ''
@@ -223,7 +223,7 @@ if (!common.checkPermission(e, 'master')) return
}
/** 改群头像 */
async SetGroupAvatar(e) {
async SetGroupAvatar (e) {
if (e.isPrivate) {
if (!e.isMaster) return logger.mark(`${e.logFnc}不为主人`)
e.group_id = e.msg.replace(/#|改群头像/g, '').trim()
@@ -255,7 +255,7 @@ if (!common.checkPermission(e, 'master')) return
})
}
_GroupAvatarContext(e) {
_GroupAvatarContext (e) {
let img = this.e.img
if (/取消/.test(this.e.msg)) {
this.finish('_GroupAvatarContext')
@@ -278,8 +278,8 @@ if (!common.checkPermission(e, 'master')) return
}
/** 改群昵称 */
async SetGroupName(e) {
if (!common.checkPermission(e, 'admin', 'admin')) return
async SetGroupName (e) {
if (!common.checkPermission(e, 'admin', 'admin')) return
let group = ''
let card = ''
@@ -315,8 +315,8 @@ if (!common.checkPermission(e, 'admin', 'admin')) return
}
/** 改签名 */
async SetSignature(e) {
if (!common.checkPermission(e, 'master')) return
async SetSignature (e) {
if (!common.checkPermission(e, 'master')) return
let signs = e.msg.replace(/#|改签名/g, '').trim()
await this.Bot.setSignature(signs)
.then(() => e.reply('✅ 签名修改成功'))
@@ -327,8 +327,8 @@ if (!common.checkPermission(e, 'master')) return
}
/** 改状态 */
async SetOnlineStatus(e) {
if (!common.checkPermission(e, 'master')) return
async SetOnlineStatus (e) {
if (!common.checkPermission(e, 'master')) return
let signs = e.msg.replace(/#|改状态/g, '').trim()
if (!signs) return e.reply('❎ 状态不为空可选值我在线上离开隐身忙碌Q我吧请勿打扰')
@@ -346,8 +346,8 @@ if (!common.checkPermission(e, 'master')) return
}
/** 发好友 */
async SendFriendMsg(e) {
if (!common.checkPermission(e, 'master')) return
async SendFriendMsg (e) {
if (!common.checkPermission(e, 'master')) return
let regRet = FriendsReg.exec(e.msg)
let qq = regRet[1]
e.message[0].text = regRet[2]
@@ -365,8 +365,8 @@ if (!common.checkPermission(e, 'master')) return
}
/** 发群聊 */
async SendGroupMsg(e) {
if (!common.checkPermission(e, 'master')) return
async SendGroupMsg (e) {
if (!common.checkPermission(e, 'master')) return
let regRet = GroupMsgReg.exec(e.msg)
let gpid = regRet[1]
@@ -387,8 +387,8 @@ if (!common.checkPermission(e, 'master')) return
}
// 发送群列表
async SendGroupListMsg(e) {
if (!common.checkPermission(e, 'master')) return
async SendGroupListMsg (e) {
if (!common.checkPermission(e, 'master')) return
// 获取参数
let regRet = GroupListMsgReg.exec(e.msg)
let gpid = regRet[1]
@@ -438,8 +438,8 @@ if (!common.checkPermission(e, 'master')) return
}
/** 退群 */
async QuitGroup(e) {
if (!common.checkPermission(e, 'master')) return
async QuitGroup (e) {
if (!common.checkPermission(e, 'master')) return
let quits = e.msg.replace(/#|退群/g, '').trim()
if (!quits) return e.reply('❎ 群号不能为空')
@@ -447,12 +447,12 @@ if (!common.checkPermission(e, 'master')) return
if (!/^\d+$/.test(quits)) return e.reply('❎ 群号不合法')
if (!this.Bot.gl.get(Number(quits))) return e.reply('❎ 群聊列表查无此群')
if (quits == e.group_id) {
e.reply('✅ 3秒后退出本群聊')
await common.sleep(3000)
e.reply('✅ 3秒后退出本群聊')
await common.sleep(3000)
}
await this.Bot.pickGroup(quits).quit()
.then(() => e.reply('✅ 已退出群聊'))
.catch((err) => {
@@ -462,8 +462,8 @@ if (!common.checkPermission(e, 'master')) return
}
/** 删好友 */
async DeleteFriend(e) {
if (!common.checkPermission(e, 'master')) return
async DeleteFriend (e) {
if (!common.checkPermission(e, 'master')) return
let quits = e.msg.replace(/#|删好友/g, '').trim()
if (e.message[1]) {
@@ -484,8 +484,8 @@ if (!common.checkPermission(e, 'master')) return
}
/** 改性别 */
async SetGender(e) {
if (!common.checkPermission(e, 'master')) return
async SetGender (e) {
if (!common.checkPermission(e, 'master')) return
let sex = e.msg.replace(/#|改性别/g, '').trim()
if (!sex) return e.reply('❎ 性别不能为空 可选值:男,女,无\n改为无为无性别')
@@ -506,7 +506,7 @@ if (!common.checkPermission(e, 'master')) return
}
/** 取直链 */
async ImageLink(e) {
async ImageLink (e) {
let img = []
if (e.source) {
let source
@@ -543,7 +543,7 @@ if (!common.checkPermission(e, 'master')) return
return true
}
async _ImageLinkContext() {
async _ImageLinkContext () {
let img = this.e.img
if (this.e.msg === '取消') {
this.finish('_ImageLinkContext')
@@ -560,7 +560,7 @@ if (!common.checkPermission(e, 'master')) return
}
/** 取Face表情 */
async Face(e) {
async Face (e) {
let face = []
for (let m of e.message) {
if (m.type === 'face') {
@@ -588,8 +588,8 @@ if (!common.checkPermission(e, 'master')) return
}
/** QQ空间 说说列表 */
async Qzonelist(e) {
if (!common.checkPermission(e, 'master')) return
async Qzonelist (e) {
if (!common.checkPermission(e, 'master')) return
let page = e.msg.replace(/#|获?取说说列表/g, '').trim()
if (!page) {
page = 0
@@ -614,8 +614,8 @@ if (!common.checkPermission(e, 'master')) return
}
/** 删除说说 */
async Qzonedel(e) {
if (!common.checkPermission(e, 'master')) return
async Qzonedel (e) {
if (!common.checkPermission(e, 'master')) return
let pos = e.msg.match(/\d+/)
// 获取说说列表
let list = await new QQApi(e).getQzone(1, pos - 1)
@@ -637,8 +637,8 @@ if (!common.checkPermission(e, 'master')) return
}
/** 发说说 */
async Qzonesay(e) {
if (!common.checkPermission(e, 'master')) return
async Qzonesay (e) {
if (!common.checkPermission(e, 'master')) return
let con = e.msg.replace(/#|发说说/g, '').trim()
let result = await new QQApi(e).setQzone(con, e.img)
if (!result) return e.reply(API_ERROR)
@@ -654,8 +654,8 @@ if (!common.checkPermission(e, 'master')) return
}
/** 清空说说和留言 */
async QzonedelAll(e) {
if (!common.checkPermission(e, 'master')) return
async QzonedelAll (e) {
if (!common.checkPermission(e, 'master')) return
if (/清空说说/.test(e.msg)) {
this.setContext('_QzonedelAllContext')
e.reply('✳️ 即将删除全部说说请发送:\n' + '------确认清空或取消------')
@@ -667,7 +667,7 @@ if (!common.checkPermission(e, 'master')) return
}
}
async _QzonedelAllContext(e) {
async _QzonedelAllContext (e) {
let msg = this.e.msg
if (/#?确认清空/.test(msg)) {
this.finish('_QzonedelAllContext')
@@ -692,8 +692,8 @@ if (!common.checkPermission(e, 'master')) return
}
// 获取群|好友列表
async GlOrFl(e) {
if (!common.checkPermission(e, 'master')) return
async GlOrFl (e) {
if (!common.checkPermission(e, 'master')) return
let msg = []
if (/群列表/.test(e.msg)) {
// 获取群列表并转换为数组
@@ -718,7 +718,7 @@ if (!common.checkPermission(e, 'master')) return
}
// 引用撤回
async RecallMsgown(e) {
async RecallMsgown (e) {
if (!e.source) return false
let source
if (e.isGroup) {
@@ -730,12 +730,10 @@ if (!common.checkPermission(e, 'master')) return
if (e.isGroup) {
// 群聊判断权限
if (!e.isMaster && !e.member.is_owner && !e.member.is_admin)
return logger.warn(`${e.logFnc}该群员权限不足`)
if (!e.isMaster && !e.member.is_owner && !e.member.is_admin) { return logger.warn(`${e.logFnc}该群员权限不足`) }
} else {
// 私聊判断是否为Bot消息
if (source.sender.user_id != this.Bot.uin)
return logger.warn(`${e.logFnc}引用不是Bot消息`)
if (source.sender.user_id != this.Bot.uin) { return logger.warn(`${e.logFnc}引用不是Bot消息`) }
}
if (source.message[0].type === 'file' && e.isGroup) {
// 删除文件
@@ -765,16 +763,16 @@ if (!common.checkPermission(e, 'master')) return
}
// 开关好友添加
async FriendSwitch(e) {
if (!common.checkPermission(e, 'master')) return
async FriendSwitch (e) {
if (!common.checkPermission(e, 'master')) return
let res = await new QQApi(e).addFriendSwitch(/开启/.test(e.msg) ? 1 : 2)
if (!res) return e.reply(API_ERROR)
e.reply(res.ActionStatus)
}
// 好友申请方式
async FriendType(e) {
if (!common.checkPermission(e, 'master')) return
async FriendType (e) {
if (!common.checkPermission(e, 'master')) return
let regRet = friendTypeReg.exec(e.msg)
if (regRet[1] == 0) return e.reply('1为允许所有人2为需要验证3为问答正确问答(需填问题和答案,格式为:#更改好友申请方式3 问题 答案)')
// 单独处理
@@ -787,8 +785,8 @@ if (!common.checkPermission(e, 'master')) return
}
/** 开关戳一戳 */
async Cyc(e) {
if (!common.checkPermission(e, 'master')) return
async Cyc (e) {
if (!common.checkPermission(e, 'master')) return
let result = await new QQApi(e).setcyc(/开启/.test(e.msg) ? 0 : 1)
if (!result) return e.reply(API_ERROR)
@@ -796,53 +794,50 @@ if (!common.checkPermission(e, 'master')) return
e.reply(`✅ 已${/开启/.test(e.msg) ? '开启' : '关闭'}戳一戳功能`)
}
async setModel(e) {
if (!common.checkPermission(e, 'master')) return
async setModel (e) {
if (!common.checkPermission(e, 'master')) return
let model = e.msg.replace(/#|设置机型/g, '')
let res = await new QQApi(e).setModel(model).catch(err => logger.error(err))
e.reply(_.get(res, ['13031', 'data', 'rsp', 'iRet']) == 0 ? '设置成功' : '设置失败')
}
async BlockOne(e) {
if (!common.checkPermission(e, 'master')) return
let type = ""
let name = "拉"
async BlockOne (e) {
if (!common.checkPermission(e, 'master')) return
let type = ''
let name = '拉'
if (/^#拉白(群聊?)?/.test(this.e.msg)) {
type += "white"
name += "白"
type += 'white'
name += '白'
} else {
type += "black"
name += "黑"
type += 'black'
name += '黑'
}
if (/^#拉[黑白](群聊?)/.test(this.e.msg)) {
type += "Group"
name += "群"
type += 'Group'
name += '群'
} else {
type += Version.name == "TRSS-Yunzai" ? "User" : "QQ"
type += Version.name == 'TRSS-Yunzai' ? 'User' : 'QQ'
}
const configPath = 'config/config/other.yaml'
/** 判断at */
if (this.e.at) {
this.blackResult = this.e.at
} else {
if (Version.name == "TRSS-Yunzai") {
if (Version.name == 'TRSS-Yunzai') {
/** TRSS-Yunzai匹配所有字符 */
const blackId = this.e.msg.replace(/^#拉[黑白](群聊?)?/, '').trim()
this.blackResult = Number(blackId) || String(blackId)
} else {
const match = this.e.msg.match(/\d+/)
if (match?.[0])
this.blackResult = Number(match[0]) || String(match[0])
if (match?.[0]) { this.blackResult = Number(match[0]) || String(match[0]) }
}
}
if (!this.blackResult)
return this.e.reply(`${name}失败,没有键入用户或群号`)
if (!this.blackResult) { return this.e.reply(`${name}失败,没有键入用户或群号`) }
try {
const yamlContentBuffer = await fs.promises.readFile(configPath)
const yamlContent = yamlContentBuffer.toString('utf-8')
const data = yaml.parse(yamlContent)
if (!Array.isArray(data[type]))
data[type] = []
if (!Array.isArray(data[type])) { data[type] = [] }
if (!data[type].includes(this.blackResult)) {
data[type].push(this.blackResult)
const updatedYaml = yaml.stringify(data, { quote: false })
@@ -858,38 +853,36 @@ if (!common.checkPermission(e, 'master')) return
}
}
async CancelBlockOne(e) {
if (!common.checkPermission(e, 'master')) return
let type = ""
let name = "取消拉"
async CancelBlockOne (e) {
if (!common.checkPermission(e, 'master')) return
let type = ''
let name = '取消拉'
if (/^#(取消|删除|移除)(群聊?)?拉白(群聊?)?/.test(this.e.msg)) {
type += "white"
name += "白"
type += 'white'
name += '白'
} else {
type += "black"
name += "黑"
type += 'black'
name += '黑'
}
if (/^#(取消|删除|移除)拉[黑白](群聊?)/.test(this.e.msg)) {
type += "Group"
name += "群"
type += 'Group'
name += '群'
} else {
type += Version.name == "TRSS-Yunzai" ? "User" : "QQ"
type += Version.name == 'TRSS-Yunzai' ? 'User' : 'QQ'
}
const configPath = 'config/config/other.yaml'
if (this.e.at) {
this.blackResult = this.e.at
} else {
if (Version.name == "TRSS-Yunzai") {
if (Version.name == 'TRSS-Yunzai') {
const blackId = this.e.msg.replace(/^#(取消|(删|移)除)拉[黑白](群聊?)?/, '').trim()
this.blackResult = Number(blackId) || String(blackId)
} else {
const match = this.e.msg.match(/\d+/)
if (match?.[0])
this.blackResult = Number(match[0]) || String(match[0])
if (match?.[0]) { this.blackResult = Number(match[0]) || String(match[0]) }
}
}
if (!this.blackResult)
return this.e.reply(`${name}失败,没有键入用户或群号`)
if (!this.blackResult) { return this.e.reply(`${name}失败,没有键入用户或群号`) }
try {
const yamlContentBuffer = await fs.promises.readFile(configPath)
const yamlContent = yamlContentBuffer.toString('utf-8')

View File

@@ -21,7 +21,7 @@ _.forIn(picApis, (values, key) => {
const apiReg = new RegExp(`(${picApiKeys.join('|')}|^jktj$|^接口统计$)`)
export class Fun extends plugin {
constructor(e) {
constructor (e) {
super({
name: '椰奶娱乐',
event: 'message',
@@ -81,8 +81,7 @@ export class Fun extends plugin {
}
]
})
if (e?.message?.[0]?.text == "#全部赞我")
this.thumbUp(e)
if (e?.message?.[0]?.text == '#全部赞我') { this.thumbUp(e) }
}
/** 随机唱鸭 */
@@ -263,8 +262,8 @@ export class Fun extends plugin {
common.recallsendMsg(e, segment.image(url))
redis.set(key, 'cd', { EX: 2 })
}
async LookAvatar() {
async LookAvatar () {
const id = this.e.msg.replace(/^#?查?看头像/, '').trim() || this.e.at ||
this.e.message.find(item => item.type == 'at')?.qq || this.e.user_id
try {
@@ -276,4 +275,4 @@ export class Fun extends plugin {
await this.reply('❎ 获取头像错误', true)
return false
}
}
}

View File

@@ -439,7 +439,7 @@ export class GroupAdmin extends plugin {
// 查看和清理从未发言的人
async neverspeak (e) {
if (!common.checkPermission(e, 'admin', 'admin')) { return true }
if (!common.checkPermission(e, 'admin', 'admin')) { return true }
let list = null
try {
list = await new Ga(e).getNeverSpeak(e.group_id)

View File

@@ -253,4 +253,4 @@ async function verify (user_id, group_id, e) {
remindTimer
}
}
}
}

View File

@@ -32,7 +32,7 @@ export class PrivateGroupAdmin extends plugin {
}
async muteMember (e) {
if (!common.checkPermission(e, 'master')) return
if (!common.checkPermission(e, 'master')) return
let regRet = e.msg.match(muteMemberReg)
const time = common.translateChinaNum(regRet[3])
let res = await new Ga(e).muteMember(regRet[1], regRet[2], e.user_id, time, regRet[4])
@@ -40,14 +40,14 @@ if (!common.checkPermission(e, 'master')) return
}
async noMuteMember (e) {
if (!common.checkPermission(e, 'master')) return
if (!common.checkPermission(e, 'master')) return
let regRet = e.msg.match(/^#解禁\s?(\d+)\s(\d+)$/)
let res = await new Ga(e).muteMember(regRet[1], regRet[2], e.user_id, 0)
e.reply(res)
}
async muteAll (e) {
if (!common.checkPermission(e, 'master')) return
if (!common.checkPermission(e, 'master')) return
let regRet = e.msg.match(/全体(禁言|解禁)(\d+)/)
let group = (e.bot ?? Bot).pickGroup(Number(regRet[2]))
group.muteAll(regRet[1] == '禁言')
@@ -55,7 +55,7 @@ if (!common.checkPermission(e, 'master')) return
}
async kickMember (e) {
if (!common.checkPermission(e, 'master')) return
if (!common.checkPermission(e, 'master')) return
let regRet = e.msg.match(/#踢\s?(\d+)\s(\d+)$/)
let res = await Ga.kickMember(regRet[1], regRet[2], e.user_id)
e.reply(res)

View File

@@ -54,11 +54,11 @@ export class NewHandle extends plugin {
if (!e.isMaster) return false
let yes = !!/同意/.test(e.msg)
const systemMsg = (await (e.bot ?? Bot).getSystemMsg());
const FriendAdd = systemMsg.filter(
const systemMsg = (await (e.bot ?? Bot).getSystemMsg())
let FriendAdd = systemMsg.filter(
item => item.request_type == 'friend' &&
(item.sub_type === 'add' || item.sub_type === 'single')
);
)
if (_.isEmpty(FriendAdd)) return e.reply('暂无好友申请(。-ω-)zzz', true)

View File

@@ -55,7 +55,7 @@ export class NewSearch extends plugin {
}
async bggRank (e) {
let url = `https://boardgamegeek.com/browse/boardgame`;
e.reply([await puppeteer.Webpage({ url }), "目前BGG桌游排行榜如图访问链接"+url])
let url = 'https://boardgamegeek.com/browse/boardgame'
e.reply([await puppeteer.Webpage({ url }), '目前BGG桌游排行榜如图访问链接' + url])
}
}

View File

@@ -33,7 +33,7 @@ export class Update extends plugin {
* @returns
*/
async update (e) {
if (!common.checkPermission(e, 'master')) return true
if (!common.checkPermission(e, 'master')) return true
/** 检查是否正在更新中 */
if (uping) {

View File

@@ -1,4 +1,3 @@
import YAML from 'yaml'
import chokidar from 'chokidar'
import fs from 'node:fs'

View File

@@ -1,4 +1,3 @@
/** 涩涩帮助 */
export const helpCfg = {
title: '椰奶涩涩帮助',

View File

@@ -6,7 +6,9 @@
"type": "module",
"scripts": {
"contributors:add": "all-contributors add",
"contributors:generate": "all-contributors generate"
"contributors:generate": "all-contributors generate",
"lint": "lint-staged --allow-empty",
"prepare": "husky"
},
"repository": {
"type": "git",
@@ -24,6 +26,18 @@
"systeminformation": "^5.17.12"
},
"devDependencies": {
"all-contributors-cli": "^6.24.0"
"all-contributors-cli": "^6.24.0",
"eslint": "^8.57.0",
"eslint-config-standard": "^17.1.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-n": "^16.6.2",
"eslint-plugin-promise": "^6.1.1",
"husky": "^9.0.11",
"lint-staged": "^15.2.2"
},
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint ./ --fix"
]
}
}