feat: 插件备份

Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
2021-08-14 12:45:51 +08:00
parent 2a58ad46d2
commit b9a9334655
6 changed files with 116 additions and 54 deletions

View File

@@ -67,7 +67,7 @@ export class MiaoConsole extends interfaces.Plugin {
} }
}) })
this.task.create(() => { this.task.create(() => {
if (!this.babel) { if (!this.babel && this.serverType != constants.ServerType.Bungee) {
try { try {
this.logger.console('§3脚本 Babel 引擎初始化中 请稍候...') this.logger.console('§3脚本 Babel 引擎初始化中 请稍候...')
let startTime = Date.now() let startTime = Date.now()
@@ -164,7 +164,11 @@ export class MiaoConsole extends interfaces.Plugin {
if (this.rootLogger) { if (this.rootLogger) {
let AbstractHandler = Java.type('java.util.logging.Handler') let AbstractHandler = Java.type('java.util.logging.Handler')
let ProxyHandler = Java.extend(AbstractHandler, { let ProxyHandler = Java.extend(AbstractHandler, {
publish: (record) => process.emit('message', record.getMessage()), publish: (record) => {
if (record.getLevel().intValue() > 500) {
process.emit('message', record.getMessage())
}
},
flush: () => { }, flush: () => { },
close: () => { } close: () => { }
}) })
@@ -248,18 +252,21 @@ export class MiaoConsole extends interfaces.Plugin {
checkWebSocketClient(client: SocketIOSocket) { checkWebSocketClient(client: SocketIOSocket) {
if (!this.token) { if (!this.token) {
this.logger.console(`§6客户端 §b${client.id} §a请求连接 §4服务器尚未设置 Token 无法连接!`) return this.notifyDisconnect(client, `§6客户端 §b${client.id} §a请求连接 §4服务器尚未设置 Token 无法连接!`)
client.emit('unauthorized', () => client.disconnect(true))
return false
} }
if (this.token != client.handshake.query.token) { if (this.token != client.handshake.query.token) {
this.logger.console(`§6客户端 §b${client.id} §c无效请求 §4请提供正确Token后再次连接!`) return this.notifyDisconnect(client, `§6客户端 §b${client.id} §c无效请求 §4请提供正确Token后再次连接!`)
client.emit('unauthorized', () => client.disconnect(true))
return false
} }
return true return true
} }
private notifyDisconnect(client: SocketIOSocket, reason: string) {
this.logger.console(reason)
client.emit('unauthorized', () => client.disconnect(true))
setTimeout(() => { if (client.connected) { client.disconnect(true) } }, 5)
return false
}
startSocketIOServer() { startSocketIOServer() {
let namespace = this.socketIOServer.of('/MiaoConsole') let namespace = this.socketIOServer.of('/MiaoConsole')
process.on('message', (msg) => namespace.emit('log', msg)) process.on('message', (msg) => namespace.emit('log', msg))

View File

@@ -2,9 +2,10 @@
/// <reference types="@javatypes/bukkit-api" /> /// <reference types="@javatypes/bukkit-api" />
/// <reference types="@javatypes/sponge-api" /> /// <reference types="@javatypes/sponge-api" />
import { plugin, server, task } from '@ccms/api' import { constants, plugin, server, task } from '@ccms/api'
import { Autowired } from '@ccms/container' import { Autowired } from '@ccms/container'
import { Config, interfaces, JSPlugin, PluginConfig } from '@ccms/plugin' import { Config, disable, enable, interfaces, JSPlugin, PluginConfig } from '@ccms/plugin'
import { client } from '@ccms/websocket'
import http from '@ccms/common/dist/http' import http from '@ccms/common/dist/http'
@@ -26,7 +27,7 @@ const defaultDataConfig = {
server_total_entities: "%server_total_entities%", server_total_entities: "%server_total_entities%",
} }
@JSPlugin({ prefix: 'Dashboard', version: '1.0.0', author: 'MiaoWoo', source: __filename, depends: ['MiaoConsole'] }) @JSPlugin({ prefix: 'Dashboard', version: '1.0.0', author: 'MiaoWoo', depends: ['MiaoConsole'], source: __filename })
export class MiaoDashboard extends interfaces.Plugin { export class MiaoDashboard extends interfaces.Plugin {
@Autowired() @Autowired()
private server: server.Server private server: server.Server
@@ -44,7 +45,8 @@ export class MiaoDashboard extends interfaces.Plugin {
@Config() @Config()
private dataConfig: PluginConfig & typeof defaultDataConfig = defaultDataConfig private dataConfig: PluginConfig & typeof defaultDataConfig = defaultDataConfig
@Config({ autosave: true }) @Config({ autosave: true })
private dataCache: { [key: string]: { time: string, value: Number }[] } = {} private dataCache: PluginConfig & { [key: string]: { time: string, value: Number }[] } = {}
private statisticTimer: task.Task private statisticTimer: task.Task
private PlaceholderAPI: { setPlaceholders: (player: any, str: string) => string } private PlaceholderAPI: { setPlaceholders: (player: any, str: string) => string }
@@ -66,6 +68,10 @@ export class MiaoDashboard extends interfaces.Plugin {
} }
}) })
}) })
}
@enable({ servers: [constants.ServerType.Bukkit] })
enableBukkit() {
this.PlaceholderAPI = base.getClass("me.clip.placeholderapi.PlaceholderAPI").static this.PlaceholderAPI = base.getClass("me.clip.placeholderapi.PlaceholderAPI").static
this.statisticTimer = this.taskManager.create(() => { this.statisticTimer = this.taskManager.create(() => {
for (const key of Object.keys(this.dataConfig)) { for (const key of Object.keys(this.dataConfig)) {
@@ -79,6 +85,41 @@ export class MiaoDashboard extends interfaces.Plugin {
} }
} }
}, this).async().timer(20 * 10).submit() }, this).async().timer(20 * 10).submit()
this.proxys = client.io('ws://192.168.2.25:25577/MiaoConsole?access_token=325325', {
path: "/ws"
})
this.proxys.on('connect', () => {
this.logger.info('connect')
this.proxys.emit('type', (type) => {
console.log('server type is ' + type)
})
})
this.proxys.on('log', (msg) => {
console.log(msg)
})
}
private proxys
@enable({ servers: [constants.ServerType.Bungee] })
enbaleBungee() {
this.proxys = client.io('ws://192.168.2.25:25565/MiaoConsole?access_token=325325', {
path: "/ws"
})
this.proxys.on('connect', () => {
this.logger.info('connect')
this.proxys.emit('type', (type) => {
console.log('server type is ' + type)
})
})
this.proxys.on('log', (msg) => {
console.log(msg)
})
}
@disable({ servers: [constants.ServerType.Bungee] })
disableBungee() {
} }
private dateFormat(fmt: string, date = new Date()) { private dateFormat(fmt: string, date = new Date()) {
@@ -103,7 +144,7 @@ export class MiaoDashboard extends interfaces.Plugin {
disable() { disable() {
this.namespace?.close() this.namespace?.close()
this.statisticTimer.cancel() this.statisticTimer?.cancel()
} }
private wrapper(fn, data) { private wrapper(fn, data) {

View File

@@ -2,11 +2,11 @@
/// <reference types="@javatypes/bukkit-api" /> /// <reference types="@javatypes/bukkit-api" />
/// <reference types="@javatypes/sponge-api" /> /// <reference types="@javatypes/sponge-api" />
import { particle } from '@ccms/api' import { constants, particle } from '@ccms/api'
import { Autowired } from '@ccms/container' import { Autowired } from '@ccms/container'
import { Cmd, JSPlugin, Tab, interfaces } from '@ccms/plugin' import { Cmd, JSPlugin, Tab, interfaces } from '@ccms/plugin'
@JSPlugin({ version: '1.0.0', author: 'MiaoWoo', source: __filename }) @JSPlugin({ version: '1.0.0', author: 'MiaoWoo', servers: [constants.ServerType.Bukkit], source: __filename })
export class MiaoParticle extends interfaces.Plugin { export class MiaoParticle extends interfaces.Plugin {
@Autowired() @Autowired()
private particleManager: particle.ParticleManager private particleManager: particle.ParticleManager

View File

@@ -10,13 +10,8 @@ import type { MiaoReward } from './MiaoReward'
import http from '@ccms/common/dist/http' import http from '@ccms/common/dist/http'
import * as CryptoJS from "crypto-js" import * as CryptoJS from "crypto-js"
const Thread = java.lang.Thread const Thread = Java.type('java.lang.Thread')
interface PlayerPointsAPI {
look(name: string)
give(name: string, amount: number)
take(name: string, amount: number)
}
interface App { interface App {
appid: string appid: string
appname: string appname: string
@@ -78,7 +73,7 @@ const defaultConfig = {
} }
} }
@JSPlugin({ version: '1.5.0', author: 'MiaoWoo', source: __filename, servers: [constants.ServerType.Bukkit], depends: ['MiaoReward'], nativeDepends: ['PlaceholderAPI', 'ProtocolLib'] }) @JSPlugin({ version: '1.6.1', author: 'MiaoWoo', source: __filename, servers: [constants.ServerType.Bukkit], depends: ['MiaoReward'], nativeDepends: ['PlaceholderAPI', 'ProtocolLib'] })
export class MiaoPay extends interfaces.Plugin { export class MiaoPay extends interfaces.Plugin {
@Autowired() @Autowired()
private server: server.Server private server: server.Server
@@ -154,6 +149,10 @@ export class MiaoPay extends interfaces.Plugin {
} catch (error) { } catch (error) {
return this.logger.sender(sender, error.message || error) return this.logger.sender(sender, error.message || error)
} }
this.taskManager.create(() => this.createOrderByPlayer(sender, amount)).async().submit()
}
private createOrderByPlayer(sender: org.bukkit.entity.Player, amount: number = 0) {
this.MiaoReward.sendTitle(sender, `§6充值 §a${amount} §6${this.config.coinName}`, '§c正在请求充值二维码 请稍候...') this.MiaoReward.sendTitle(sender, `§6充值 §a${amount} §6${this.config.coinName}`, '§c正在请求充值二维码 请稍候...')
let sync: any = { scaned: false, start: Math.round(Date.now() / 1000) } let sync: any = { scaned: false, start: Math.round(Date.now() / 1000) }
let order = this.createOrder(sender, amount) let order = this.createOrder(sender, amount)
@@ -248,14 +247,14 @@ export class MiaoPay extends interfaces.Plugin {
let point = this.safeMultiply(amount, this.config.ratio) let point = this.safeMultiply(amount, this.config.ratio)
let finish = this.preFinishOrder(order_id) let finish = this.preFinishOrder(order_id)
if (finish.code != 200) { if (finish.code != 200) {
this.sendError(sender, order_id, amount, '§4充值预标记异常!') this.sendError(sender, order_id, amount, '充值预标记异常!')
return this.logger.console(`§c充值系统异常 订单 §3${order_id} 预标记异常! §4${this.config.coinName}已停止充值 §c请手动补单!`) return this.logger.console(`§c充值系统异常 订单 §3${order_id} 预标记异常! §4${this.config.coinName}已停止充值 §c请手动补单!`)
} }
this.taskManager.callSyncMethod(() => { this.taskManager.callSyncMethod(() => {
let prePoint = this.getPlayerAmount(sender) let prePoint = this.getPlayerAmount(sender)
let command = this.config.command.replace('%player_name%', sender.getName()).replace('%amount%', `${point}`).replace('%remark%', `${order_id}`) let command = this.config.command.replace('%player_name%', sender.getName()).replace('%amount%', `${point}`).replace('%remark%', `${order_id}`)
if (!this.server.dispatchConsoleCommand(command)) { if (!this.server.dispatchConsoleCommand(command)) {
return this.sendError(sender, order_id, amount, '§4充值命令执行异常!') return this.sendError(sender, order_id, amount, '充值命令执行异常!')
} }
this.checkRecharge(sender, order_id, amount, prePoint, point) this.checkRecharge(sender, order_id, amount, prePoint, point)
}) })
@@ -271,7 +270,7 @@ export class MiaoPay extends interfaces.Plugin {
this.taskManager.create(() => { this.taskManager.create(() => {
let nowPoint = this.checkNowPoint(sender, point, prePoint) let nowPoint = this.checkNowPoint(sender, point, prePoint)
if (nowPoint === false) { if (nowPoint === false) {
return this.sendError(sender, order_id, amount, '§4充值结果检测异常!') return this.sendError(sender, order_id, amount, '充值结果检测异常!')
} }
this.logger.sender(sender, [ this.logger.sender(sender, [
`§6充值 §a${point} §6${this.config.coinName} §a成功 §6当前账户余额: §3${nowPoint} §6${this.config.coinName}`, `§6充值 §a${point} §6${this.config.coinName} §a成功 §6当前账户余额: §3${nowPoint} §6${this.config.coinName}`,
@@ -280,29 +279,18 @@ export class MiaoPay extends interfaces.Plugin {
this.rewardOrder(sender, order_id, point) this.rewardOrder(sender, order_id, point)
let finish = this.finishOrder(order_id) let finish = this.finishOrder(order_id)
if (finish.code != 200) { if (finish.code != 200) {
return this.logger.console(`§c充值系统异常 订单 §3${order_id} 完成标记异常! §4${this.config.coinName}可能重复到账!`) this.errorOrder(order_id, '充值完成标记异常 请到后台标记为已兑换!')
return this.logger.console(`§c充值系统异常 订单 §3${order_id} §c完成标记异常! §a请到后台标记为已兑换! §4否则${this.config.coinName}可能重复到账!`)
} }
}).async().submit() }).async().submit()
} }
private checkNowPoint(sender: org.bukkit.entity.Player, point: number, prePoint: number) { private checkNowPoint(sender: org.bukkit.entity.Player, point: number, prePoint: number, times: number = 1) {
if (times > 3) { return false }
let nowPoint = this.getPlayerAmount(sender) let nowPoint = this.getPlayerAmount(sender)
if (nowPoint == prePoint + point) { if (nowPoint == prePoint + point) { return nowPoint }
return nowPoint Thread.sleep(times * 100)
} return this.checkNowPoint(sender, point, prePoint, times++)
Thread.sleep(100)
nowPoint = this.getPlayerAmount(sender)
if (nowPoint == prePoint + point) {
return nowPoint
}
Thread.sleep(200)
nowPoint = this.getPlayerAmount(sender)
if (nowPoint == prePoint + point) {
return nowPoint
}
Thread.sleep(300)
nowPoint = this.getPlayerAmount(sender)
return false
} }
private rewardOrder(sender, order_id, point) { private rewardOrder(sender, order_id, point) {
@@ -333,7 +321,7 @@ export class MiaoPay extends interfaces.Plugin {
} }
sendError(sender: org.bukkit.entity.Player, order_id: string, amount: number, error: string) { sendError(sender: org.bukkit.entity.Player, order_id: string, amount: number, error: string) {
return this.logger.sender(sender, [ this.logger.sender(sender, [
`§c========== ${this.config.prefix}§4充值异常 §c==========`, `§c========== ${this.config.prefix}§4充值异常 §c==========`,
`§6异常订单: §3${order_id}`, `§6异常订单: §3${order_id}`,
`§6订单金额: §3${amount}`, `§6订单金额: §3${amount}`,
@@ -341,8 +329,10 @@ export class MiaoPay extends interfaces.Plugin {
`§6异常账号: §b${sender.getName()}`, `§6异常账号: §b${sender.getName()}`,
`§6异常时间: §a${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`, `§6异常时间: §a${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`,
`§c如果已付款但${this.config.coinName}未到账 请截图发给腐竹!`, `§c如果已付款但${this.config.coinName}未到账 请截图发给腐竹!`,
`§c可尝试重新登录 或 执行 §3/mpay check §c手动补单!`,
`§c========== ${this.config.prefix}§4充值异常 §c==========`, `§c========== ${this.config.prefix}§4充值异常 §c==========`,
]) ])
this.errorOrder(order_id, error)
} }
@Tab() @Tab()
@@ -367,11 +357,15 @@ export class MiaoPay extends interfaces.Plugin {
} }
private preFinishOrder(id: string) { private preFinishOrder(id: string) {
return this.httpPost('/preFinish', { id }) return this.httpPost('/preFinish', { id }, true)
}
private errorOrder(id: string, error: string) {
return this.httpPost('/error', { id, error }, true)
} }
private finishOrder(id: string) { private finishOrder(id: string) {
return this.httpPost('/finish', { id }) return this.httpPost('/finish', { id }, true)
} }
private createOrder(sender: org.bukkit.entity.Player, amount: number): Order { private createOrder(sender: org.bukkit.entity.Player, amount: number): Order {
@@ -397,13 +391,14 @@ export class MiaoPay extends interfaces.Plugin {
return this.httpPost('/unconverted', { username, force }) return this.httpPost('/unconverted', { username, force })
} }
private httpPost(method: string, data: any) { private httpPost(method: string, data: any, retry = false) {
let startTime = Date.now() let startTime = Date.now()
data.appid = this.config.id data.appid = this.config.id
data.timestamp = Math.round(Date.now() / 1000) data.timestamp = Math.round(Date.now() / 1000)
data.nonce = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'.replace(/x/g, () => (Math.random() * 16 | 0).toString(16)) data.nonce = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'.replace(/x/g, () => (Math.random() * 16 | 0).toString(16))
data.sign = this.sign(data) data.sign = this.sign(data)
let url = `${this.apiGateWay}/api${method}` let url = `${this.apiGateWay}/api${method}`
try {
let result = http.post(url, data) let result = http.post(url, data)
console.debug(` console.debug(`
====== HTTP POST ====== ====== HTTP POST ======
@@ -412,6 +407,14 @@ REQUEST DATA: ${JSON.stringify(data)}
RESPONSE : ${JSON.stringify(result)} RESPONSE : ${JSON.stringify(result)}
CAST TIME : ${Date.now() - startTime}`) CAST TIME : ${Date.now() - startTime}`)
return result return result
} catch (error) {
if (retry) {
return this.httpPost(method, data)
} else {
console.console('§4请求支付中心发生异常 请联系管理员处理此问题!')
console.ex(error)
}
}
} }
private http_build_query(params: any) { private http_build_query(params: any) {

View File

@@ -2,7 +2,7 @@
/// <reference types="@javatypes/bukkit-api" /> /// <reference types="@javatypes/bukkit-api" />
/// <reference types="@javatypes/sponge-api" /> /// <reference types="@javatypes/sponge-api" />
import { plugin, server, task } from '@ccms/api' import { constants, plugin, server, task } from '@ccms/api'
import { Autowired, JSClass } from '@ccms/container' import { Autowired, JSClass } from '@ccms/container'
import { Cmd, Config, interfaces, JSPlugin, Listener, PluginConfig, Tab } from '@ccms/plugin' import { Cmd, Config, interfaces, JSPlugin, Listener, PluginConfig, Tab } from '@ccms/plugin'
@@ -37,7 +37,7 @@ const defaultConfig = {
} }
} }
@JSPlugin({ version: '1.0.1', author: 'MiaoWoo', source: __filename, depends: ['MiaoReward'], nativeDepends: ['PlaceholderAPI'] }) @JSPlugin({ version: '1.0.1', author: 'MiaoWoo', servers: [constants.ServerType.Bukkit], depends: ['MiaoReward'], nativeDepends: ['PlaceholderAPI'], source: __filename })
export class MiaoRebate extends interfaces.Plugin { export class MiaoRebate extends interfaces.Plugin {
@Autowired() @Autowired()
private server: server.Server private server: server.Server

View File

@@ -233,7 +233,7 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
this.logger.sender(sender, `§6[§3BPM§6][§a${this.serverName}§6] §6命令 §b/mspm ${args.join?.(' ')} §a发布成功!`) this.logger.sender(sender, `§6[§3BPM§6][§a${this.serverName}§6] §6命令 §b/mspm ${args.join?.(' ')} §a发布成功!`)
} }
@Cmd({ servers: [constants.ServerType.Bungee] }) @Cmd({ alias: ["bmspm"], servers: [constants.ServerType.Bungee] })
bungeemspm(sender: any, command: string, args: string[]) { bungeemspm(sender: any, command: string, args: string[]) {
if (!sender.hasPermission('mspm.admin')) { return this.i18n(sender, 'main.command.no.permission') } if (!sender.hasPermission('mspm.admin')) { return this.i18n(sender, 'main.command.no.permission') }
this.taskManager.create(() => this.main(sender, command, args)).async().submit() this.taskManager.create(() => this.main(sender, command, args)).async().submit()
@@ -437,12 +437,23 @@ export class MiaoScriptPackageManager extends interfaces.Plugin {
this.i18n(sender, 'prun.script', { name }) this.i18n(sender, 'prun.script', { name })
this.i18n(sender, 'run.script', { script }) this.i18n(sender, 'run.script', { script })
let result = this.runCode(script, sender, this.pluginManager.getPlugins().get(name)) let result = this.runCode(script, sender, this.pluginManager.getPlugins().get(name))
this.i18n(sender, 'run.result', { result: result == undefined ? this.translate.translate('run.noresult') : typeof result == "string" ? result : JSON.stringify(result) }) this.i18n(sender, 'run.result', { result: result == undefined ? this.translate.translate('run.noresult') : typeof result == "string" ? result : this.stringify(result) })
} catch (ex) { } catch (ex) {
this.logger.sender(sender, this.logger.stack(ex)) this.logger.sender(sender, this.logger.stack(ex))
} }
} }
private stringify(object) {
let seen = []
return JSON.stringify(object, function (key, val) {
if (typeof val == "object") {
if (seen.indexOf(val) >= 0) return
seen.push(val)
}
return val
})
}
private runCode(code: string, sender: any, _this: any) { private runCode(code: string, sender: any, _this: any) {
let paramNames = [ let paramNames = [
'sender', 'sender',