diff --git a/client/src/main/kotlin/org/dreamexposure/discal/client/commands/global/SettingsCommand.kt b/client/src/main/kotlin/org/dreamexposure/discal/client/commands/global/SettingsCommand.kt index efd92dfc1..ab541d827 100644 --- a/client/src/main/kotlin/org/dreamexposure/discal/client/commands/global/SettingsCommand.kt +++ b/client/src/main/kotlin/org/dreamexposure/discal/client/commands/global/SettingsCommand.kt @@ -56,7 +56,7 @@ class SettingsCommand( .map(ApplicationCommandInteractionOptionValue::asSnowflake) .orElse(settings.guildId) - val newSettings= settingsService.upsertSettings(settings.copy(controlRole = roleId.asString())) + val newSettings= settingsService.upsertSettings(settings.copy(controlRole = roleId)) return event.createFollowup(getMessage("role.success", settings)) .withEmbeds(embedService.settingsEmbeds(newSettings)) diff --git a/client/src/main/kotlin/org/dreamexposure/discal/client/listeners/discord/RoleDeleteListener.kt b/client/src/main/kotlin/org/dreamexposure/discal/client/listeners/discord/RoleDeleteListener.kt index 071c11de9..169b2b4dd 100644 --- a/client/src/main/kotlin/org/dreamexposure/discal/client/listeners/discord/RoleDeleteListener.kt +++ b/client/src/main/kotlin/org/dreamexposure/discal/client/listeners/discord/RoleDeleteListener.kt @@ -1,6 +1,5 @@ package org.dreamexposure.discal.client.listeners.discord -import discord4j.common.util.Snowflake import discord4j.core.event.domain.role.RoleDeleteEvent import org.dreamexposure.discal.core.business.GuildSettingsService import org.dreamexposure.discal.core.business.RsvpService @@ -16,8 +15,8 @@ class RoleDeleteListener( rsvpService.removeRoleForAll(event.guildId, event.roleId) val settings = settingsService.getSettings(event.guildId) - if (!"everyone".equals(settings.controlRole, true) && event.roleId == Snowflake.of(settings.controlRole)) { - settingsService.upsertSettings(settings.copy(controlRole = "everyone")) + if (settings.controlRole != null && event.roleId == settings.controlRole) { + settingsService.upsertSettings(settings.copy(controlRole = null)) } } } diff --git a/core/src/main/kotlin/org/dreamexposure/discal/core/business/EmbedService.kt b/core/src/main/kotlin/org/dreamexposure/discal/core/business/EmbedService.kt index 04223bc79..ad2dda79e 100644 --- a/core/src/main/kotlin/org/dreamexposure/discal/core/business/EmbedService.kt +++ b/core/src/main/kotlin/org/dreamexposure/discal/core/business/EmbedService.kt @@ -88,7 +88,7 @@ class EmbedService( ////// Settings Embeds ////// ///////////////////////////// suspend fun settingsEmbeds(settings: GuildSettings): EmbedCreateSpec { - val controlRoleValue = if (settings.controlRole.equals("everyone", true)) "<@&${settings.guildId.asLong()}>" else "<@&${settings.controlRole}>" + val controlRoleValue = if (settings.controlRole == null) "<@&${settings.guildId.asLong()}>" else "<@&${settings.controlRole}>" return defaultEmbedBuilder(settings) .title(getEmbedMessage("settings", "view.title", settings.locale)) diff --git a/core/src/main/kotlin/org/dreamexposure/discal/core/business/GuildSettingsService.kt b/core/src/main/kotlin/org/dreamexposure/discal/core/business/GuildSettingsService.kt index da84e58ac..33320fb64 100644 --- a/core/src/main/kotlin/org/dreamexposure/discal/core/business/GuildSettingsService.kt +++ b/core/src/main/kotlin/org/dreamexposure/discal/core/business/GuildSettingsService.kt @@ -39,14 +39,12 @@ class GuildSettingsService( val saved = repository.save(GuildSettingsData( guildId = settings.guildId.asLong(), - controlRole = settings.controlRole, + controlRole = settings.controlRole?.asString() ?: "everyone", timeFormat = settings.interfaceStyle.timeFormat.value, patronGuild = settings.patronGuild, devGuild = settings.devGuild, maxCalendars = settings.maxCalendars, - dmAnnouncements = settings.dmAnnouncements.joinToString(",") { it.asString() }, lang = settings.locale.toLanguageTag(), - prefix = settings.prefix, branded = settings.interfaceStyle.branded, announcementStyle = settings.interfaceStyle.announcementStyle.value, eventKeepDuration = settings.eventKeepDuration, @@ -62,14 +60,12 @@ class GuildSettingsService( repository.updateByGuildId( guildId = settings.guildId.asLong(), - controlRole = settings.controlRole, + controlRole = settings.controlRole?.asString() ?: "everyone", timeFormat = settings.interfaceStyle.timeFormat.value, patronGuild = settings.patronGuild, devGuild = settings.devGuild, maxCalendars = settings.maxCalendars, - dmAnnouncements = settings.dmAnnouncements.joinToString(",") { it.asString() }, lang = settings.locale.toLanguageTag(), - prefix = settings.prefix, branded = settings.interfaceStyle.branded, announcementStyle = settings.interfaceStyle.announcementStyle.value, eventKeepDuration = settings.eventKeepDuration, diff --git a/core/src/main/kotlin/org/dreamexposure/discal/core/business/PermissionService.kt b/core/src/main/kotlin/org/dreamexposure/discal/core/business/PermissionService.kt index 2a0a1c944..5e4faf9f4 100644 --- a/core/src/main/kotlin/org/dreamexposure/discal/core/business/PermissionService.kt +++ b/core/src/main/kotlin/org/dreamexposure/discal/core/business/PermissionService.kt @@ -2,7 +2,6 @@ package org.dreamexposure.discal.core.business import discord4j.common.util.Snowflake import discord4j.core.DiscordClient -import discord4j.discordjson.Id import kotlinx.coroutines.reactor.awaitSingle import org.springframework.beans.factory.BeanFactory import org.springframework.beans.factory.getBean @@ -19,11 +18,10 @@ class PermissionService( suspend fun hasControlRole(guildId: Snowflake, memberId: Snowflake): Boolean { val settings = settingsService.getSettings(guildId) - if (settings.controlRole.equals("everyone", true)) return true - if (settings.controlRole == guildId.asString()) return true + if (settings.controlRole == null || settings.controlRole == guildId) return true val memberData = discordClient.getMemberById(guildId, memberId).data.awaitSingle() - return memberData.roles().contains(Id.of(settings.controlRole)) + return memberData.roles().map(Snowflake::of).contains(settings.controlRole) } } diff --git a/core/src/main/kotlin/org/dreamexposure/discal/core/database/GuildSettingsData.kt b/core/src/main/kotlin/org/dreamexposure/discal/core/database/GuildSettingsData.kt index 8ad8af43b..ab9b4aa6b 100644 --- a/core/src/main/kotlin/org/dreamexposure/discal/core/database/GuildSettingsData.kt +++ b/core/src/main/kotlin/org/dreamexposure/discal/core/database/GuildSettingsData.kt @@ -11,9 +11,7 @@ data class GuildSettingsData( val patronGuild: Boolean, val devGuild : Boolean, val maxCalendars: Int, - val dmAnnouncements: String, val lang: String, - val prefix: String, val branded: Boolean, val announcementStyle: Int, val eventKeepDuration: Boolean, diff --git a/core/src/main/kotlin/org/dreamexposure/discal/core/database/GuildSettingsRepository.kt b/core/src/main/kotlin/org/dreamexposure/discal/core/database/GuildSettingsRepository.kt index 803ccc6e5..ad1975921 100644 --- a/core/src/main/kotlin/org/dreamexposure/discal/core/database/GuildSettingsRepository.kt +++ b/core/src/main/kotlin/org/dreamexposure/discal/core/database/GuildSettingsRepository.kt @@ -17,9 +17,7 @@ interface GuildSettingsRepository : R2dbcRepository { patron_guild = :patronGuild, dev_guild = :devGuild, max_calendars = :maxCalendars, - dm_announcements = :dmAnnouncements, lang = :lang, - prefix = :prefix, branded = :branded, announcement_style = :announcementStyle, event_keep_duration = :eventKeepDuration @@ -33,9 +31,7 @@ interface GuildSettingsRepository : R2dbcRepository { patronGuild: Boolean, devGuild: Boolean, maxCalendars: Int, - dmAnnouncements: String, lang: String, - prefix: String, branded: Boolean, announcementStyle: Int, eventKeepDuration: Boolean, diff --git a/core/src/main/kotlin/org/dreamexposure/discal/core/object/new/GuildSettings.kt b/core/src/main/kotlin/org/dreamexposure/discal/core/object/new/GuildSettings.kt index 2968ff27f..493bc31e6 100644 --- a/core/src/main/kotlin/org/dreamexposure/discal/core/object/new/GuildSettings.kt +++ b/core/src/main/kotlin/org/dreamexposure/discal/core/object/new/GuildSettings.kt @@ -5,20 +5,16 @@ import org.dreamexposure.discal.core.database.GuildSettingsData import org.dreamexposure.discal.core.enums.time.TimeFormat import org.dreamexposure.discal.core.extensions.asLocale import org.dreamexposure.discal.core.extensions.asSnowflake -import org.dreamexposure.discal.core.extensions.asStringListFromDatabase import java.util.* data class GuildSettings( val guildId: Snowflake, - val controlRole: String = "everyone", + val controlRole: Snowflake? = null, val patronGuild: Boolean = false, val devGuild: Boolean = false, val maxCalendars: Int = 1, - val dmAnnouncements: Set = setOf(), val locale: Locale = Locale.ENGLISH, - @Deprecated("Should be removed since chat commands are no longer used") - val prefix: String = "!", val eventKeepDuration: Boolean = false, val interfaceStyle: InterfaceStyle = InterfaceStyle() @@ -26,13 +22,11 @@ data class GuildSettings( constructor(data: GuildSettingsData): this( guildId = data.guildId.asSnowflake(), - controlRole = data.controlRole, + controlRole = if (data.controlRole.equals("everyone", true)) null else Snowflake.of(data.controlRole), patronGuild = data.patronGuild, devGuild = data.devGuild, maxCalendars = data.maxCalendars, - dmAnnouncements = data.dmAnnouncements.asStringListFromDatabase().map(Snowflake::of).toSet(), locale = data.lang.asLocale(), - prefix = data.prefix, eventKeepDuration = data.eventKeepDuration, interfaceStyle = InterfaceStyle( diff --git a/core/src/main/resources/db/migration/V28__Drop_Deprecated_Guild_Settings.sql b/core/src/main/resources/db/migration/V28__Drop_Deprecated_Guild_Settings.sql new file mode 100644 index 000000000..28ce7d5d4 --- /dev/null +++ b/core/src/main/resources/db/migration/V28__Drop_Deprecated_Guild_Settings.sql @@ -0,0 +1,7 @@ +ALTER TABLE guild_settings DROP COLUMN prefix; + +ALTER TABLE guild_settings DROP COLUMN dm_announcements; + + + + diff --git a/server/src/main/kotlin/org/dreamexposure/discal/server/endpoints/v2/guild/GetWebGuildEndpoint.kt b/server/src/main/kotlin/org/dreamexposure/discal/server/endpoints/v2/guild/GetWebGuildEndpoint.kt index d57d93e67..12e45963c 100644 --- a/server/src/main/kotlin/org/dreamexposure/discal/server/endpoints/v2/guild/GetWebGuildEndpoint.kt +++ b/server/src/main/kotlin/org/dreamexposure/discal/server/endpoints/v2/guild/GetWebGuildEndpoint.kt @@ -55,11 +55,11 @@ class GetWebGuildEndpoint( // Convert to deprecated settings for compatibility with legacy website GuildSettings( guildID = it.guildId, - controlRole = it.controlRole, + controlRole = it.controlRole?.asString() ?: "everyone", announcementStyle = AnnouncementStyle.fromValue(it.interfaceStyle.announcementStyle.value), timeFormat = it.interfaceStyle.timeFormat, lang = it.locale.toLanguageTag(), - prefix = it.prefix, + prefix = "!", patronGuild = it.patronGuild, devGuild = it.devGuild, maxCalendars = it.maxCalendars, diff --git a/server/src/main/kotlin/org/dreamexposure/discal/server/endpoints/v2/guild/settings/GetGuildSettingsEndpoint.kt b/server/src/main/kotlin/org/dreamexposure/discal/server/endpoints/v2/guild/settings/GetGuildSettingsEndpoint.kt index 68493369b..25c0d3eed 100644 --- a/server/src/main/kotlin/org/dreamexposure/discal/server/endpoints/v2/guild/settings/GetGuildSettingsEndpoint.kt +++ b/server/src/main/kotlin/org/dreamexposure/discal/server/endpoints/v2/guild/settings/GetGuildSettingsEndpoint.kt @@ -47,11 +47,11 @@ class GetGuildSettingsEndpoint( // Convert to deprecated settings for compatibility with legacy website GuildSettings( guildID = it.guildId, - controlRole = it.controlRole, + controlRole = it.controlRole?.asString() ?: "everyone", announcementStyle = AnnouncementStyle.fromValue(it.interfaceStyle.announcementStyle.value), timeFormat = it.interfaceStyle.timeFormat, lang = it.locale.toLanguageTag(), - prefix = it.prefix, + prefix = "!", patronGuild = it.patronGuild, devGuild = it.devGuild, maxCalendars = it.maxCalendars, diff --git a/server/src/main/kotlin/org/dreamexposure/discal/server/endpoints/v2/guild/settings/UpdateGuildSettingsEndpoint.kt b/server/src/main/kotlin/org/dreamexposure/discal/server/endpoints/v2/guild/settings/UpdateGuildSettingsEndpoint.kt index c762ead44..385ee361e 100644 --- a/server/src/main/kotlin/org/dreamexposure/discal/server/endpoints/v2/guild/settings/UpdateGuildSettingsEndpoint.kt +++ b/server/src/main/kotlin/org/dreamexposure/discal/server/endpoints/v2/guild/settings/UpdateGuildSettingsEndpoint.kt @@ -45,10 +45,9 @@ class UpdateGuildSettingsEndpoint( mono { settingsService.getSettings(guildId) }.flatMap { settings -> //Handle various things that are allowed to change - val conRole = body.optString("control_role", settings.controlRole) + val conRole = body.optString("control_role", settings.controlRole?.asString() ?: "everyone") val aStyle = body.optInt("announcement_style", settings.interfaceStyle.announcementStyle.value) val lang = body.optString("lang", settings.locale.toLanguageTag()) - val prefix = body.optString("prefix", settings.prefix) val timeFormat = body.optInt("time_format", settings.interfaceStyle.timeFormat.value) var patronGuild = settings.patronGuild var devGuild = settings.devGuild @@ -64,14 +63,13 @@ class UpdateGuildSettingsEndpoint( } val newSettings = settings.copy( - controlRole = conRole, + controlRole = if (conRole.equals("everyone", true)) null else Snowflake.of(conRole), interfaceStyle = settings.interfaceStyle.copy( announcementStyle = GuildSettings.AnnouncementStyle.entries.first { it.value == aStyle }, timeFormat = TimeFormat.fromValue(timeFormat), branded = branded, ), locale = Locale.forLanguageTag(lang), - prefix = prefix, patronGuild = patronGuild, devGuild = devGuild, maxCalendars = maxCals,