mirror of
https://github.com/DreamExposure/DisCal-Discord-Bot.git
synced 2026-02-06 19:39:07 -06:00
Add code for new announcement embeds
This commit is contained in:
@@ -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"
|
||||
}
|
||||
@@ -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>"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package org.dreamexposure.discal.core.extensions
|
||||
|
||||
import java.time.Instant
|
||||
|
||||
fun Instant.asDiscordTimestamp() = "<t:${this.toEpochMilli() / 1000}:F>"
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user