Add code for new announcement embeds

This commit is contained in:
NovaFox161
2021-08-16 17:07:44 -05:00
parent 9fca4e7b50
commit d5bbb3016c
6 changed files with 252 additions and 9 deletions

View File

@@ -0,0 +1,191 @@
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`.announcement.Announcement
import org.dreamexposure.discal.core.entities.Event
import org.dreamexposure.discal.core.enums.announcement.AnnouncementType
import org.dreamexposure.discal.core.extensions.asDiscordTimestamp
import org.dreamexposure.discal.core.extensions.discord4j.getSettings
import org.dreamexposure.discal.core.utils.GlobalVal
import reactor.core.publisher.Mono
import reactor.function.TupleUtils
object AnnouncementEmbed : EmbedMaker {
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))
if (event.name.isNotEmpty())
builder.addField(getMessage("announcement", "full.field.name", settings), event.name, false)
if (event.description.isNotEmpty())
builder.addField(getMessage("announcement", "full.field.desc", settings), event.description, false)
builder.addField(
getMessage("announcement", "full.field.start", settings),
event.start.asDiscordTimestamp(),
true
)
builder.addField(
getMessage("announcement", "full.field.end", settings),
event.end.asDiscordTimestamp(),
true
)
builder.addField(getMessage("announcement", "full.field.location", settings), event.location, false)
if (ann.info.isNotEmpty() || !ann.info.equals("None", true))
builder.addField(getMessage("announcement", "full.field.info", settings), ann.info, false)
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.isNotEmpty()) {
builder.image(event.image)
}
builder.footer(getMessage("announcement", "full.footer", settings, ann.announcementId.toString()), null)
builder.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))
if (event.name.isNotEmpty())
builder.addField(getMessage("announcement", "simple.field.name", settings), event.name, false)
if (event.description.isNotEmpty())
builder.addField(getMessage("announcement", "simple.field.desc", settings), event.description, false)
builder.addField(
getMessage("announcement", "simple.field.start", settings),
event.start.asDiscordTimestamp(),
true
)
builder.addField(getMessage("announcement", "simple.field.location", settings), event.location, false)
if (ann.info.isNotEmpty() || !ann.info.equals("None", true))
builder.addField(getMessage("announcement", "simple.field.info", settings), ann.info, false)
if (event.image.isNotEmpty()) {
builder.image(event.image)
}
builder.footer(getMessage("announcement", "simple.footer", settings, ann.announcementId.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.isNotEmpty())
builder.addField(getMessage("announcement", "event.field.name", settings), event.name, false)
if (event.description.isNotEmpty())
builder.addField(getMessage("announcement", "event.field.desc", settings), event.description, false)
builder.addField(
getMessage("announcement", "event.field.start", settings),
event.start.asDiscordTimestamp(),
true
)
builder.addField(
getMessage("announcement", "event.field.end", settings),
event.end.asDiscordTimestamp(),
true
)
builder.addField(getMessage("announcement", "event.field.location", settings), event.location, 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.isNotEmpty() || !ann.info.equals("None", true))
builder.addField(getMessage("announcement", "event.field.info", settings), ann.info, false)
if (event.image.isNotEmpty()) {
builder.image(event.image)
}
builder.footer(getMessage("announcement", "event.footer", settings, ann.announcementId.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.announcementId.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.isNotEmpty() || !ann.info.equals("None", true)) {
builder.addField(getMessage("announcement", "view.field.info", settings), ann.info, 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.announcementId.toString(), false)
.addField(getMessage("announcement", "view.field.enabled", settings), "${ann.enabled}", true)
.addField(getMessage("announcement", "view.field.publish", settings), "${ann.publish}", true)
.build()
})
}
private fun condensedTime(a: Announcement): String = "${a.hoursBefore}H${a.minutesBefore}m"
}

View File

@@ -4,7 +4,7 @@ import discord4j.core.`object`.entity.Guild
import discord4j.core.spec.EmbedCreateSpec
import org.dreamexposure.discal.core.`object`.GuildSettings
import org.dreamexposure.discal.core.entities.Event
import java.time.Instant
import org.dreamexposure.discal.core.extensions.asDiscordTimestamp
object EventEmbed : EmbedMaker {
fun getFull(guild: Guild, settings: GuildSettings, event: Event): EmbedCreateSpec {
@@ -18,8 +18,8 @@ object EventEmbed : EmbedMaker {
if (event.description.isNotEmpty())
builder.addField(getMessage("event", "full.field.desc", settings), event.description, false)
builder.addField(getMessage("event", "full.field.start", settings), timestamp(event.start), true)
builder.addField(getMessage("event", "full.field.end", settings), timestamp(event.end), true)
builder.addField(getMessage("event", "full.field.start", settings), event.start.asDiscordTimestamp(), true)
builder.addField(getMessage("event", "full.field.end", settings), event.end.asDiscordTimestamp(), true)
if (event.location.isNotEmpty())
builder.addField(getMessage("event", "full.field.location", settings), event.location, false)
@@ -41,7 +41,7 @@ object EventEmbed : EmbedMaker {
if (event.name.isNotEmpty())
builder.addField(getMessage("event", "con.field.name", settings), event.name, false)
builder.addField(getMessage("event", "con.field.start", settings), timestamp(event.start), true)
builder.addField(getMessage("event", "con.field.start", settings), event.start.asDiscordTimestamp(), true)
if (event.location.isNotEmpty())
builder.addField(getMessage("event", "con.field.location", settings), event.location, false)
@@ -51,7 +51,4 @@ object EventEmbed : EmbedMaker {
return builder.build()
}
private fun timestamp(time: Instant): String = "<t:${time.toEpochMilli() / 1000}:F>"
}

View File

@@ -0,0 +1,5 @@
package org.dreamexposure.discal.core.extensions
import java.time.Instant
fun Instant.asDiscordTimestamp() = "<t:${this.toEpochMilli() / 1000}:F>"

View File

@@ -52,6 +52,7 @@ data class Announcement(
var enabled = true
@Deprecated(message = "Info only support is dropping in favor of a guild-wide announcement-style")
@SerialName("info_only")
var infoOnly = false
var publish = false

View File

@@ -0,0 +1,49 @@
full.title=!~Event Announcement~!
full.field.name=Name
full.field.desc=Description
full.field.start=Start (Local)
full.field.end=End (Local)
full.field.location=Location
full.field.info=Extra Info
full.field.calendar=Calendar
full.field.event=Event ID
full.footer=Announcement ID: {0}
simple.title=!~Event Announcement~!
simple.field.name=Name
simple.field.desc=Description
simple.field.start=Start (Local)
simple.field.location=Location
simple.field.info=Extra Info
simple.footer=ID: {0}
event.title=!~Upcoming Event~!
event.field.name=Name
event.field.desc=Description
event.field.start=Start (Local)
event.field.end=End (Local)
event.field.location=Location
event.field.calendar=Calendar
event.field.event=Event ID
event.field.info=Extra Info
event.footer=Announcement ID: {0}
con.title=Condensed Announcement Info
con.field.id=Announcement ID
con.field.time=Time Before
con.field.enabled=Enabled
con.footer=Type {0} | Modifier {1}
view.title=Announcement Info
view.field.type=Type
view.field.modifier=Modifier
view.field.channel=Channel
view.field.hours=Hours
view.field.minutes=Minutes
view.field.info=Extra Info
view.field.calendar=Calendar
view.field.event=Event ID
view.field.color=Color
view.field.id=ID
view.field.enabled=Enabled
view.field.publish=Publishable

View File

@@ -1,8 +1,8 @@
full.title=Event Info
full.field.name=Name
full.field.desc=Description
full.field.start=Event Start (Local)
full.field.end=Event End (Local)
full.field.start=Start (Local)
full.field.end=End (Local)
full.field.location=Location
full.field.cal=Calendar
full.footer=Event ID: {0}