backup: plugins

Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
2021-06-22 15:52:27 +08:00
parent 3beed64319
commit be2988fc58
11 changed files with 744 additions and 46 deletions

View File

@@ -2,7 +2,7 @@
/// <reference types="@javatypes/bukkit-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 { Cmd, Config, interfaces, JSPlugin, Listener, PluginConfig, Tab } from '@ccms/plugin'
@@ -17,7 +17,12 @@ interface PlayerPointsAPI {
give(name: string, amount: number)
take(name: string, amount: number)
}
interface App {
appid: string
appname: string
ratio: number
coin_name: string
}
interface Order {
order_id: string
amount: number
@@ -73,7 +78,7 @@ const defaultConfig = {
}
}
@JSPlugin({ version: '1.3.5', author: 'MiaoWoo', source: __filename, depends: ['MiaoReward'], nativeDepends: ['PlaceholderAPI'] })
@JSPlugin({ version: '1.5.0', author: 'MiaoWoo', source: __filename, servers: [constants.ServerType.Bukkit], depends: ['MiaoReward'], nativeDepends: ['PlaceholderAPI', 'ProtocolLib'] })
export class MiaoPay extends interfaces.Plugin {
@Autowired()
private server: server.Server
@@ -87,28 +92,32 @@ export class MiaoPay extends interfaces.Plugin {
private apiGateWay = "https://pay.yumc.pw"
private MiaoReward: MiaoReward
private appInfo: App
private cacheMap = new Map<string, Order>();
private cacheSyncMap = new Map<string, Sync>();
private checkSet = new Set<string>();
@Config()
private config: PluginConfig & typeof defaultConfig = defaultConfig
load() {
let needSave = false
for (const key of Object.keys(defaultConfig)) {
if (!this.config[key]) {
this.config[key] = defaultConfig[key]
needSave = true
}
}
needSave && this.config.save()
this.MiaoReward = this.pluginManager.getPlugin('MiaoReward') as MiaoReward
}
enable() {
this.MiaoReward = this.pluginManager.getPlugin('MiaoReward') as MiaoReward
if (!this.MiaoReward) { return this.logger.error('当前脚本插件需要 MiaoReward 作为前置脚本插件!') }
if (!this.config.id || !this.config.secret) { return this.logger.console('§4尚未配置商户信息 将无法正常收款!') }
let info = this.httpPost('/apps', { id: this.config.id })
if (info.code == 200) {
this.appInfo = info.data
this.config.ratio = this.appInfo.ratio
this.config.coinName = this.appInfo.coin_name
} else {
this.logger.console('§4初始化支付系统失败 请检查配置是否正确!')
this.logger.console('§c服务器返回异常: §4' + info.msg)
}
}
disable() {
@@ -123,7 +132,9 @@ export class MiaoPay extends interfaces.Plugin {
cmdpay(sender: org.bukkit.entity.Player, amount: number = 0) {
if (!sender.getItemInHand) { return this.logger.sender(sender, '§4控制台无法执行此命令!') }
if (!this.MiaoReward.serverInfo) { return this.logger.sender(sender, '§4当前服务器尚未配置 请联系管理员先配置MiaoReward!') }
if (!this.appInfo) {
return this.logger.sender(sender, '§4当前服务器尚未配置 请联系管理员配置MiaoPay!')
}
if (!this.config.id || !this.config.secret) { return this.logger.sender(sender, '§c当前服务器尚未配置 请联系管理员配置支付密钥!') }
if (this.cacheMap.has(sender.getName())) {
this.logger.sender(sender, '§c您有一笔订单尚未完成 请完成支付或等待订单超时!')
@@ -136,7 +147,7 @@ export class MiaoPay extends interfaces.Plugin {
return
}
if (amount < 1) { return this.logger.sender(sender, `§c充值异常 §4充值金额不得小于 1 ${this.config.coinName}!`) }
if (amount / this.config.ratio > 1000) { return this.logger.sender(sender, `§c充值异常 §4充值金额不得大于 ${this.config.ratio * 1000} ${this.config.coinName}!`) }
if (amount / this.config.ratio > 5000) { return this.logger.sender(sender, `§c充值异常 §4充值金额不得大于 ${this.config.ratio * 5000} ${this.config.coinName}!`) }
if (amount != Math.round(amount)) { return this.logger.sender(sender, `§c充值异常 §4充值金额必须为整数!`) }
try {
this.getPlayerAmount(sender)
@@ -204,17 +215,25 @@ export class MiaoPay extends interfaces.Plugin {
}
cmdcheck(sender: org.bukkit.entity.Player, force = 1) {
if (this.checkSet.has(sender.getName())) {
return this.logger.sender(sender, '§c检查任务执行中 请稍候...')
}
this.checkSet.add(sender.getName())
this.logger.sender(sender, `§3正在检查需要补单充值的订单 请稍候...`)
this.taskManager.create(() => {
let result = this.queryUnconverted(sender.getName(), force)
if (result.code != 200) { return this.logger.sender(sender, `§c订单查询失败: ${result.msg}`) }
let unconverteds = result.data
if (!unconverteds.length) { return this.logger.sender(sender, `§c未发现需要进行补单充值的订单!`) }
this.logger.sender(sender, `§3发现 §a${unconverteds.length}笔 §3未充值订单 §c正在充值 请稍候...`)
for (const unconverted of unconverteds) {
this.logger.sender(sender, `§3正在处理订单 §a${unconverted.order_id} §3请稍候...`)
this.recharge(sender, unconverted)
Thread.sleep(300)
try {
let result = this.queryUnconverted(sender.getName(), force)
if (result.code != 200) { return this.logger.sender(sender, `§c订单查询失败: ${result.msg}`) }
let unconverteds = result.data
if (!unconverteds.length) { return this.logger.sender(sender, `§c未发现需要进行补单充值订单!`) }
this.logger.sender(sender, `§3发现 §a${unconverteds.length}笔 §3未充值订单 §c正在充值 请稍候...`)
for (const unconverted of unconverteds) {
this.logger.sender(sender, `§3正在处理订单 §a${unconverted.order_id} §3请稍候...`)
this.recharge(sender, unconverted)
Thread.sleep(300)
}
} finally {
this.checkSet.delete(sender.getName())
}
}).async().submit()
}
@@ -287,6 +306,7 @@ export class MiaoPay extends interfaces.Plugin {
}
private rewardOrder(sender, order_id, point) {
if (!this.config.reward) { return }
this.taskManager.callSyncMethod(() => {
try {
if (this.config.reward['*']) {
@@ -355,11 +375,11 @@ export class MiaoPay extends interfaces.Plugin {
}
private createOrder(sender: org.bukkit.entity.Player, amount: number): Order {
let serverName = this.MiaoReward.serverInfo.name
let serverName = this.appInfo?.appname
if (this.config.name) { serverName = `${serverName}(${this.config.name})` }
let result = this.httpPost('/create', {
subject: `${serverName} 充值 ${amount} ${this.config.coinName}`,
amount: amount / this.config.ratio,
amount: amount / this.appInfo.ratio,
username: sender.getName(),
unionId: sender.getUniqueId().toString()
})
@@ -381,6 +401,7 @@ export class MiaoPay extends interfaces.Plugin {
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)