mirror of
https://github.com/DreamExposure/DisCal-Discord-Bot.git
synced 2026-01-28 14:58:28 -06:00
Should fix issue regarding getting control role
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user