就是我翻遍了整个 Mirai 的社区和 Github,也没有找到一个类似的经济插件。但是一个生态比较重要的元素就是金融统一,所以我设想了一个针对于 Mirai 生态的前置插件——经济插件。
如果您曾经了解过 Minecraft 服务器中的经济类插件,那么可以直接代入到本插件的构思。
具体的 Minecraft 经济插件请见:https://www.mcbbs.net/thread-962904-1-1.html
命令
根据上方链接提供的命令列表来看,本插件也会分为用户命令、Bot 管理员命令和控制台命令三种层级的命令。
用户命令:
/money - 查询自身的余额
/money [@或QQ号] - 查询目标用户的余额
/pay <@或QQ号> <金额> - 转账给目标用户指定数量的金额
/moneytop - 查询金额排行榜
/moneyrank - 同上
Bot 管理员命令:
Bot 管理员可以设定多个,拥有此权限的管理员可以使用以下命令。
/money give <@或QQ号> <金额> - 给予指定用户指定数量的金额
/money take <@或QQ号> <金额> - 扣除指定用户指定数量的金额
/money set <@或QQ号> <金额> - 设定指定用户的金额为指定数量
控制台命令:
允许在控制台形式执行以下命令,无视权限。
/money give <QQ号> <金额> - 给予指定用户指定数量的金额
/money take <QQ号> <金额> - 拿走指定用户指定数量的金额
/money set <QQ号> <金额> - 设定指定用户的金额为指定数量
权限
可以基于 Mirai 社区的另一款权限插件 LuckPerms 来实现以下权限的功能。
- economy.user.money - 允许查询自己或别人的余额
- economy.user.money.other - 允许查询别人的余额
- economy.user.pay - 允许向别人转账
- economy.user.moneytop - 允许查询金额排行榜
- economy.admin.give - 允许给予某个用户金额
- economy.admin.take - 允许扣除某个用户的余额
- economy.admin.set - 允许设置某个用户的余额
- economy.admin.* - 允许以上所有管理员类下的命令
配置
这些是可能会用到的一些插件配置。
system: #通用相关
open: true #是否开启此插件
initial-money: 0 #初始用户金额
payment-tax: 0 #转账时需要支付的税
rank: #排行榜
open: true #是否开启此功能
group-size: 10 # 群聊中显示的名次
private-size: 20 #私聊中显示的名次
currency: #货币相关
name: "元" #货币单位
integer: true #是否限制余额为整数
thousands-separtor: "," #千位数金额分割
min-money: LONG_MIN_SIZE #最少的金额
max-money: LONG_MAX_SIZE #最大的金额
开发者
鉴于 Mirai 插件的开发和 Minecraft 服务器插件的开发有些区别,所以我设想了以下几种方案来传递数据。
单例(推荐)
以单例的方式来更新用户或查询用户的金额。
更新用户金额:第三方插件可以直接通过插件提供的单例来修改用户的金额。
查询用户金额:第三方插件可以直接通过插件提供的单例来查询用户的金额。
控制台
以控制台的方式来更新用户或查询用户的金额。
更新用户金额:第三方插件可以直接向控制台发送命令来修改用户的金额。
查询用户金额:鉴于向控制台提交命令是单向的(即无法返回回调数据),所以无法通过控制台查询用户的数据。
(当然可能是我疏忽了,期待打脸)
HTTP(次荐)
构建一个简易的内部 HTTP 服务。
更新用户金额:第三方插件可以向指定链接发送请求来修改用户的金额,并可以返回更为详细的结果。
查询用户金额:第三方插件可以向指定链接发送请求来查询用户的金额,并可以返回更为详细的结果。
自查询
让第三方插件自行访问经济插件的数据库。
更新用户金额:第三方插件自行访问数据库并修改(可能会出现文件锁现象)。
查询用户金额:第三方插件自行访问数据库并查询。
以上三种方式不管使用哪种都建议提供一个更易于开发者调用的包/模块。
当然,如果您有更好的解决方案,欢迎进行一个贴的回复!