Skip to content

Commit b797713

Browse files
committed
Add platform listener impl (pre)
1 parent 5b74ac2 commit b797713

File tree

9 files changed

+172
-10
lines changed

9 files changed

+172
-10
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package me.regadpole.plumbot
2+
3+
abstract class PlatformImpl {
4+
abstract fun getPlayerList() : List<String>
5+
}

common/src/main/kotlin/me/regadpole/plumbot/PlumBot.kt

+8
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ object PlumBot : Plugin() {
2626

2727
private lateinit var database: Database
2828

29+
var playerList = mutableListOf<String>()
30+
2931
override fun onLoad() {
3032
ConfigResolver.loadConfig()
3133
config = ConfigResolver.getConfigLoader()
@@ -63,13 +65,19 @@ object PlumBot : Plugin() {
6365
}
6466
}
6567
info("成功启用机器人服务!")
68+
config.getConfig().groups.enableGroups.forEach {
69+
bot.sendGroupMsg(it, lang.getLangConf().onEnable ?: return@forEach)
70+
}
6671
}
6772

6873
override fun onDisable() {
6974
bot.shutdown()
7075
info("成功关闭机器人服务")
7176
database.close()
7277
info("成功关闭数据库链接!")
78+
config.getConfig().groups.enableGroups.forEach {
79+
bot.sendGroupMsg(it, lang.getLangConf().onDisable ?: return@forEach)
80+
}
7381
}
7482

