From b9a93346555ca6eb67307b72fee1bba159f61ff9 Mon Sep 17 00:00:00 2001 From: MiaoWoo Date: Sat, 14 Aug 2021 12:45:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8F=92=E4=BB=B6=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: MiaoWoo --- packages/plugins/src/MiaoConsole.ts | 23 ++++-- packages/plugins/src/MiaoDashboard.ts | 51 +++++++++++-- packages/plugins/src/MiaoParticle.ts | 4 +- packages/plugins/src/MiaoPay.ts | 73 ++++++++++--------- packages/plugins/src/MiaoRebate.ts | 4 +- .../plugins/src/MiaoScriptPackageManager.ts | 15 +++- 6 files changed, 116 insertions(+), 54 deletions(-) diff --git a/packages/plugins/src/MiaoConsole.ts b/packages/plugins/src/MiaoConsole.ts index 85b8539c..4de53ff7 100644 --- a/packages/plugins/src/MiaoConsole.ts +++ b/packages/plugins/src/MiaoConsole.ts @@ -67,7 +67,7 @@ export class MiaoConsole extends interfaces.Plugin { } }) this.task.create(() => { - if (!this.babel) { + if (!this.babel && this.serverType != constants.ServerType.Bungee) { try { this.logger.console('§3脚本 Babel 引擎初始化中 请稍候...') let startTime = Date.now() @@ -164,7 +164,11 @@ export class MiaoConsole extends interfaces.Plugin { if (this.rootLogger) { let AbstractHandler = Java.type('java.util.logging.Handler') 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: () => { }, close: () => { } }) @@ -248,18 +252,21 @@ export class MiaoConsole extends interfaces.Plugin { checkWebSocketClient(client: SocketIOSocket) { if (!this.token) { - this.logger.console(`§6客户端 §b${client.id} §a请求连接 §4服务器尚未设置 Token 无法连接!`) - client.emit('unauthorized', () => client.disconnect(true)) - return false + return this.notifyDisconnect(client, `§6客户端 §b${client.id} §a请求连接 §4服务器尚未设置 Token 无法连接!`) } if (this.token != client.handshake.query.token) { - this.logger.console(`§6客户端 §b${client.id} §c无效请求 §4请提供正确Token后再次连接!`) - client.emit('unauthorized', () => client.disconnect(true)) - return false + return this.notifyDisconnect(client, `§6客户端 §b${client.id} §c无效请求 §4请提供正确Token后再次连接!`) } 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() { let namespace = this.socketIOServer.of('/MiaoConsole') process.on('message', (msg) => namespace.emit('log', msg)) diff --git a/packages/plugins/src/MiaoDashboard.ts b/packages/plugins/src/MiaoDashboard.ts index c7d3b56a..85d8b04e 100644 --- a/packages/plugins/src/MiaoDashboard.ts +++ b/packages/plugins/src/MiaoDashboard.ts @@ -2,9 +2,10 @@ /// /// -import { plugin, server, task } from '@ccms/api' +import { constants, plugin, server, task } from '@ccms/api' 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' @@ -26,7 +27,7 @@ const defaultDataConfig = { 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 { @Autowired() private server: server.Server @@ -44,7 +45,8 @@ export class MiaoDashboard extends interfaces.Plugin { @Config() private dataConfig: PluginConfig & typeof defaultDataConfig = defaultDataConfig @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 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.statisticTimer = this.taskManager.create(() => { 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.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()) { @@ -103,7 +144,7 @@ export class MiaoDashboard extends interfaces.Plugin { disable() { this.namespace?.close() - this.statisticTimer.cancel() + this.statisticTimer?.cancel() } private wrapper(fn, data) { diff --git a/packages/plugins/src/MiaoParticle.ts b/packages/plugins/src/MiaoParticle.ts index 938372b2..26b7308b 100644 --- a/packages/plugins/src/MiaoParticle.ts +++ b/packages/plugins/src/MiaoParticle.ts @@ -2,11 +2,11 @@ /// /// -import { particle } from '@ccms/api' +import { constants, particle } from '@ccms/api' import { Autowired } from '@ccms/container' 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 { @Autowired() private particleManager: particle.ParticleManager diff --git a/packages/plugins/src/MiaoPay.ts b/packages/plugins/src/MiaoPay.ts index 9355f8fb..e4c9e56a 100644 --- a/packages/plugins/src/MiaoPay.ts +++ b/packages/plugins/src/MiaoPay.ts @@ -10,13 +10,8 @@ import type { MiaoReward } from './MiaoReward' import http from '@ccms/common/dist/http' 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 { appid: 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 { @Autowired() private server: server.Server @@ -154,6 +149,10 @@ export class MiaoPay extends interfaces.Plugin { } catch (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正在请求充值二维码 请稍候...') let sync: any = { scaned: false, start: Math.round(Date.now() / 1000) } 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 finish = this.preFinishOrder(order_id) 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请手动补单!`) } this.taskManager.callSyncMethod(() => { let prePoint = this.getPlayerAmount(sender) let command = this.config.command.replace('%player_name%', sender.getName()).replace('%amount%', `${point}`).replace('%remark%', `${order_id}`) 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) }) @@ -271,7 +270,7 @@ export class MiaoPay extends interfaces.Plugin { this.taskManager.create(() => { let nowPoint = this.checkNowPoint(sender, point, prePoint) if (nowPoint === false) { - return this.sendError(sender, order_id, amount, '§4充值结果检测异常!') + return this.sendError(sender, order_id, amount, '充值结果检测异常!') } this.logger.sender(sender, [ `§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) let finish = this.finishOrder(order_id) 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() } - 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) - if (nowPoint == prePoint + point) { - return nowPoint - } - 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 + if (nowPoint == prePoint + point) { return nowPoint } + Thread.sleep(times * 100) + return this.checkNowPoint(sender, point, prePoint, times++) } 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) { - return this.logger.sender(sender, [ + this.logger.sender(sender, [ `§c========== ${this.config.prefix}§4充值异常 §c==========`, `§6异常订单: §3${order_id}`, `§6订单金额: §3${amount}`, @@ -341,8 +329,10 @@ export class MiaoPay extends interfaces.Plugin { `§6异常账号: §b${sender.getName()}`, `§6异常时间: §a${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`, `§c如果已付款但${this.config.coinName}未到账 请截图发给腐竹!`, + `§c可尝试重新登录 或 执行 §3/mpay check §c手动补单!`, `§c========== ${this.config.prefix}§4充值异常 §c==========`, ]) + this.errorOrder(order_id, error) } @Tab() @@ -367,11 +357,15 @@ export class MiaoPay extends interfaces.Plugin { } 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) { - return this.httpPost('/finish', { id }) + return this.httpPost('/finish', { id }, true) } private createOrder(sender: org.bukkit.entity.Player, amount: number): Order { @@ -397,21 +391,30 @@ export class MiaoPay extends interfaces.Plugin { return this.httpPost('/unconverted', { username, force }) } - private httpPost(method: string, data: any) { + private httpPost(method: string, data: any, retry = false) { let startTime = Date.now() data.appid = this.config.id data.timestamp = Math.round(Date.now() / 1000) data.nonce = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'.replace(/x/g, () => (Math.random() * 16 | 0).toString(16)) data.sign = this.sign(data) let url = `${this.apiGateWay}/api${method}` - let result = http.post(url, data) - console.debug(` + try { + let result = http.post(url, data) + console.debug(` ====== HTTP POST ====== REQUEST URL : ${url} REQUEST DATA: ${JSON.stringify(data)} RESPONSE : ${JSON.stringify(result)} 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) { diff --git a/packages/plugins/src/MiaoRebate.ts b/packages/plugins/src/MiaoRebate.ts index 7c5c6809..dd2eed48 100644 --- a/packages/plugins/src/MiaoRebate.ts +++ b/packages/plugins/src/MiaoRebate.ts @@ -2,7 +2,7 @@ /// /// -import { plugin, server, task } from '@ccms/api' +import { constants, plugin, server, task } from '@ccms/api' import { Autowired, JSClass } from '@ccms/container' 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 { @Autowired() private server: server.Server diff --git a/packages/plugins/src/MiaoScriptPackageManager.ts b/packages/plugins/src/MiaoScriptPackageManager.ts index 9d3f83b0..00e938df 100644 --- a/packages/plugins/src/MiaoScriptPackageManager.ts +++ b/packages/plugins/src/MiaoScriptPackageManager.ts @@ -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发布成功!`) } - @Cmd({ servers: [constants.ServerType.Bungee] }) + @Cmd({ alias: ["bmspm"], servers: [constants.ServerType.Bungee] }) bungeemspm(sender: any, command: string, args: string[]) { if (!sender.hasPermission('mspm.admin')) { return this.i18n(sender, 'main.command.no.permission') } 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, 'run.script', { script }) 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) { 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) { let paramNames = [ 'sender',