This should fix a handful of issues with the new announcement command

This commit is contained in:
NovaFox161
2022-01-13 20:51:41 -06:00
parent 394351535d
commit 17a2b42d41
6 changed files with 347 additions and 327 deletions
@@ -89,21 +89,22 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
return Mono.justOrEmpty(event.interaction.member).filterWhen(Member::hasControlRole).flatMap {
if (wizard.get(settings.guildID) == null) {
channelMono.flatMap { channel ->
val pre = Announcement(settings.guildID)
pre.type = type
pre.announcementChannelId = channel.id.asString()
pre.minutesBefore = minutes
pre.hoursBefore = hours
pre.calendarNumber = calendar
val pre = Announcement(settings.guildID,
type = type,
announcementChannelId = channel.id.asString(),
minutesBefore = minutes,
hoursBefore = hours,
calendarNumber = calendar
)
wizard.start(pre)
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(getMessage("create.success", settings), it) }
}
} else {
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, wizard.get(settings.guildID)!!, settings) }
.map { AnnouncementEmbed.pre(it, wizard.get(settings.guildID)!!, settings) }
.flatMap { event.followup(getMessage("error.wizard.started", settings), it) }
}
}.switchIfEmpty(event.followupEphemeral(getCommonMsg("error.perms.privileged", settings)))
@@ -120,8 +121,12 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
val pre = wizard.get(settings.guildID)
if (pre != null) {
pre.type = type
// Handle edge case where event is already set, but has recurrence suffix.
pre.eventId = pre.eventId.split("_")[0]
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(getMessage("type.success", settings), it) }
} else {
event.followupEphemeral(getMessage("error.wizard.notStarted", settings))
@@ -147,12 +152,12 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
else pre.eventId = eventId
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(getMessage("event.success", settings), it) }
}.switchIfEmpty(event.followupEphemeral(getCommonMsg("error.notFound.event", settings)))
} else {
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(getMessage("event.failure.type", settings), it) }
}
} else {
@@ -176,11 +181,11 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
pre.eventColor = color
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(getMessage("color.success", settings), it) }
} else {
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(getMessage("color.failure.type", settings), it) }
}
} else {
@@ -203,7 +208,7 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
pre.announcementChannelId = channel.id.asString()
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(getMessage("channel.success", settings), it) }
}
} else {
@@ -224,7 +229,7 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
if (pre != null) {
pre.minutesBefore = minutes
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(getMessage("minutes.success", settings), it) }
} else {
event.followupEphemeral(getMessage("error.wizard.notStarted", settings))
@@ -244,7 +249,7 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
if (pre != null) {
pre.hoursBefore = hours
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(getMessage("hours.success", settings), it) }
} else {
event.followupEphemeral(getMessage("error.wizard.notStarted", settings))
@@ -263,7 +268,7 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
if (pre != null) {
pre.info = info
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(getMessage("info.success.set", settings), it) }
} else {
event.followupEphemeral(getMessage("error.wizard.notStarted", settings))
@@ -283,7 +288,7 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
if (pre != null) {
pre.calendarNumber = calendar
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(getMessage("calendar.success", settings), it) }
} else {
event.followupEphemeral(getMessage("error.wizard.notStarted", settings))
@@ -303,11 +308,11 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
if (settings.patronGuild) {
pre.publish = publish
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(getMessage("publish.success", settings), it) }
} else {
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(getMessage("error.patronOnly", settings), it) }
}
} else {
@@ -321,7 +326,7 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
val pre = wizard.get(settings.guildID)
if (pre != null) {
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(it) }
} else {
event.followupEphemeral(getMessage("error.wizard.notStarted", settings))
@@ -342,7 +347,7 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
val msg = if (pre.editing) getMessage("confirm.success.edit", settings)
else getMessage("confirm.success.create", settings)
event.interaction.guild.flatMap { AnnouncementEmbed.view(pre, it) }.flatMap { embed ->
event.interaction.guild.map { AnnouncementEmbed.view(pre, it, settings) }.flatMap { embed ->
event.interaction.channel.flatMap {
it.createMessage(msg).withEmbeds(embed)
.then(event.followupEphemeral(getCommonMsg("success.generic", settings)))
@@ -353,13 +358,13 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
else getMessage("confirm.failure.create", settings)
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(msg, it) }
}
}
} else {
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(getMessage("confirm.failure.missing", settings), it) }
}
} else {
@@ -389,12 +394,12 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
wizard.start(pre)
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(getMessage("edit.success", settings), it) }
}.switchIfEmpty(event.followupEphemeral(getCommonMsg("error.notFound.announcement", settings)))
} else {
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, wizard.get(settings.guildID)!!, settings) }
.map { AnnouncementEmbed.pre(it, wizard.get(settings.guildID)!!, settings) }
.flatMap { event.followup(getMessage("error.wizard.started", settings), it) }
}
}.switchIfEmpty(event.followupEphemeral(getCommonMsg("error.perms.privileged", settings)))
@@ -413,12 +418,12 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
wizard.start(pre)
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, pre, settings) }
.map { AnnouncementEmbed.pre(it, pre, settings) }
.flatMap { event.followupEphemeral(getMessage("copy.success", settings), it) }
}.switchIfEmpty(event.followupEphemeral(getCommonMsg("error.notFound.announcement", settings)))
} else {
event.interaction.guild
.flatMap { AnnouncementEmbed.pre(it, wizard.get(settings.guildID)!!, settings) }
.map { AnnouncementEmbed.pre(it, wizard.get(settings.guildID)!!, settings) }
.flatMap { event.followup(getMessage("error.wizard.started", settings), it) }
}
}.switchIfEmpty(event.followupEphemeral(getCommonMsg("error.perms.privileged", settings)))
@@ -460,11 +465,11 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
DatabaseManager.updateAnnouncement(announcement).flatMap {
if (enabled) {
event.interaction.guild
.flatMap { AnnouncementEmbed.view(announcement, it) }
.map { AnnouncementEmbed.view(announcement, it, settings) }
.flatMap { event.followupEphemeral(getMessage("enable.success", settings), it) }
} else {
event.interaction.guild
.flatMap { AnnouncementEmbed.view(announcement, it) }
.map { AnnouncementEmbed.view(announcement, it, settings) }
.flatMap { event.followupEphemeral(getMessage("disable.success", settings), it) }
}
}
@@ -480,7 +485,7 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
return DatabaseManager.getAnnouncement(announcementId, settings.guildID).flatMap { announcement ->
val guildMono = event.interaction.guild.cache()
val embedMono = guildMono.flatMap { AnnouncementEmbed.view(announcement, it) }
val embedMono = guildMono.map { AnnouncementEmbed.view(announcement, it, settings) }
val subscribersMono = guildMono.flatMap { it.buildMentions(announcement) }
Mono.zip(embedMono, subscribersMono).flatMap(TupleUtils.function { embed, subs ->
@@ -536,7 +541,7 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
if (announcements.isEmpty()) {
event.followupEphemeral(getMessage("list.success.none", settings))
} else if (announcements.size == 1) {
event.interaction.guild.flatMap { AnnouncementEmbed.view(announcements[0], it) }.flatMap {
event.interaction.guild.map { AnnouncementEmbed.view(announcements[0], it, settings) }.flatMap {
event.createFollowup(InteractionFollowupCreateSpec.builder()
.content(getMessage("list.success.one", settings))
.addEmbed(it)
@@ -551,7 +556,7 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
val successMessage = event.followupEphemeral(getMessage("list.success.many", settings, "$limit"))
val condAns = guildMono.flatMapMany { guild ->
Flux.fromIterable(announcements.subList(0, limit)).flatMap { a ->
AnnouncementEmbed.condensed(a, guild).flatMap(event::followupEphemeral)
event.followupEphemeral(AnnouncementEmbed.condensed(a, guild, settings))
}
}
@@ -581,28 +586,24 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
announcement.subscriberUserIds.add(member.id.asString())
DatabaseManager.updateAnnouncement(announcement).flatMap {
AnnouncementEmbed.view(announcement, guild).flatMap { embed ->
event.createFollowup(InteractionFollowupCreateSpec.builder()
.content(getMessage("subscribe.success.other", settings, member.nicknameMention))
.addEmbed(embed)
.allowedMentions(AllowedMentions.suppressAll())
.build()
)
}
event.createFollowup(InteractionFollowupCreateSpec.builder()
.content(getMessage("subscribe.success.other", settings, member.nicknameMention))
.addEmbed(AnnouncementEmbed.view(announcement, guild, settings))
.allowedMentions(AllowedMentions.suppressAll())
.build()
)
}
}.switchIfEmpty(roleMono.flatMap { role ->
announcement.subscriberRoleIds.remove(role.id.asString())
announcement.subscriberRoleIds.add(role.id.asString())
DatabaseManager.updateAnnouncement(announcement).flatMap {
AnnouncementEmbed.view(announcement, guild).flatMap { embed ->
event.createFollowup(InteractionFollowupCreateSpec.builder()
.content(getMessage("subscribe.success.other", settings, role.mention))
.addEmbed(embed)
.allowedMentions(AllowedMentions.suppressAll())
.build()
)
}
event.createFollowup(InteractionFollowupCreateSpec.builder()
.content(getMessage("subscribe.success.other", settings, role.mention))
.addEmbed(AnnouncementEmbed.view(announcement, guild, settings))
.allowedMentions(AllowedMentions.suppressAll())
.build()
)
}
})
} else {
@@ -610,9 +611,10 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
announcement.subscriberUserIds.add(event.interaction.user.id.asString())
DatabaseManager.updateAnnouncement(announcement).flatMap {
AnnouncementEmbed.view(announcement, guild).flatMap { embed ->
event.followupEphemeral(getMessage("subscribe.success.self", settings), embed)
}
event.followupEphemeral(
getMessage("subscribe.success.self", settings),
AnnouncementEmbed.view(announcement, guild, settings)
)
}
}
}
@@ -639,36 +641,33 @@ class AnnouncementCommand(val wizard: Wizard<Announcement>) : SlashCommand {
announcement.subscriberUserIds.remove(member.id.asString())
DatabaseManager.updateAnnouncement(announcement).flatMap {
AnnouncementEmbed.view(announcement, guild).flatMap { embed ->
event.createFollowup(InteractionFollowupCreateSpec.builder()
.content(getMessage("unsubscribe.success.other", settings, member.nicknameMention))
.addEmbed(embed)
.allowedMentions(AllowedMentions.suppressAll())
.build()
)
}
event.createFollowup(InteractionFollowupCreateSpec.builder()
.content(getMessage("unsubscribe.success.other", settings, member.nicknameMention))
.addEmbed(AnnouncementEmbed.view(announcement, guild, settings))
.allowedMentions(AllowedMentions.suppressAll())
.build()
)
}
}.switchIfEmpty(roleMono.flatMap { role ->
announcement.subscriberRoleIds.remove(role.id.asString())
DatabaseManager.updateAnnouncement(announcement).flatMap {
AnnouncementEmbed.view(announcement, guild).flatMap { embed ->
event.createFollowup(InteractionFollowupCreateSpec.builder()
.content(getMessage("unsubscribe.success.other", settings, role.mention))
.addEmbed(embed)
.allowedMentions(AllowedMentions.suppressAll())
.build()
)
}
event.createFollowup(InteractionFollowupCreateSpec.builder()
.content(getMessage("unsubscribe.success.other", settings, role.mention))
.addEmbed(AnnouncementEmbed.view(announcement, guild, settings))
.allowedMentions(AllowedMentions.suppressAll())
.build()
)
}
})
} else {
announcement.subscriberUserIds.remove(event.interaction.user.id.asString())
DatabaseManager.updateAnnouncement(announcement).flatMap {
AnnouncementEmbed.view(announcement, guild).flatMap { embed ->
event.followupEphemeral(getMessage("unsubscribe.success.self", settings), embed)
}
event.followupEphemeral(
getMessage("unsubscribe.success.self", settings),
AnnouncementEmbed.view(announcement, guild, settings)
)
}
}
}
@@ -1,8 +1,6 @@
package org.dreamexposure.discal.client.message.embed
import discord4j.common.util.Snowflake
import discord4j.core.`object`.entity.Guild
import discord4j.core.`object`.entity.channel.GuildChannel
import discord4j.core.spec.EmbedCreateSpec
import org.dreamexposure.discal.core.`object`.GuildSettings
import org.dreamexposure.discal.core.`object`.announcement.Announcement
@@ -18,264 +16,287 @@ import org.dreamexposure.discal.core.extensions.toMarkdown
import org.dreamexposure.discal.core.utils.GlobalVal
import org.dreamexposure.discal.core.utils.getCommonMsg
import reactor.core.publisher.Mono
import reactor.function.TupleUtils
object AnnouncementEmbed : EmbedMaker {
fun determine(ann: Announcement, event: Event, guild: Guild): Mono<EmbedCreateSpec> {
return guild.getSettings().flatMap { settings ->
return guild.getSettings().map { settings ->
when (settings.announcementStyle) {
AnnouncementStyle.FULL -> full(ann, event, guild)
AnnouncementStyle.SIMPLE -> simple(ann, event, guild)
AnnouncementStyle.EVENT -> event(ann, event, guild)
AnnouncementStyle.FULL -> full(ann, event, guild, settings)
AnnouncementStyle.SIMPLE -> simple(ann, event, guild, settings)
AnnouncementStyle.EVENT -> event(ann, event, guild, settings)
}
}
}
fun full(ann: Announcement, event: Event, guild: Guild): Mono<EmbedCreateSpec> {
return guild.getSettings().map { settings ->
val builder = defaultBuilder(guild, settings)
.color(event.color.asColor())
.title(getMessage("announcement", "full.title", settings))
private fun full(ann: Announcement, event: Event, guild: Guild, settings: GuildSettings): EmbedCreateSpec {
val builder = defaultBuilder(guild, settings)
.color(event.color.asColor())
.title(getMessage("announcement", "full.title", settings))
if (event.name.isNotBlank())
builder.addField(getMessage("announcement", "full.field.name", settings), event.name.toMarkdown().embedFieldSafe(), false)
if (event.description.isNotBlank())
builder.addField(getMessage("announcement", "full.field.desc", settings), event.description.toMarkdown().embedFieldSafe(), false)
if (event.name.isNotBlank()) builder.addField(
getMessage("announcement", "full.field.name", settings),
event.name.toMarkdown().embedFieldSafe(),
false
)
if (event.description.isNotBlank()) builder.addField(
getMessage("announcement", "full.field.desc", settings),
event.description.toMarkdown().embedFieldSafe(),
false
)
builder.addField(
getMessage("announcement", "full.field.start", settings),
event.start.asDiscordTimestamp(LONG_DATETIME),
true
)
builder.addField(
getMessage("announcement", "full.field.end", settings),
event.end.asDiscordTimestamp(LONG_DATETIME),
true
)
builder.addField(
getMessage("announcement", "full.field.start", settings),
event.start.asDiscordTimestamp(LONG_DATETIME),
true
)
builder.addField(
getMessage("announcement", "full.field.end", settings),
event.end.asDiscordTimestamp(LONG_DATETIME),
true
)
if (event.location.isNotBlank())
builder.addField(getMessage("announcement", "full.field.location", settings), event.location.toMarkdown().embedFieldSafe(), false)
if (event.location.isNotBlank()) builder.addField(
getMessage("announcement", "full.field.location", settings),
event.location.toMarkdown().embedFieldSafe(),
false
)
if (ann.info.isNotBlank() && !ann.info.equals("None", true))
builder.addField(getMessage("announcement", "full.field.info", settings), ann.info.toMarkdown().embedFieldSafe(), false)
if (ann.info.isNotBlank() && !ann.info.equals("None", true)) builder.addField(
getMessage("announcement", "full.field.info", settings),
ann.info.toMarkdown().embedFieldSafe(),
false
)
builder.addField(
getMessage("announcement", "full.field.calendar", settings),
"${event.calendar.calendarNumber}",
true
)
builder.addField(getMessage("announcement", "full.field.event", settings), event.eventId, true)
builder.addField(
getMessage("announcement", "full.field.calendar", settings),
"${event.calendar.calendarNumber}",
true
)
builder.addField(getMessage("announcement", "full.field.event", settings), event.eventId, true)
if (event.image.isNotBlank())
builder.image(event.image)
if (event.image.isNotBlank())
builder.image(event.image)
builder.footer(getMessage("announcement", "full.footer", settings, ann.id.toString()), null)
builder.footer(getMessage("announcement", "full.footer", settings, ann.id), null)
builder.build()
return builder.build()
}
private fun simple(ann: Announcement, event: Event, guild: Guild, settings: GuildSettings): EmbedCreateSpec {
val builder = defaultBuilder(guild, settings)
.color(event.color.asColor())
.title(getMessage("announcement", "simple.title", settings))
if (event.name.isNotBlank()) builder.addField(
getMessage("announcement", "simple.field.name", settings),
event.name.toMarkdown().embedFieldSafe(),
false
)
if (event.description.isNotBlank()) builder.addField(
getMessage("announcement", "simple.field.desc", settings),
event.description.toMarkdown().embedFieldSafe(),
false
)
builder.addField(
getMessage("announcement", "simple.field.start", settings),
event.start.asDiscordTimestamp(LONG_DATETIME),
true
)
if (event.location.isNotBlank()) builder.addField(
getMessage("announcement", "simple.field.location", settings),
event.location.toMarkdown().embedFieldSafe(),
false
)
if (ann.info.isNotBlank() && !ann.info.equals("None", true)) builder.addField(
getMessage("announcement", "simple.field.info", settings),
ann.info.toMarkdown().embedFieldSafe(),
false
)
if (event.image.isNotEmpty())
builder.image(event.image)
builder.footer(getMessage("announcement", "simple.footer", settings, ann.id), null)
return builder.build()
}
fun event(ann: Announcement, event: Event, guild: Guild, settings: GuildSettings): EmbedCreateSpec {
val builder = defaultBuilder(guild, settings)
.color(event.color.asColor())
.title(getMessage("announcement", "event.title", settings))
if (event.name.isNotBlank()) builder.addField(
getMessage("announcement", "event.field.name", settings),
event.name.toMarkdown().embedFieldSafe(),
false
)
if (event.description.isNotBlank()) builder.addField(
getMessage("announcement", "event.field.desc", settings),
event.description.toMarkdown().embedFieldSafe(),
false
)
builder.addField(
getMessage("announcement", "event.field.start", settings),
event.start.asDiscordTimestamp(LONG_DATETIME),
true
)
builder.addField(
getMessage("announcement", "event.field.end", settings),
event.end.asDiscordTimestamp(LONG_DATETIME),
true
)
if (event.location.isNotBlank()) builder.addField(
getMessage("announcement", "event.field.location", settings),
event.location.toMarkdown().embedFieldSafe(),
false
)
builder.addField(
getMessage("announcement", "event.field.calendar", settings),
"${event.calendar.calendarNumber}",
true
)
builder.addField(getMessage("announcement", "event.field.event", settings), event.eventId, true)
if (ann.info.isNotBlank() && !ann.info.equals("None", true)) builder.addField(
getMessage("announcement", "event.field.info", settings),
ann.info.toMarkdown().embedFieldSafe(),
false
)
if (event.image.isNotBlank())
builder.image(event.image)
builder.footer(getMessage("announcement", "event.footer", settings, ann.id), null)
return builder.build()
}
fun condensed(ann: Announcement, guild: Guild, settings: GuildSettings): EmbedCreateSpec {
val builder = defaultBuilder(guild, settings)
.title(getMessage("announcement", "con.title", settings))
.addField(getMessage("announcement", "con.field.id", settings), ann.id, false)
.addField(getMessage("announcement", "con.field.time", settings), condensedTime(ann), true)
.addField(getMessage("announcement", "con.field.enabled", settings), "${ann.enabled}", true)
.footer(getMessage("announcement", "con.footer", settings, ann.type.name, ann.modifier.name), null)
if (ann.type == AnnouncementType.COLOR)
builder.color(ann.eventColor.asColor())
else
builder.color(GlobalVal.discalColor)
return builder.build()
}
fun view(ann: Announcement, guild: Guild, settings: GuildSettings): EmbedCreateSpec {
val builder = defaultBuilder(guild, settings)
.title(getMessage("announcement", "view.title", settings))
.addField(getMessage("announcement", "view.field.type", settings), ann.type.name, true)
.addField(getMessage("announcement", "view.field.modifier", settings), ann.modifier.name, true)
.addField(getMessage("announcement", "view.field.channel", settings), "<${ann.announcementChannelId}>", false)
.addField(getMessage("announcement", "view.field.hours", settings), "${ann.hoursBefore}", true)
.addField(getMessage("announcement", "view.field.minutes", settings), "${ann.minutesBefore}", true)
if (ann.info.isNotBlank() && !ann.info.equals("None", true)) {
builder.addField(getMessage("announcement", "view.field.info", settings), ann.info.toMarkdown().embedFieldSafe(), false)
}
builder.addField(getMessage("announcement", "view.field.calendar", settings), "${ann.calendarNumber}", true)
if (ann.type == AnnouncementType.RECUR || ann.type == AnnouncementType.SPECIFIC)
builder.addField(getMessage("announcement", "view.field.event", settings), ann.eventId, true)
if (ann.type == AnnouncementType.COLOR) {
builder.color(ann.eventColor.asColor())
builder.addField(getMessage("announcement", "view.field.color", settings), ann.eventColor.name, true)
} else
builder.color(GlobalVal.discalColor)
return builder.addField(getMessage("announcement", "view.field.id", settings), ann.id, false)
.addField(getMessage("announcement", "view.field.enabled", settings), "${ann.enabled}", true)
.addField(getMessage("announcement", "view.field.publish", settings), "${ann.publish}", true)
.build()
}
fun simple(ann: Announcement, event: Event, guild: Guild): Mono<EmbedCreateSpec> {
return guild.getSettings().map { settings ->
val builder = defaultBuilder(guild, settings)
.color(event.color.asColor())
.title(getMessage("announcement", "simple.title", settings))
fun pre(guild: Guild, ann: Announcement, settings: GuildSettings): EmbedCreateSpec {
val builder = defaultBuilder(guild, settings)
.title(getMessage("announcement", "wizard.title", settings))
.footer(getMessage("announcement", "wizard.footer", settings), null)
.color(ann.eventColor.asColor())
//fields
.addField(getMessage("announcement", "wizard.field.type", settings), ann.type.name, true)
.addField(getMessage("announcement", "wizard.field.modifier", settings), ann.modifier.name, true)
if (event.name.isNotBlank())
builder.addField(getMessage("announcement", "simple.field.name", settings), event.name.toMarkdown().embedFieldSafe(), false)
if (event.description.isNotBlank())
builder.addField(getMessage("announcement", "simple.field.desc", settings), event.description.toMarkdown().embedFieldSafe(), false)
builder.addField(
getMessage("announcement", "simple.field.start", settings),
event.start.asDiscordTimestamp(LONG_DATETIME),
true
)
if (event.location.isNotBlank())
builder.addField(getMessage("announcement", "simple.field.location", settings), event.location.toMarkdown().embedFieldSafe(), false)
if (ann.info.isNotBlank() && !ann.info.equals("None", true))
builder.addField(getMessage("announcement", "simple.field.info", settings), ann.info.toMarkdown().embedFieldSafe(), false)
if (event.image.isNotEmpty())
builder.image(event.image)
builder.footer(getMessage("announcement", "simple.footer", settings, ann.id.toString()), null)
builder.build()
}
}
fun event(ann: Announcement, event: Event, guild: Guild): Mono<EmbedCreateSpec> {
return guild.getSettings().map { settings ->
val builder = defaultBuilder(guild, settings)
.color(event.color.asColor())
.title(getMessage("announcement", "event.title", settings))
if (event.name.isNotBlank())
builder.addField(getMessage("announcement", "event.field.name", settings), event.name.toMarkdown().embedFieldSafe(), false)
if (event.description.isNotBlank())
builder.addField(getMessage("announcement", "event.field.desc", settings), event.description.toMarkdown().embedFieldSafe(), false)
builder.addField(
getMessage("announcement", "event.field.start", settings),
event.start.asDiscordTimestamp(LONG_DATETIME),
true
)
builder.addField(
getMessage("announcement", "event.field.end", settings),
event.end.asDiscordTimestamp(LONG_DATETIME),
true
)
if (event.location.isNotBlank())
builder.addField(getMessage("announcement", "event.field.location", settings), event.location.toMarkdown().embedFieldSafe(), false)
builder.addField(
getMessage("announcement", "event.field.calendar", settings),
"${event.calendar.calendarNumber}",
true
)
builder.addField(getMessage("announcement", "event.field.event", settings), event.eventId, true)
if (ann.info.isNotBlank() && !ann.info.equals("None", true))
builder.addField(getMessage("announcement", "event.field.info", settings), ann.info.toMarkdown().embedFieldSafe(), false)
if (event.image.isNotBlank()) {
builder.image(event.image)
}
builder.footer(getMessage("announcement", "event.footer", settings, ann.id.toString()), null)
builder.build()
}
}
fun condensed(ann: Announcement, guild: Guild): Mono<EmbedCreateSpec> {
return guild.getSettings().map { settings ->
val builder = defaultBuilder(guild, settings)
.title(getMessage("announcement", "con.title", settings))
.addField(getMessage("announcement", "con.field.id", settings), ann.id.toString(), false)
.addField(getMessage("announcement", "con.field.time", settings), condensedTime(ann), true)
.addField(getMessage("announcement", "con.field.enabled", settings), "${ann.enabled}", true)
.footer(getMessage("announcement", "con.footer", settings, ann.type.name, ann.modifier.name), null)
if (ann.type == AnnouncementType.COLOR)
builder.color(ann.eventColor.asColor())
else
builder.color(GlobalVal.discalColor)
builder.build()
}
}
fun view(ann: Announcement, guild: Guild): Mono<EmbedCreateSpec> {
val channelMono = guild
.getChannelById(Snowflake.of(ann.announcementChannelId))
.map(GuildChannel::getName)
return Mono.zip(guild.getSettings(), channelMono).map(TupleUtils.function { settings, channel ->
val builder = defaultBuilder(guild, settings)
.title(getMessage("announcement", "view.title", settings))
.addField(getMessage("announcement", "view.field.type", settings), ann.type.name, true)
.addField(getMessage("announcement", "view.field.modifier", settings), ann.modifier.name, true)
.addField(getMessage("announcement", "view.field.channel", settings), channel, false)
.addField(getMessage("announcement", "view.field.hours", settings), "${ann.hoursBefore}", true)
.addField(getMessage("announcement", "view.field.minutes", settings), "${ann.minutesBefore}", true)
if (ann.info.isNotBlank() && !ann.info.equals("None", true)) {
builder.addField(getMessage("announcement", "view.field.info", settings), ann.info.toMarkdown().embedFieldSafe(), false)
}
builder.addField(getMessage("announcement", "view.field.calendar", settings), "${ann.calendarNumber}", true)
if (ann.type == AnnouncementType.RECUR || ann.type == AnnouncementType.SPECIFIC)
builder.addField(getMessage("announcement", "view.field.event", settings), ann.eventId, true)
if (ann.type == AnnouncementType.COLOR) {
builder.color(ann.eventColor.asColor())
builder.addField(getMessage("announcement", "view.field.color", settings), ann.eventColor.name, true)
} else
builder.color(GlobalVal.discalColor)
builder.addField(getMessage("announcement", "view.field.id", settings), ann.id.toString(), false)
.addField(getMessage("announcement", "view.field.enabled", settings), "${ann.enabled}", true)
.addField(getMessage("announcement", "view.field.publish", settings), "${ann.publish}", true)
.build()
})
}
fun pre(guild: Guild, ann: Announcement, settings: GuildSettings): Mono<EmbedCreateSpec> {
val channelMono = if (ann.announcementChannelId == "N/a") Mono.just(getCommonMsg("embed.unset", settings))
else guild.getChannelById(Snowflake.of(ann.announcementChannelId)).map(GuildChannel::getName)
return channelMono.map { channel ->
val builder = defaultBuilder(guild, settings)
.title(getMessage("announcement", "wizard.title", settings))
.footer(getMessage("announcement", "wizard.footer", settings), null)
.color(ann.eventColor.asColor())
builder.addField(getMessage("announcement", "wizard.field.type", settings), ann.type.name, true)
builder.addField(getMessage("announcement", "wizard.field.modifier", settings), ann.modifier.name, true)
if (ann.type == AnnouncementType.COLOR) {
if (ann.eventColor == EventColor.NONE) builder.addField(
getMessage("announcement", "wizard.field.color", settings),
getCommonMsg("embed.unset", settings),
false
) else builder.addField(
getMessage("announcement", "wizard.field.color", settings),
ann.eventColor.name,
false
)
}
if (ann.type == AnnouncementType.SPECIFIC || ann.type == AnnouncementType.RECUR) {
if (ann.eventId == "N/a") builder.addField(
getMessage("announcement", "wizard.field.event", settings),
getCommonMsg("embed.unset", settings),
false
) else builder.addField(
getMessage("announcement", "wizard.field.event", settings),
ann.eventId,
false
)
}
if (ann.info == "None") builder.addField(
getMessage("announcement", "wizard.field.info", settings),
if (ann.type == AnnouncementType.COLOR) {
if (ann.eventColor == EventColor.NONE) builder.addField(
getMessage("announcement", "wizard.field.color", settings),
getCommonMsg("embed.unset", settings),
false
) else builder.addField(
getMessage("announcement", "wizard.field.info", settings),
ann.info.embedFieldSafe().toMarkdown(),
getMessage("announcement", "wizard.field.color", settings),
ann.eventColor.name,
false
)
}
builder.addField(getMessage("announcement", "wizard.field.channel", settings), channel, true)
builder.addField(getMessage("announcement", "wizard.field.minutes", settings), "${ann.minutesBefore}", true)
builder.addField(getMessage("announcement", "wizard.field.hours", settings), "${ann.hoursBefore}", true)
if (ann.editing) builder.addField(getMessage("announcement", "wizard.field.id", settings), ann.id, false)
else builder.addField(
getMessage("announcement", "wizard.field.id", settings),
if (ann.type == AnnouncementType.SPECIFIC || ann.type == AnnouncementType.RECUR) {
if (ann.eventId == "N/a") builder.addField(
getMessage("announcement", "wizard.field.event", settings),
getCommonMsg("embed.unset", settings),
false
) else builder.addField(
getMessage("announcement", "wizard.field.event", settings),
ann.eventId,
false
)
builder.addField(getMessage("announcement", "wizard.field.publish", settings), "${ann.publish}", true)
builder.addField(getMessage("announcement", "wizard.field.enabled", settings), "${ann.enabled}", true)
builder.addField(getMessage("announcement", "wizard.field.calendar", settings), "${ann.calendarNumber}", true)
val warnings = ann.generateWarnings(settings)
if (warnings.isNotEmpty()) {
val warnText = "```fix\n${warnings.joinToString("\n")}\n```"
builder.addField(getMessage("announcement", "wizard.field.warnings", settings), warnText, false)
}
builder.build()
}
if (ann.info == "None") builder.addField(
getMessage("announcement", "wizard.field.info", settings),
getCommonMsg("embed.unset", settings),
false
) else builder.addField(
getMessage("announcement", "wizard.field.info", settings),
ann.info.embedFieldSafe().toMarkdown(),
false
)
if (ann.announcementChannelId == "N/a") builder.addField(
getMessage("announcement", "wizard.field.channel", settings),
getCommonMsg("embed.unset", settings),
false
) else builder.addField(
getMessage("announcement", "wizard.field.channel", settings),
"<#${ann.announcementChannelId}>",
false
)
builder.addField(getMessage("announcement", "wizard.field.minutes", settings), "${ann.minutesBefore}", true)
builder.addField(getMessage("announcement", "wizard.field.hours", settings), "${ann.hoursBefore}", true)
if (ann.editing) builder.addField(getMessage("announcement", "wizard.field.id", settings), ann.id, false)
else builder.addField(
getMessage("announcement", "wizard.field.id", settings),
getCommonMsg("embed.unset", settings),
false
)
builder.addField(getMessage("announcement", "wizard.field.publish", settings), "${ann.publish}", true)
builder.addField(getMessage("announcement", "wizard.field.enabled", settings), "${ann.enabled}", true)
builder.addField(getMessage("announcement", "wizard.field.calendar", settings), "${ann.calendarNumber}", true)
val warnings = ann.generateWarnings(settings)
if (warnings.isNotEmpty()) {
val warnText = "```fix\n${warnings.joinToString("\n")}\n```"
builder.addField(getMessage("announcement", "wizard.field.warnings", settings), warnText, false)
}
return builder.build()
}
private fun condensedTime(a: Announcement): String = "${a.hoursBefore}H${a.minutesBefore}m"
@@ -94,7 +94,7 @@ class AnnouncementService : ApplicationRunner {
.filterWhen { isInRange(announcement, it) }
.flatMap { sendAnnouncement(guild, announcement, it) }
// Delete specific announcement after posted
.flatMap { DatabaseManager.deleteAnnouncement(announcement.id.toString()) }
.flatMap { DatabaseManager.deleteAnnouncement(announcement.id) }
.then()
}
UNIVERSAL -> {
@@ -147,7 +147,7 @@ class AnnouncementService : ApplicationRunner {
if (difference < 0) {
//event past, delete if specific type
if (announcement.type == SPECIFIC) {
return DatabaseManager.deleteAnnouncement(announcement.id.toString())
return DatabaseManager.deleteAnnouncement(announcement.id)
.thenReturn(false)
}
return Mono.just(false)
@@ -180,7 +180,7 @@ class AnnouncementService : ApplicationRunner {
Mono.just(it)
.filter(HttpResponseStatus.NOT_FOUND::equals)
// Channel announcement should post to was deleted
.flatMap { DatabaseManager.deleteAnnouncement(announcement.id.toString()) }
.flatMap { DatabaseManager.deleteAnnouncement(announcement.id) }
.then(Mono.empty())
}
}