Skip to content

Commit

Permalink
luckperms role sync
Browse files Browse the repository at this point in the history
  • Loading branch information
MeiNanziiii committed Nov 19, 2024
1 parent 568513e commit ebb714d
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 1 deletion.
5 changes: 4 additions & 1 deletion src/main/kotlin/ua/mei/minekord/Minekord.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import ua.mei.minekord.bot.MinekordBot
import ua.mei.minekord.bot.extension.IPCheckExtension
import ua.mei.minekord.bot.extension.MessagesExtension
import ua.mei.minekord.bot.extension.PlayerListExtension
import ua.mei.minekord.bot.extension.RoleSyncExtension
import ua.mei.minekord.cache.IPCache
import ua.mei.minekord.config.MinekordConfig
import ua.mei.minekord.config.MinekordConfig.CONFIG_PATH
Expand Down Expand Up @@ -43,8 +44,10 @@ object Minekord : ModInitializer {

MinekordConfig.load()

MinekordBot.registerExtension(::MessagesExtension)
MinekordBot.registerExtension(::IPCheckExtension)
MinekordBot.registerExtension(::MessagesExtension)
MinekordBot.registerExtension(::RoleSyncExtension)

if (Commands.PlayerList.enabled) {
MinekordBot.registerExtension(::PlayerListExtension)
}
Expand Down
43 changes: 43 additions & 0 deletions src/main/kotlin/ua/mei/minekord/bot/extension/RoleSyncExtension.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package ua.mei.minekord.bot.extension

import dev.kord.core.entity.Member
import net.fabricmc.loader.api.FabricLoader
import net.luckperms.api.LuckPerms
import net.luckperms.api.LuckPermsProvider
import net.luckperms.api.node.types.InheritanceNode
import net.minecraft.server.network.ServerPlayerEntity
import ua.mei.minekord.bot.MinekordExtension
import ua.mei.minekord.config.MinekordConfig
import ua.mei.minekord.utils.AuthUtils

class RoleSyncExtension : MinekordExtension() {
override val name: String = "minekord.rolesync"

override suspend fun setup() {

}

override suspend fun onPlayerJoin(player: ServerPlayerEntity) {
if (FabricLoader.getInstance().isModLoaded("luckperms") && !MinekordConfig.LuckPerms.roles.isEmpty()) {
val lp: LuckPerms = LuckPermsProvider.get()

lp.userManager.loadUser(player.gameProfile.id).thenAcceptAsync { user ->
val member: Member = AuthUtils.findMember(player.gameProfile.name) ?: return@thenAcceptAsync
val roles: List<ULong> = member.roleIds.map { it.value }

user.data().toCollection()
.filterIsInstance<InheritanceNode>()
.filter { groupNode -> groupNode.groupName != "default" && MinekordConfig.LuckPerms.roles[groupNode.groupName] !in roles }
.forEach { user.data().remove(it) }

MinekordConfig.LuckPerms.roles.forEach { entry ->
if (entry.value in roles) {
user.data().add(InheritanceNode.builder(entry.key).build())
}
}

lp.userManager.saveUser(user)
}
}
}
}
12 changes: 12 additions & 0 deletions src/main/kotlin/ua/mei/minekord/config/MinekordConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import ua.mei.minekord.config.spec.AuthSpec
import ua.mei.minekord.config.spec.ChatSpec
import ua.mei.minekord.config.spec.ColorsSpec
import ua.mei.minekord.config.spec.CommandsSpec
import ua.mei.minekord.config.spec.LuckPermsSpec
import ua.mei.minekord.config.spec.MainSpec
import ua.mei.minekord.config.spec.MessagesSpec
import ua.mei.minekord.config.spec.PresenceSpec
Expand All @@ -43,6 +44,7 @@ object MinekordConfig {
addSpec(CommandsSpec)
addSpec(ColorsSpec)
addSpec(AuthSpec)
addSpec(LuckPermsSpec)
addSpec(MessagesSpec)
}.from.toml.file(FabricLoader.getInstance().configDir.resolve(CONFIG_PATH).toFile())

Expand All @@ -54,6 +56,7 @@ object MinekordConfig {
Commands.load()
Colors.load()
Auth.load()
LuckPerms.load()
Messages.load()
}

Expand Down Expand Up @@ -247,6 +250,15 @@ object MinekordConfig {
}
}

object LuckPerms {
lateinit var roles: Map<String, ULong>
private set

fun load() {
roles = config[LuckPermsSpec.roles]
}
}

object Messages {
lateinit var ipKickMessage: String
private set
Expand Down
7 changes: 7 additions & 0 deletions src/main/kotlin/ua/mei/minekord/config/spec/LuckPermsSpec.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ua.mei.minekord.config.spec

import com.uchuhimo.konf.ConfigSpec

object LuckPermsSpec : ConfigSpec() {
val roles by required<Map<String, ULong>>()
}
4 changes: 4 additions & 0 deletions src/main/resources/minekord.toml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,10 @@ snowflakeBasedUuid = false
requiredRoles = []
ipBasedLogin = false

[LuckPerms]

roles = {}

[Messages]

ipKickMessage = "Joined with new IP! Check your DM."
Expand Down

0 comments on commit ebb714d

Please sign in to comment.