Skip to content

Commit 95a7c55

Browse files
committed
✨(wayzer/user/ban) 自动封禁ip
1 parent 57cbdec commit 95a7c55

2 files changed

Lines changed: 20 additions & 5 deletions

File tree

scripts/wayzer/lib/PlayerData.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class PlayerData(val name: String, val uuid: String, val ids: Set<String> = muta
2121
val shortId: String get() = IGetUidByShortId.getOrNull()?.getShortId(this) ?: id
2222

2323
override fun toString(): String {
24-
return "PlayerData(id='$id', name='$name', authed=$authed)"
24+
return "PlayerData(id='$id', name='$name', authed=$authed, \nids=$ids)"
2525
}
2626

2727

@@ -45,8 +45,10 @@ class PlayerData(val name: String, val uuid: String, val ids: Set<String> = muta
4545

4646
operator fun get(player: Player): PlayerData = online.getOrPut(player) {
4747
if (player.con == null) error("player is not online")
48-
(preOnline.remove(player.usid()) ?: PlayerData(player.plainName(), player.uuid()))
49-
.also { it.player = player }
48+
(preOnline.remove(player.usid()) ?: PlayerData(player.plainName(), player.uuid())).also {
49+
it.addId("ip:${player.con.address}", asPrimary = false)
50+
it.player = player
51+
}
5052
}
5153

5254
fun onLeave(player: Player) {

scripts/wayzer/user/ban.kts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,20 @@ fun Player.kick(ban: PlayerBan) {
5252

5353
listen<EventType.PlayerConnect> {
5454
launch(Dispatchers.IO) {
55-
val ban = store.findNotEnd(PlayerData[it.player].id) ?: return@launch
55+
val ban = findBan(PlayerData[it.player]) ?: return@launch
5656
withContext(Dispatchers.game) {
5757
it.player.kick(ban)
5858
}
5959
}
6060
}
6161

62+
suspend fun findBan(player: PlayerData): PlayerBan? = withContext(Dispatchers.IO) {
63+
player.ids.firstNotNullOfOrNull { id ->
64+
if (id == player.uuid && player.authed) return@firstNotNullOfOrNull null //skip uuid if authed
65+
store.findNotEnd(id)
66+
}
67+
}
68+
6269
suspend fun ban(player: PlayerData, time: Int, reason: String, operate: Player?) {
6370
val ban = withContext(Dispatchers.IO) {
6471
store.create(
@@ -67,7 +74,13 @@ suspend fun ban(player: PlayerData, time: Int, reason: String, operate: Player?)
6774
operate?.let { PlayerData[it].id }
6875
)
6976
}
70-
Groups.player.filter { PlayerData[it].id in player.ids }.forEach {
77+
Groups.player.filter {
78+
val info = PlayerData[it]
79+
info.ids.any { id ->
80+
if (id == info.uuid && info.authed) return@any false //skip uuid if authed
81+
id in player.ids
82+
}
83+
}.forEach {
7184
it.kick(ban)
7285
broadcast("[red] 管理员禁封了{target.name},原因: [yellow]{reason}".with("target" to it, "reason" to reason))
7386
}

0 commit comments

Comments
 (0)