mirror of
https://github.com/DreamExposure/DisCal-Discord-Bot.git
synced 2026-01-25 05:18:27 -06:00
Removing deprecated guild settings and cleaning up data layer separation
This commit is contained in:
@@ -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))
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -17,9 +17,7 @@ interface GuildSettingsRepository : R2dbcRepository<GuildSettingsData, Long> {
|
||||
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<GuildSettingsData, Long> {
|
||||
patronGuild: Boolean,
|
||||
devGuild: Boolean,
|
||||
maxCalendars: Int,
|
||||
dmAnnouncements: String,
|
||||
lang: String,
|
||||
prefix: String,
|
||||
branded: Boolean,
|
||||
announcementStyle: Int,
|
||||
eventKeepDuration: Boolean,
|
||||
|
||||
@@ -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<Snowflake> = 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(
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
ALTER TABLE guild_settings DROP COLUMN prefix;
|
||||
|
||||
ALTER TABLE guild_settings DROP COLUMN dm_announcements;
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user