Skip to content

Commit

Permalink
feat: disable KotlinEvaluate be default
Browse files Browse the repository at this point in the history
feat: allow to disable jda and related beans
  • Loading branch information
itsmefox committed Jun 7, 2022
1 parent 41e3706 commit f35f954
Show file tree
Hide file tree
Showing 40 changed files with 156 additions and 69 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<p align="center">
<a href="https://github.com/viascom/aluna-spring-boot-starter/releases"><img src="https://img.shields.io/github/v/release/viascom/aluna-spring-boot-starter?include_prereleases&label=version"
alt="Maven central"></a>
<a href=""><img src="https://img.shields.io/badge/JDA--Version-5.0.0--alpha.11-blue.svg"
<a href=""><img src="https://img.shields.io/badge/JDA--Version-5.0.0--alpha.12-blue.svg"
alt="JDA-Version "></a>
<a href="http://www.apache.org/licenses/"><img src="https://img.shields.io/badge/license-Apache_2.0-blue.svg"
alt="license Apache 2.0"></a>
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ plugins {
}

group "io.viascom.discord.bot"
version "0.0.20_5.0.0-alpha.12"
version "0.0.21_5.0.0-alpha.12"

sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.viascom.discord.bot.aluna

import io.viascom.discord.bot.aluna.bot.DiscordBot
import io.viascom.discord.bot.aluna.bot.command.systemcommand.SystemCommandDataProvider
import io.viascom.discord.bot.aluna.bot.handler.*
import io.viascom.discord.bot.aluna.bot.listener.*
import io.viascom.discord.bot.aluna.bot.shardmanager.DefaultShardManagerBuilder
Expand All @@ -11,6 +10,8 @@ import io.viascom.discord.bot.aluna.translation.MessageService
import net.dv8tion.jda.api.sharding.ShardManager
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.boot.context.event.ApplicationStartedEvent
Expand All @@ -26,16 +27,17 @@ import org.springframework.core.env.Environment
@Configuration
@EnableConfigurationProperties(AlunaProperties::class)
@ComponentScan(basePackages = ["io.viascom.discord.bot.aluna.*"])
open class AlunaAutoConfiguration(
private val discordBot: DiscordBot
) {
open class AlunaAutoConfiguration {

@Autowired(required = false)
lateinit var discordBot: DiscordBot

//Has to be AlunaAutoConfiguration::class.java as otherwise it is shown as SpringProxy!
private val logger: Logger = LoggerFactory.getLogger(AlunaAutoConfiguration::class.java)

@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(name = ["enable-jda"], prefix = "aluna", matchIfMissing = true)
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true)
open fun defaultShardManagerBuilder(
shardReadyEvent: ShardReadyEvent,
slashCommandInteractionEventListener: SlashCommandInteractionEventListener,
Expand All @@ -47,55 +49,60 @@ open class AlunaAutoConfiguration(
logger.debug("Enable DefaultShardManagerBuilder")

discordBot.shardManager = discordBot.shardManager ?: DefaultShardManagerBuilder(
shardReadyEvent,
slashCommandInteractionEventListener,
genericAutoCompleteListener,
eventWaiter,
genericEventPublisher,
alunaProperties
shardReadyEvent,
slashCommandInteractionEventListener,
genericAutoCompleteListener,
eventWaiter,
genericEventPublisher,
alunaProperties
).build()

return discordBot.shardManager!!
}

@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true)
open fun defaultDiscordCommandConditions(): DiscordCommandConditions {
logger.debug("Enable DefaultDiscordCommandConditions")
return DefaultDiscordCommandConditions()
}

@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true)
open fun discordCommandLoadAdditionalData(): DiscordCommandLoadAdditionalData {
logger.debug("Enable DefaultDiscordCommandLoadAdditionalData")
return DefaultDiscordCommandLoadAdditionalData()
}

@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true)
open fun discordCommandMetaDataHandler(): DiscordCommandMetaDataHandler {
logger.debug("Enable DefaultDiscordCommandMetaDataHandler")
return DefaultDiscordCommandMetaDataHandler()
}

