miao-plugin/components/App.js

115 lines
2.4 KiB
JavaScript
Raw Normal View History

2022-09-16 21:45:10 +00:00
import lodash from 'lodash'
2022-09-16 20:37:09 +00:00
import { plugin } from '../adapter/index.js'
2022-09-16 21:45:10 +00:00
import { getMysApi, checkAuth } from '../adapter/mys.js'
2022-09-16 20:37:09 +00:00
class App {
constructor (cfg) {
this.id = cfg.id
this.cfg = cfg
this.apps = {}
}
reg (key, fn, cfg = {}) {
this.apps[key] = {
fn,
...cfg
}
}
2022-09-16 21:45:10 +00:00
app () {
2022-09-16 20:37:09 +00:00
let cfg = this.cfg || {}
2022-09-16 21:45:10 +00:00
let rules = []
2022-09-16 20:37:09 +00:00
let cls = class extends plugin {
constructor () {
super({
name: `喵喵:${cfg.name || cfg.id}`,
2022-09-16 22:01:31 +00:00
desc: cfg.desc || cfg.name || '喵喵插件',
2022-09-16 20:37:09 +00:00
event: 'message',
priority: 50,
2022-09-16 21:45:10 +00:00
rule: rules
2022-09-16 20:37:09 +00:00
})
}
2022-09-16 21:45:10 +00:00
}
for (let key in this.apps) {
let app = this.apps[key]
key = lodash.camelCase(key)
let rule = app.rule || app.reg || 'noCheck'
if (typeof (rule) === 'string') {
if (rule === '#poke#') {
continue
} else if (rule === 'noCheck') {
rule = '.+'
}
} else {
rule = lodash.trim(rule.toString(), '/')
}
rules.push({
reg: rule,
fnc: key
})
2022-09-16 20:37:09 +00:00
2022-09-16 21:45:10 +00:00
cls.prototype[key] = async function () {
let e = this.e
e.original_msg = e.original_msg || e.msg
e.checkAuth = e.checkAuth || async function (cfg) {
return await checkAuth(e, cfg)
}
e.getMysApi = e.getMysApi || async function (cfg) {
return await getMysApi(e, cfg)
}
return await app.fn.call(this, e)
2022-09-16 20:37:09 +00:00
}
}
return cls
}
// 获取v2版rule
rule () {
let cfg = this.cfg
return {
reg: 'noCheck',
describe: cfg.desc || '',
priority: 50,
hashMark: true
}
}
// v2执行方法
v2 (e) {
let apps = this.apps
return async function (e) {
let msg = e.original_msg || e.msg || ''
for (let key in apps) {
let app = apps[key]
let rule = app.rule || app.reg || 'noCheck'
if (app.rule) {
if (typeof (rule) === 'string') {
if (rule === '#poke#') {
continue
} else if (rule === 'noCheck') {
rule = /.*/
}
rule = new RegExp(rule)
}
if (rule.test(msg)) {
let ret = await app.fn(e, {})
if (ret === true) {
return true
}
}
}
}
return false
}
}
}
App.init = function (cfg) {
return new App(cfg)
}
export default App