Should fix issue regarding getting control role

This commit is contained in:
NovaFox161
2021-08-10 15:32:44 -05:00
parent 456b839ab7
commit 2520607eae
2 changed files with 27 additions and 8 deletions

View File

@@ -1,20 +1,16 @@
package org.dreamexposure.discal.client.message.embed
import discord4j.common.util.Snowflake
import discord4j.core.`object`.entity.Guild
import discord4j.core.`object`.entity.Role
import discord4j.core.spec.EmbedCreateSpec
import org.dreamexposure.discal.core.`object`.GuildSettings
import org.dreamexposure.discal.core.extensions.discord4j.getControlRole
import reactor.core.publisher.Mono
object SettingsEmbed : EmbedMaker {
fun getView(guild: Guild, settings: GuildSettings): Mono<EmbedCreateSpec> {
val roleMono = guild.getRoleById(Snowflake.of(settings.controlRole))
.map(Role::getName)
.onErrorReturn("everyone") // This should be more efficient than looping through all roles
return roleMono.map { roleName ->
return guild.getControlRole().map(Role::getName).map { roleName ->
defaultBuilder(guild, settings)
.title(getMessage("settings", "view.title", settings))
.addField(getMessage("settings", "view.field.role", settings), roleName, false)

View File

@@ -1,9 +1,14 @@
package org.dreamexposure.discal.core.extensions.discord4j
import discord4j.common.util.Snowflake
import discord4j.core.`object`.entity.Guild
import discord4j.core.`object`.entity.Role
import discord4j.rest.entity.RestGuild
import discord4j.rest.http.client.ClientException
import io.netty.handler.codec.http.HttpResponseStatus
import org.dreamexposure.discal.core.`object`.GuildSettings
import org.dreamexposure.discal.core.`object`.announcement.Announcement
import org.dreamexposure.discal.core.database.DatabaseManager
import org.dreamexposure.discal.core.entities.Calendar
import org.dreamexposure.discal.core.entities.spec.create.CreateCalendarSpec
import reactor.core.publisher.Flux
@@ -15,10 +20,10 @@ fun Guild.getSettings(): Mono<GuildSettings> = getRestGuild().getSettings()
//Calendars
/**
* Attempts to request whether or not this [Guild] has at least one [Calendar].
* Attempts to request whether this [Guild] has at least one [Calendar].
* If an error occurs, it is emitted through the [Mono]
*
* @return A [Mono] containing whether or not this [Guild] has a [Calendar].
* @return A [Mono] containing whether this [Guild] has a [Calendar].
*/
fun Guild.hasCalendar(): Mono<Boolean> = getRestGuild().hasCalendar()
@@ -98,6 +103,24 @@ fun Guild.updateAnnouncement(ann: Announcement): Mono<Boolean> = getRestGuild().
fun Guild.deleteAnnouncement(id: UUID): Mono<Boolean> = getRestGuild().deleteAnnouncement(id)
fun Guild.getControlRole(): Mono<Role> {
return getSettings().flatMap { settings ->
if (settings.controlRole.equals("everyone", true))
return@flatMap this.everyoneRole
else {
return@flatMap getRoleById(Snowflake.of(settings.controlRole))
.onErrorResume(ClientException::class.java) {
//If control role is deleted/not found, we reset it to everyone
if (it.status == HttpResponseStatus.NOT_FOUND) {
settings.controlRole = "everyone"
DatabaseManager.updateSettings(settings).then(everyoneRole)
} else
everyoneRole
}
}
}
}
fun Guild.getRestGuild(): RestGuild {
return client.rest().restGuild(data)
}