@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true)
open fun ownerIdProvider(alunaProperties: AlunaProperties): OwnerIdProvider {
logger.debug("Enable DefaultOwnerIdProvider")
return DefaultOwnerIdProvider(alunaProperties)
}

@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true)
open fun moderatorIdProvider(alunaProperties: AlunaProperties): ModeratorIdProvider {
logger.debug("Enable DefaultModeratorIdProvider")
return DefaultModeratorIdProvider(alunaProperties)
}

@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(name = ["enable-translation"], prefix = "aluna", matchIfMissing = false)
@ConditionalOnExpression("\${aluna.discord.enable-jda:true} && \${aluna.enable-translation:false}")
open fun defaultMessageService(
alunaProperties: AlunaProperties,
reloadableMessageSource: ReloadableResourceBundleMessageSource,
Expand All @@ -107,7 +114,7 @@ open class AlunaAutoConfiguration(

@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(name = ["enable-translation"], prefix = "aluna", matchIfMissing = false)
@ConditionalOnExpression("\${aluna.discord.enable-jda:true} && \${aluna.enable-translation:false}")
open fun messageSource(environment: Environment): MessageSource {
val translationPath = environment.getProperty("aluna.translation-path") ?: "classpath:i18n/messages"
val messageSource = ReloadableResourceBundleMessageSource()
Expand All @@ -128,30 +135,7 @@ open class AlunaAutoConfiguration(


@EventListener
open fun printSystemCommandFeatureOverview(event: ApplicationStartedEvent) {
val systemCommand = event.applicationContext.environment.getProperty("aluna.command.system-command.enable", Boolean::class.java) ?: false
//Print enabled /system-command features
if (systemCommand) {
val allFunctions = event.applicationContext.getBeansOfType(SystemCommandDataProvider::class.java)
val enabledFunctionsDefinition = event.applicationContext.environment.getProperty("aluna.command.system-command.enabled-functions", ArrayList::class.java)
?: arrayListOf<String>()

val enabledFunctions = allFunctions.values.filter { it.id in enabledFunctionsDefinition || enabledFunctionsDefinition.isEmpty() }

if (enabledFunctions.size == allFunctions.size) {
logger.debug("Enabled /system-command functions: [" + allFunctions.values.joinToString(", ") { it.id } + "]")
} else {
logger.debug("Enabled /system-command functions: [" + enabledFunctions.joinToString(", ") { it.id } + "]")
logger.debug("Disabled /system-command functions: [" + allFunctions.values.filter { it.id !in enabledFunctionsDefinition }
.joinToString(", ") { it.id } + "]")
}

val allowedModFunctionsDefinition = event.applicationContext.environment.getProperty("aluna.command.system-command.allowed-for-moderators-functions", ArrayList::class.java)
?: arrayListOf<String>()

val allowedModFunctions = allFunctions.filter { it.value.id in allowedModFunctionsDefinition || allowedModFunctionsDefinition.isEmpty() }.filter { it.value.allowMods }

logger.debug("Allowed for moderators /system-command functions: [" + allowedModFunctions.values.joinToString(", ") { it.id } + "]")
}
open fun printVersion(event: ApplicationStartedEvent) {
logger.info("Running with Aluna 0.0.21_5.0.0-alpha.12, JDA 5.0.0-alpha.12")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import net.dv8tion.jda.api.interactions.InteractionHook
import net.dv8tion.jda.api.sharding.ShardManager
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.context.ConfigurableApplicationContext
import org.springframework.stereotype.Service
import java.time.Duration
Expand All @@ -17,6 +18,7 @@ import java.util.*
import java.util.concurrent.TimeUnit

@Service
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true, havingValue = "true")
open class DiscordBot(
private val context: ConfigurableApplicationContext,
private val alunaProperties: AlunaProperties
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ import io.viascom.discord.bot.aluna.property.ModeratorIdProvider
import io.viascom.discord.bot.aluna.property.OwnerIdProvider
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression
import org.springframework.boot.context.event.ApplicationStartedEvent
import org.springframework.context.ApplicationListener
import org.springframework.stereotype.Service

@Service
@ConditionalOnProperty(name = ["enable-debug-configuration-log"], prefix = "aluna", matchIfMissing = true)
@ConditionalOnExpression("\${aluna.discord.enable-jda:true} && \${aluna.enable-debug-configuration-log:true}")
class InviteGenerator(
private val alunaProperties: AlunaProperties,
private val ownerIdProvider: OwnerIdProvider,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ import net.dv8tion.jda.api.hooks.ListenerAdapter
import net.dv8tion.jda.api.sharding.ShardManager
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.boot.context.event.ApplicationStartedEvent
import org.springframework.context.ApplicationListener
import org.springframework.stereotype.Service

@Service
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true, havingValue = "true")
class ListenerRegistration(private val listeners: List<ListenerAdapter>, private val shardManager: ShardManager) :
ApplicationListener<ApplicationStartedEvent> {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package io.viascom.discord.bot.aluna.bot

import io.viascom.discord.bot.aluna.bot.command.systemcommand.SystemCommandDataProvider
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.boot.context.event.ApplicationStartedEvent
import org.springframework.context.ApplicationListener
import org.springframework.stereotype.Service

@Service
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true)
class SystemCommandFeatureOverviewPrinter : ApplicationListener<ApplicationStartedEvent> {

private val logger: Logger = LoggerFactory.getLogger(javaClass)

override fun onApplicationEvent(event: ApplicationStartedEvent) {
val systemCommand = event.applicationContext.environment.getProperty("aluna.command.system-command.enable", Boolean::class.java) ?: false
//Print enabled /system-command features
if (systemCommand) {
val allFunctions = event.applicationContext.getBeansOfType(SystemCommandDataProvider::class.java)
val enabledFunctionsDefinition =
event.applicationContext.environment.getProperty("aluna.command.system-command.enabled-functions", ArrayList::class.java)
?: arrayListOf<String>()

val enabledFunctions = allFunctions.values.filter { it.id in enabledFunctionsDefinition || enabledFunctionsDefinition.isEmpty() }

if (enabledFunctions.size == allFunctions.size) {
logger.debug("Enabled /system-command functions: [" + allFunctions.values.joinToString(", ") { it.id } + "]")
} else {
logger.debug("Enabled /system-command functions: [" + enabledFunctions.joinToString(", ") { it.id } + "]")
logger.debug("Disabled /system-command functions: [" + allFunctions.values.filter { it.id !in enabledFunctionsDefinition }
.joinToString(", ") { it.id } + "]")
}

val allowedModFunctionsDefinition =
event.applicationContext.environment.getProperty("aluna.command.system-command.allowed-for-moderators-functions", ArrayList::class.java)
?: arrayListOf<String>()

val allowedModFunctions =
allFunctions.filter { it.value.id in allowedModFunctionsDefinition || allowedModFunctionsDefinition.isEmpty() }.filter { it.value.allowMods }

logger.debug("Allowed for moderators /system-command functions: [" + allowedModFunctions.values.joinToString(", ") { it.id } + "]")
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@ import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEve
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent
import net.dv8tion.jda.api.events.interaction.component.SelectMenuInteractionEvent
import net.dv8tion.jda.api.interactions.commands.OptionType
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty

@Command
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true, havingValue = "true")
class SystemCommand(
private val dataProviders: List<SystemCommandDataProvider>,
private val ownerIdProvider: OwnerIdProvider,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,11 @@ import net.dv8tion.jda.api.interactions.components.ActionRow
import net.dv8tion.jda.api.interactions.components.selections.SelectMenu
import net.dv8tion.jda.api.interactions.components.selections.SelectOption
import net.dv8tion.jda.api.sharding.ShardManager
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import java.awt.Color

@Command
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true, havingValue = "true")
class AdminSearchDataProvider(
private val shardManager: ShardManager,
private val adminSearchPageDataProviders: List<AdminSearchPageDataProvider>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@ import io.viascom.discord.bot.aluna.util.getServerMessage
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent
import net.dv8tion.jda.api.interactions.InteractionHook
import net.dv8tion.jda.api.sharding.ShardManager
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty

@Command
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true, havingValue = "true")
class ExtractMessageProvider(
private val shardManager: ShardManager,
private val gson: Gson
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,11 @@ import net.dv8tion.jda.api.interactions.components.ActionRow
import net.dv8tion.jda.api.interactions.components.Modal
import net.dv8tion.jda.api.interactions.components.text.TextInput
import net.dv8tion.jda.api.interactions.components.text.TextInputStyle
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression
import kotlin.math.min

@Command
@ConditionalOnExpression("\${aluna.discord.enable-jda:true} && \${aluna.command.system-command.enable-kotlin-script-evaluate:false}")
class KotlinEvaluateProvider(
private val kotlinScriptService: KotlinScriptService
) : SystemCommandDataProvider(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,12 @@ import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent
import net.dv8tion.jda.api.interactions.InteractionHook
import net.dv8tion.jda.api.interactions.components.ActionRow
import net.dv8tion.jda.api.sharding.ShardManager
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import java.awt.Color
import java.time.Duration

@Command
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true, havingValue = "true")
class LeaveServerProvider(
private val shardManager: ShardManager
) : SystemCommandDataProvider(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,11 @@ import net.dv8tion.jda.api.interactions.components.Modal
import net.dv8tion.jda.api.interactions.components.text.TextInput
import net.dv8tion.jda.api.interactions.components.text.TextInputStyle
import net.dv8tion.jda.api.sharding.ShardManager
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import java.util.stream.Collectors

@Command
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true, havingValue = "true")
class PurgeMessagesProvider(
private val shardManager: ShardManager
) : SystemCommandDataProvider(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@ import net.dv8tion.jda.api.interactions.components.Modal
import net.dv8tion.jda.api.interactions.components.text.TextInput
import net.dv8tion.jda.api.interactions.components.text.TextInputStyle
import net.dv8tion.jda.api.sharding.ShardManager
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty

@Command
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true, havingValue = "true")
class SendMessageProvider(
private val shardManager: ShardManager,
private val gson: Gson
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@ import net.dv8tion.jda.api.Permission
import net.dv8tion.jda.api.entities.*
import net.dv8tion.jda.api.requests.GatewayIntent
import net.dv8tion.jda.api.sharding.ShardManager
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.stereotype.Component

@Component
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true, havingValue = "true")
class AdminSearchOverviewPage(
private val shardManager: ShardManager,
private val alunaProperties: AlunaProperties
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ package io.viascom.discord.bot.aluna.bot.command.systemcommand.adminsearch
import io.viascom.discord.bot.aluna.bot.command.systemcommand.AdminSearchDataProvider
import net.dv8tion.jda.api.EmbedBuilder
import net.dv8tion.jda.api.entities.Guild
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.stereotype.Component

@Component
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true, havingValue = "true")
class AdminSearchServerEmotesPage : AdminSearchPageDataProvider(
"EMOTES",
"Emotes",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@ import net.dv8tion.jda.api.EmbedBuilder
import net.dv8tion.jda.api.Permission
import net.dv8tion.jda.api.entities.Guild
import net.dv8tion.jda.api.sharding.ShardManager
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.stereotype.Component

@Component
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true, havingValue = "true")
class AdminSearchServerPermissionsPage(
private val shardManager: ShardManager,
private val alunaProperties: AlunaProperties
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@ import io.viascom.discord.bot.aluna.bot.emotes.AlunaEmote
import net.dv8tion.jda.api.EmbedBuilder
import net.dv8tion.jda.api.entities.User
import net.dv8tion.jda.api.sharding.ShardManager
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.stereotype.Component

@Component
@ConditionalOnProperty(name = ["discord.enable-jda"], prefix = "aluna", matchIfMissing = true, havingValue = "true")
class AdminSearchUserMutualPage(
private val shardManager: ShardManager
) : AdminSearchPageDataProvider(
Expand Down
Loading

0 comments on commit f35f954

Please sign in to comment.