Skip to content

Commit 01c81bc

Browse files
committed
Implement ConfigurableChatCommandsExtension.kt
1 parent 2c3bf65 commit 01c81bc

File tree

5 files changed

+64
-17
lines changed

5 files changed

+64
-17
lines changed

src/main/kotlin/io/github/arkosammy12/compsmpdiscordbot/Bot.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import dev.kord.gateway.Intent
44
import dev.kord.gateway.PrivilegedIntent
55
import dev.kordex.core.ExtensibleBot
66
import io.github.arkosammy12.compsmpdiscordbot.extensions.ApprovalExtension
7+
import io.github.arkosammy12.compsmpdiscordbot.extensions.ConfigurableChatCommandsExtension
78
import kotlinx.coroutines.runBlocking
89

910
object Bot {
@@ -12,10 +13,12 @@ object Bot {
1213
return runBlocking {
1314
ExtensibleBot(token) {
1415
chatCommands {
15-
16+
enabled = true
17+
defaultPrefix = "!"
1618
}
1719
extensions {
18-
add { ApprovalExtension("approval_extension") }
20+
add(::ApprovalExtension)
21+
add(::ConfigurableChatCommandsExtension)
1922
}
2023
about {
2124

src/main/kotlin/io/github/arkosammy12/compsmpdiscordbot/CompSMPDiscordBot.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ object CompSMPDiscordBot : DedicatedServerModInitializer {
5252
}
5353

5454
}
55+
ConfigUtils.CHAT_COMMANDS = stringMapSection("chat_commands") {
56+
addDefaultEntry("ping" to "pong")
57+
}
5558

5659
}
5760

src/main/kotlin/io/github/arkosammy12/compsmpdiscordbot/config/ConfigUtils.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@ object ConfigUtils {
1111
lateinit var APPROVAL_ROLE_ID: ElementPath
1212
lateinit var APPROVAL_EMOJI_ID: ElementPath
1313
lateinit var APPROVAL_EMOJI_NAME: ElementPath
14+
15+
lateinit var CHAT_COMMANDS: ElementPath
1416
}

src/main/kotlin/io/github/arkosammy12/compsmpdiscordbot/extensions/ApprovalExtension.kt

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,16 @@ import kotlinx.serialization.json.jsonObject
3434
import kotlinx.serialization.json.jsonPrimitive
3535
import java.util.UUID
3636

37-
class ApprovalExtension(override val name: String) : Extension() {
37+
class ApprovalExtension() : Extension() {
3838

39-
val adminRoleId: Long = CompSMPDiscordBot.CONFIG_MANAGER.getRawNumberSettingValue(ConfigUtils.COMPSMP_ADMIN_ROLE_ID)!!
40-
val applicationChannelId: Long = CompSMPDiscordBot.CONFIG_MANAGER.getRawNumberSettingValue(ConfigUtils.APPLICATION_CHANNEL_ID)!!
41-
val approvalEmojiId: Long = CompSMPDiscordBot.CONFIG_MANAGER.getRawNumberSettingValue(ConfigUtils.APPROVAL_EMOJI_ID)!!
42-
val approvalRoleId: Long = CompSMPDiscordBot.CONFIG_MANAGER.getRawNumberSettingValue(ConfigUtils.APPROVAL_ROLE_ID)!!
43-
val approvalEmojiName: String = CompSMPDiscordBot.CONFIG_MANAGER.getRawStringSettingValue(ConfigUtils.APPROVAL_EMOJI_NAME)!!
39+
override val name = "approval_extension"
40+
41+
42+
val adminRoleId: () -> Long = { CompSMPDiscordBot.CONFIG_MANAGER.getRawNumberSettingValue(ConfigUtils.COMPSMP_ADMIN_ROLE_ID)!! }
43+
val applicationChannelId: () -> Long = { CompSMPDiscordBot.CONFIG_MANAGER.getRawNumberSettingValue(ConfigUtils.APPLICATION_CHANNEL_ID)!! }
44+
val approvalEmojiId: () -> Long = { CompSMPDiscordBot.CONFIG_MANAGER.getRawNumberSettingValue(ConfigUtils.APPROVAL_EMOJI_ID)!! }
45+
val approvalRoleId: () -> Long = { CompSMPDiscordBot.CONFIG_MANAGER.getRawNumberSettingValue(ConfigUtils.APPROVAL_ROLE_ID)!! }
46+
val approvalEmojiName: () -> String = { CompSMPDiscordBot.CONFIG_MANAGER.getRawStringSettingValue(ConfigUtils.APPROVAL_EMOJI_NAME)!! }
4447

4548
override suspend fun setup() {
4649
this.event<ReactionAddEvent> {
@@ -49,7 +52,7 @@ class ApprovalExtension(override val name: String) : Extension() {
4952
return@action
5053
}
5154
val applicant: Member = event.messageAuthor?.asMember(CompSMPDiscordBot.guildSnowFlake) ?: return@action
52-
applicant.addRole(Snowflake(approvalRoleId))
55+
applicant.addRole(Snowflake(approvalRoleId()))
5356
}
5457

5558
}
@@ -60,21 +63,20 @@ class ApprovalExtension(override val name: String) : Extension() {
6063
}
6164
val applicant: Member = event.message.asMessage().author?.asMember(CompSMPDiscordBot.guildSnowFlake) ?: return@action
6265
val applicantRoles: Set<Snowflake> = applicant.roleIds
63-
if (!applicantRoles.any { roleId -> roleId.value.toLong() == approvalRoleId }) {
66+
if (!applicantRoles.any { roleId -> roleId.value.toLong() == approvalRoleId() }) {
6467
return@action
6568
}
66-
val reactionEmoji: ReactionEmoji = ReactionEmoji.Custom(Snowflake(approvalEmojiId), approvalEmojiName, false)
69+
val reactionEmoji: ReactionEmoji = ReactionEmoji.Custom(Snowflake(approvalEmojiId()), approvalEmojiName(), false)
6770
var hasApprovedRoleByOtherAdmin = false
68-
event.message.getReactors(reactionEmoji)
6971
event.message.getReactors(reactionEmoji).filter { user -> user.id != event.user }.collect { user ->
7072
val member: Member = user.asMember(CompSMPDiscordBot.guildSnowFlake)
71-
if (member.roleIds.any {roleId -> roleId.value.toLong() == adminRoleId}) {
73+
if (member.roleIds.any {roleId -> roleId.value.toLong() == adminRoleId() }) {
7274
hasApprovedRoleByOtherAdmin = true
7375
return@collect
7476
}
7577
}
7678
if (!hasApprovedRoleByOtherAdmin) {
77-
applicant.removeRole(Snowflake(approvalRoleId))
79+
applicant.removeRole(Snowflake(approvalRoleId()))
7880
}
7981
}
8082
}
@@ -118,13 +120,13 @@ class ApprovalExtension(override val name: String) : Extension() {
118120
return false
119121
}
120122
val reactor: Member = user.asMember(CompSMPDiscordBot.guildSnowFlake)
121-
if (!reactor.roleIds.any { roleId -> roleId.value.toLong() == adminRoleId }) {
123+
if (!reactor.roleIds.any { roleId -> roleId.value.toLong() == adminRoleId() }) {
122124
return false
123125
}
124-
if (message.channelId.value.toLong() != applicationChannelId) {
126+
if (message.channelId.value.toLong() != applicationChannelId()) {
125127
return false
126128
}
127-
if (eventEmoji.id.value.toLong() != approvalEmojiId) {
129+
if (eventEmoji.id.value.toLong() != approvalEmojiId()) {
128130
return false
129131
}
130132
return true
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package io.github.arkosammy12.compsmpdiscordbot.extensions
2+
3+
import dev.kordex.core.extensions.Extension
4+
import dev.kordex.core.extensions.chatCommand
5+
import dev.kordex.core.i18n.types.Key
6+
import dev.kordex.core.utils.respond
7+
import io.github.arkosammy12.compsmpdiscordbot.CompSMPDiscordBot
8+
import io.github.arkosammy12.compsmpdiscordbot.config.ConfigUtils
9+
import io.github.arkosammy12.monkeyconfig.base.settings
10+
import io.github.arkosammy12.monkeyconfig.managers.getStringMapSection
11+
import io.github.arkosammy12.monkeyconfig.sections.maps.StringMapSection
12+
import java.util.stream.Collectors
13+
14+
class ConfigurableChatCommandsExtension : Extension() {
15+
16+
override val name: String = "configurable_chat_commands_extension"
17+
18+
val configurableCommands: () -> Map<String, String> = {
19+
val mapSection: StringMapSection = CompSMPDiscordBot.CONFIG_MANAGER.getStringMapSection(ConfigUtils.CHAT_COMMANDS)!!
20+
mapSection.settings.stream().collect(Collectors.toMap({ setting -> setting.name }, { setting -> setting.value.raw as String }))
21+
}
22+
23+
override suspend fun setup() {
24+
for ((commandName, commandContent) in configurableCommands()) {
25+
chatCommand {
26+
name = Key(commandName)
27+
description = Key("This is a placeholder description for chat commands.")
28+
action {
29+
message.respond(commandContent)
30+
}
31+
}
32+
33+
}
34+
35+
}
36+
37+
}

0 commit comments

Comments
 (0)