7583
fun reloadConfig() {

common/src/main/kotlin/me/regadpole/plumbot/config/LangConfig.kt

+4
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ class LangConfig(langConfig: Configuration) {
2828
val addBind = config.getString("whitelist.user.addBind")
2929
val removeBind = config.getString("whitelist.user.removeBind")
3030
val queryBind = config.getString("whitelist.user.queryBind")
31+
val fullBind = config.getString("whitelist.user.fullBind")
32+
val existsBind = config.getString("whitelist.user.existsBind")
33+
val notExistsBind = config.getString("whitelist.user.nonExistsBind")
34+
val notBelongToYou = config.getString("whitelist.user.notBelongToYou")
3135
}
3236
class Admin(config: Configuration) {
3337
val addBind = config.getString("whitelist.admin.addBind")

common/src/main/kotlin/me/regadpole/plumbot/internal/WhitelistHelper.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package me.regadpole.plumbot.internal
33
import me.regadpole.plumbot.PlumBot
44

55

6-
class WhitelistHelper {
6+
object WhitelistHelper {
77
fun checkCount(user: String): Boolean {
88
val idList = PlumBot.getDatabase().getBind(user).values
99
val maxCount: Int = PlumBot.getConfig().getConfig().groups.forwarding.whitelist.maxCount
@@ -15,6 +15,10 @@ class WhitelistHelper {
1515
return PlumBot.getDatabase().getBindByName(name).isNullOrEmpty()
1616
}
1717

18+
fun checkIDBelong(user: String, name: String): Boolean {
19+
return PlumBot.getDatabase().getBindByName(name) == user
20+
}
21+
1822
fun addAndGet(user: String, name: String): MutableMap<Int, String> {
1923
PlumBot.getDatabase().addBind(user, name)
2024
return PlumBot.getDatabase().getBind(user)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
package me.regadpole.plumbot.listener
2+
3+
import me.regadpole.plumbot.PlumBot
4+
import me.regadpole.plumbot.internal.WhitelistHelper
5+
import taboolib.common5.util.replace
6+
7+
object GPlatformListener {
8+
fun onGroupMessage(message: String, groupId: String, senderId: String, senderName: String) {
9+
if (!PlumBot.getConfig().getConfig().groups.enableGroups.contains(groupId)) return
10+
if (message.startsWith(PlumBot.getConfig().getConfig().groups.prefix ?: "/")) {
11+
if (PlumBot.getConfig().getConfig().groups.forwarding.sdc) {
12+
PlumBot.getConfig().getCommands().adminCommand.forEach {
13+
if (it.key == message.substring(1) && PlumBot.getConfig().getConfig().groups.botAdmins.
14+
contains(senderId)) {
15+
// TODO: 执行配置文件内游戏命令并返回
16+
}
17+
}
18+
PlumBot.getConfig().getCommands().userCommand.forEach {
19+
if (it.key == message.substring(1)) {
20+
// TODO: 执行配置文件内游戏命令并返回
21+
}
22+
}
23+
}
24+
if (message.substring(1) == "help" || message.substring(1) == "帮助") {
25+
26+
}
27+
if (PlumBot.getConfig().getConfig().groups.forwarding.tps && message.substring(1) == "tps") {
28+
// TODO: 获取服务器 TPS 并返回
29+
}
30+
if (PlumBot.getConfig().getConfig().groups.forwarding.online && message.substring(1) == "在线人数") {
31+
// TODO: 看看这样写有没有问题((
32+
PlumBot.getBot().sendGroupMsg(groupId, "在线玩家: ${PlumBot.playerList.joinToString(", ")}")
33+
}
34+
if (PlumBot.getConfig().getConfig().groups.botAdmins.contains(groupId) && message.substring(1) == "cmd") {
35+
// TODO: 执行message内游戏命令并返回
36+
}
37+
if (PlumBot.getConfig().getConfig().groups.forwarding.whitelist.enable && message.substring(1) == "申请白名单" &&
38+
message.split(" ").size == 2) {
39+
val player = message.substring(6)
40+
if (!WhitelistHelper.checkCount(senderId)) {
41+
PlumBot.getBot().sendGroupMsg(
42+
groupId, PlumBot.getLangConfig().getLangConf().whitelist.user.fullBind!!
43+
.replace("%player_name%", player)
44+
.replace("%whitelist_name%", PlumBot.getDatabase().getBind(senderId).values.joinToString(", "))
45+
.replace("%platform_id%", senderId)
46+
.replace("%max_limit%", PlumBot.getConfig().getConfig().groups.forwarding.whitelist.maxCount.toString()))
47+
}
48+
if (!WhitelistHelper.checkIDNotExist(player)) {
49+
PlumBot.getBot().sendGroupMsg(
50+
groupId, PlumBot.getLangConfig().getLangConf().whitelist.user.existsBind!!
51+
.replace("%player_name%", player))
52+
}
53+
WhitelistHelper.addAndGet(senderId, player)
54+
PlumBot.getBot().sendGroupMsg(
55+
groupId, PlumBot.getLangConfig().getLangConf().whitelist.user.addBind!!
56+
.replace("%player_name%", player)
57+
.replace("%whitelist_name%", PlumBot.getDatabase().getBind(senderId).values.joinToString(", "))
58+
.replace("%platform_id%", senderId))
59+
}
60+
if (PlumBot.getConfig().getConfig().groups.forwarding.whitelist.enable && message.substring(1) == "移除白名单" &&
61+
message.split(" ").size == 2) {
62+
val player = message.substring(6)
63+
if (WhitelistHelper.checkIDNotExist(player)) {
64+
PlumBot.getBot().sendGroupMsg(
65+
groupId, PlumBot.getLangConfig().getLangConf().whitelist.user.notExistsBind!!
66+
.replace("%player_name%", player))
67+
}
68+
if (!WhitelistHelper.checkIDBelong(senderId, player)) {
69+
PlumBot.getBot().sendGroupMsg(
70+
groupId, PlumBot.getLangConfig().getLangConf().whitelist.user.notBelongToYou!!
71+
.replace("%player_name%", player))
72+
}
73+
PlumBot.getDatabase().removeBindByName(player)
74+
PlumBot.getBot().sendGroupMsg(
75+
groupId, PlumBot.getLangConfig().getLangConf().whitelist.user.addBind!!
76+
.replace("%player_name%", player)
77+
.replace("%whitelist_name%", PlumBot.getDatabase().getBind(senderId).values.joinToString(", "))
78+
.replace("%platform_id%", senderId))
79+
}
80+
if (PlumBot.getConfig().getConfig().groups.forwarding.whitelist.enable && message.substring(1) == "查询白名单") {
81+
PlumBot.getBot().sendGroupMsg(
82+
groupId, PlumBot.getLangConfig().getLangConf().whitelist.user.queryBind!!
83+
.replace("%whitelist_name%", PlumBot.getDatabase().getBind(senderId).values.joinToString(", ")))
84+
}
85+
}
86+
if (PlumBot.getConfig().getConfig().groups.forwarding.sdr) {
87+
PlumBot.getConfig().getReturns().adminReturn.forEach {
88+
if (it.key == message && PlumBot.getConfig().getConfig().groups.botAdmins.contains(senderId)) {
89+
PlumBot.getBot().sendGroupMsg(groupId, it.value)
90+
}
91+
}
92+
PlumBot.getConfig().getReturns().userReturn.forEach {
93+
if (it.key == message) {
94+
PlumBot.getBot().sendGroupMsg(groupId, it.value)
95+
}
96+
}
97+
}
98+
if (PlumBot.getConfig().getConfig().groups.forwarding.message.mode == 0) {
99+
PlumBot.getBot().sendGroupMsg(
100+
groupId, PlumBot.getLangConfig().getLangConf().forwarding.toServer!!
101+
.replace("%group_name%", PlumBot.getBot().getGroupName(groupId)?: groupId)
102+
.replace("%message%", message)
103+
.replace("%platform_name%", senderName))
104+
} else if (PlumBot.getConfig().getConfig().groups.forwarding.message.mode == 1 &&
105+
message.startsWith(PlumBot.getConfig().getConfig().groups.forwarding.message.prefix!!)) {
106+
PlumBot.getBot().sendGroupMsg(
107+
groupId, PlumBot.getLangConfig().getLangConf().forwarding.toServer!!
108+
.replace("%group_name%", PlumBot.getBot().getGroupName(groupId)?: groupId)
109+
.replace("%message%", message.replace(PlumBot.getConfig().getConfig().groups.forwarding.message.prefix!!, ""))
110+
.replace("%platform_name%", senderName))
111+
}
112+
}
113+
}

common/src/main/kotlin/me/regadpole/plumbot/listener/game/GameListener.kt

+7
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import me.regadpole.plumbot.event.GDeathEvent
55
import me.regadpole.plumbot.event.GJoinEvent
66
import me.regadpole.plumbot.event.GPlayerChatEvent
77
import me.regadpole.plumbot.event.GQuitEvent
8+
import taboolib.common5.util.replace
89

910
object GameListener {
1011
fun onChat(event: GPlayerChatEvent) {
@@ -16,6 +17,7 @@ object GameListener {
1617
var message: String = PlumBot.getLangConfig().getLangConf().forwarding.toPlatform?: return
1718
message = message.replace("%server_name%", event.player.server)
1819
.replace("%world_name%", event.player.position.world)
20+
.replace("%player_name%", event.player.name)
1921
.replace("%message%", event.message)
2022
PlumBot.getConfig().getConfig().groups.enableGroups.forEach {
2123
PlumBot.getBot().sendGroupMsg(it, message)
@@ -36,6 +38,10 @@ object GameListener {
3638
}
3739

3840
fun onJoin(event: GJoinEvent) {
41+
PlumBot.playerList.add(event.player.name)
42+
if (!PlumBot.getConfig().getConfig().groups.forwarding.whitelist.enable) {
43+
return
44+
}
3945
if (PlumBot.getDatabase().getBindByName(event.player.name) == null) {
4046
var message: String = PlumBot.getLangConfig().getLangConf().whitelist.kickServer?: return
4147
message = message.replace("%enable_groups%", PlumBot.getConfig().getConfig().groups.enableGroups.joinToString("/"))
@@ -57,6 +63,7 @@ object GameListener {
5763
}
5864

5965
fun onQuit(event: GQuitEvent) {
66+
PlumBot.playerList.remove(event.player.name)
6067
if (PlumBot.getConfig().getConfig().groups.forwarding.joinAndLeave) {
6168
var message: String = PlumBot.getLangConfig().getLangConf().playerLeaveMsg?: return
6269
message = message.replace("%player_name%", event.player.name)
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package me.regadpole.plumbot.listener.kook
22

3+
import me.regadpole.plumbot.listener.GPlatformListener
34
import snw.jkook.event.EventHandler
45
import snw.jkook.event.Listener
56
import snw.jkook.event.channel.ChannelMessageEvent
@@ -8,17 +9,18 @@ import snw.jkook.event.user.UserLeaveGuildEvent
89

910
class KookListener : Listener {
1011
@EventHandler
11-
fun onChannelMessage(e: ChannelMessageEvent) {
12-
12+
fun onChannelMessage(event: ChannelMessageEvent) {
13+
GPlatformListener.onGroupMessage(event.message.component.toString(),
14+
event.channel.id, event.message.sender.id, event.message.sender.name)
1315
}
1416

1517
@EventHandler
16-
fun onPrivateMessage(e: PrivateMessageReceivedEvent) {
18+
fun onPrivateMessage(event: PrivateMessageReceivedEvent) {
1719

1820
}
1921

2022
@EventHandler
21-
fun onPrivateMessage(e: UserLeaveGuildEvent) {
23+
fun onPrivateMessage(event: UserLeaveGuildEvent) {
2224

2325
}
2426
}

common/src/main/kotlin/me/regadpole/plumbot/listener/qq/QQListener.kt

+2
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ import cn.evole.onebot.client.interfaces.Listener
55
import cn.evole.onebot.sdk.event.message.GroupMessageEvent
66
import cn.evole.onebot.sdk.event.message.PrivateMessageEvent
77
import cn.evole.onebot.sdk.event.notice.group.GroupDecreaseNoticeEvent
8+
import me.regadpole.plumbot.listener.GPlatformListener
89

910

1011
class QQListener: Listener {
1112
@SubscribeEvent
1213
fun onGroupMessage(event: GroupMessageEvent) {
14+
GPlatformListener.onGroupMessage(event.message, event.groupId.toString(), event.sender.userId, event.sender.nickname)
1315
}
1416

1517
@SubscribeEvent

common/src/main/resources/lang/zh_CN.yml

+22-5
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ onDisable: "PlumBot已关闭"
1212

1313
# 消息转发
1414
forwarding:
15-
# 可选占位符:%server_name%, %world_name%, %message%
16-
toPlatform: "[服务器]%message%"
17-
# 可选占位符:%group_name%, %message%
18-
toServer: "[%group_name%]%message%"
15+
# 可选占位符:%server_name%, %player_name%, %world_name%, %message%
16+
toPlatform: "[服务器] %player_name%: %message%"
17+
# 可选占位符:%group_name%, %platform_name%, %message%
18+
toServer: "[%group_name%] %qq_id%: %message%"
1919

2020
# 可选占位符:%player_name%, %server_name%
2121
playerJoinMsg: "%player_name%进入服务器"
@@ -32,6 +32,12 @@ whitelist:
3232
removeBind: "成功删除白名单,您目前的白名单为%whitelist_name%"
3333
# 可选占位符:%whitelist_name%, %platform_id%
3434
queryBind: "您目前的白名单为%whitelist_name%"
35+
# 可选占位符:%player_name%, %whitelist_name%, %platform_id%, %whitelist_limit%
36+
fullBind: "你能申请的白名单数额已满: %whitelist_limit%"
37+
# 可选占位符:%player_name%
38+
existsBind: "%player_name% 已被他人绑定!"
39+
notExistsBind: "%player_name% 暂未被人绑定过!"
40+
notBelongToYou: "%player_name% 不是由你绑定的!"
3541
admin:
3642
# 可选占位符:%player_name%, %whitelist_name%, %target_platform_id%, %sender_platform_id%
3743
addBind: "成功申请白名单,%target_platform_id%目前的白名单为%whitelist_name%"
@@ -43,4 +49,15 @@ whitelist:
4349
commandSendFinish: "已发送指令到服务器"
4450

4551
# 可选占位符:%player_name%, %world_name%, %pos%
46-
messageOnDie: "玩家%player_name%在%world_name%的%pos%死亡"
52+
messageOnDie: "玩家%player_name%在%world_name%的%pos%死亡"
53+
54+
# 可选占位符: %prefix%
55+
help:
56+
- "PlumBot 帮助"
57+
- "%prefix%在线人数 - 查看在线人数"
58+
- "%prefix%tps - 查看服务器TPS"
59+
- "%prefix%申请白名单 <游戏名> - 申请白名单"
60+
- "%prefix%移除白名单 <游戏名> - 移除白名单"
61+
- "%prefix%查询白名单 - 查询自己申请的所有白名单"
62+
- "管理员命令"
63+
- "%prefix%cmd <命令> - 向服务器发送命令并获取返回值"

0 commit comments

Comments
 (0)