Skip to content

Commit

Permalink
Removing deprecated guild settings and cleaning up data layer separation
Browse files Browse the repository at this point in the history
  • Loading branch information
NovaFox161 committed Apr 13, 2024
1 parent 8642f5e commit 6022c2b
Show file tree
Hide file tree
Showing 12 changed files with 23 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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))
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,34 +5,28 @@ 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()
) {
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(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
ALTER TABLE guild_settings DROP COLUMN prefix;

ALTER TABLE guild_settings DROP COLUMN dm_announcements;




Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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,
Expand Down

0 comments on commit 6022c2b

Please sign in to comment.