mirror of
https://github.com/yoimiya-kokomi/miao-plugin.git
synced 2024-11-16 04:35:42 +00:00
115 lines
2.4 KiB
JavaScript
115 lines
2.4 KiB
JavaScript
import lodash from 'lodash'
|
|
import { plugin } from '../adapter/index.js'
|
|
import { getMysApi, checkAuth } from '../adapter/mys.js'
|
|
|
|
class App {
|
|
constructor (cfg) {
|
|
this.id = cfg.id
|
|
this.cfg = cfg
|
|
this.apps = {}
|
|
}
|
|
|
|
reg (key, fn, cfg = {}) {
|
|
this.apps[key] = {
|
|
fn,
|
|
...cfg
|
|
}
|
|
}
|
|
|
|
app () {
|
|
let cfg = this.cfg || {}
|
|
let rules = []
|
|
|
|
let cls = class extends plugin {
|
|
constructor () {
|
|
super({
|
|
name: `喵喵:${cfg.name || cfg.id}`,
|
|
desc: cfg.desc || '喵喵插件',
|
|
event: 'message',
|
|
priority: 50,
|
|
rule: rules
|
|
})
|
|
}
|
|
}
|
|
|
|
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
|
|
})
|
|
|
|
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)
|
|
}
|
|
}
|
|
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
|