mirror of
https://github.com/DreamExposure/DisCal-Discord-Bot.git
synced 2026-02-08 04:19:06 -06:00
Convert !time to slash command, /time [calNumber] respectively
This commit is contained in:
@@ -22,11 +22,6 @@ public class CalendarMessageFormatter {
|
||||
return BotSettings.BASE_URL.get() + "/embed/" + guildId.asString() + "/calendar/1";
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static String getCalendarLink(final Snowflake guildId, final int calNumber) {
|
||||
return BotSettings.BASE_URL.get() + "/embed/" + guildId.asString() + "/calendar/" + calNumber;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static Mono<EmbedCreateSpec> getCalendarLinkEmbed(final Calendar cal, final GuildSettings settings) {
|
||||
return DisCalClient.getClient().getGuildById(settings.getGuildID()).map(g -> {
|
||||
@@ -55,33 +50,6 @@ public class CalendarMessageFormatter {
|
||||
});
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static Mono<EmbedCreateSpec> getCalendarLinkEmbed(final Calendar cal, final int calNum, final GuildSettings settings) {
|
||||
return DisCalClient.getClient().getGuildById(settings.getGuildID()).map(g -> {
|
||||
var builder = EmbedCreateSpec.builder();
|
||||
|
||||
if (settings.getBranded())
|
||||
builder.author(g.getName(), BotSettings.BASE_URL.get(),
|
||||
g.getIconUrl(Image.Format.PNG).orElse(GlobalVal.getIconUrl()));
|
||||
else
|
||||
builder.author("DisCal", BotSettings.BASE_URL.get(), GlobalVal.getIconUrl());
|
||||
|
||||
builder.title(Messages.getMessage("Embed.Calendar.Link.Title", settings));
|
||||
|
||||
if (cal.getSummary() != null)
|
||||
builder.addField(Messages.getMessage("Embed.Calendar.Link.Summary", settings), cal.getSummary(), true);
|
||||
|
||||
if (cal.getDescription() != null)
|
||||
builder.addField(Messages.getMessage("Embed.Calendar.Link.Description", settings), cal.getDescription(), true);
|
||||
|
||||
builder.addField(Messages.getMessage("Embed.Calendar.Link.TimeZone", settings), cal.getTimeZone(), false);
|
||||
builder.url(CalendarMessageFormatter.getCalendarLink(settings.getGuildID(), calNum));
|
||||
builder.footer(Messages.getMessage("Embed.Calendar.Link.CalendarId", "%id%", cal.getId(), settings), null);
|
||||
builder.color(GlobalVal.getDiscalColor());
|
||||
|
||||
return builder.build();
|
||||
});
|
||||
}
|
||||
|
||||
public static Mono<EmbedCreateSpec> getPreCalendarEmbed(final PreCalendar calendar, final GuildSettings settings) {
|
||||
return DisCalClient.getClient().getGuildById(settings.getGuildID()).map(g -> {
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
package org.dreamexposure.discal.client.module.command;
|
||||
|
||||
import discord4j.core.event.domain.message.MessageCreateEvent;
|
||||
import discord4j.core.spec.EmbedCreateSpec;
|
||||
import discord4j.rest.util.Image;
|
||||
import org.dreamexposure.discal.client.message.CalendarMessageFormatter;
|
||||
import org.dreamexposure.discal.client.message.Messages;
|
||||
import org.dreamexposure.discal.core.database.DatabaseManager;
|
||||
import org.dreamexposure.discal.core.object.BotSettings;
|
||||
import org.dreamexposure.discal.core.object.GuildSettings;
|
||||
import org.dreamexposure.discal.core.object.command.CommandInfo;
|
||||
import org.dreamexposure.discal.core.utils.GlobalVal;
|
||||
import org.dreamexposure.discal.core.wrapper.google.CalendarWrapper;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by Nova Fox on 6/16/17.
|
||||
* Website: www.cloudcraftgaming.com
|
||||
* For Project: DisCal
|
||||
*/
|
||||
public class TimeCommand implements Command {
|
||||
|
||||
/**
|
||||
* Gets the command this Object is responsible for.
|
||||
*
|
||||
* @return The command this Object is responsible for.
|
||||
*/
|
||||
@Override
|
||||
public String getCommand() {
|
||||
return "time";
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the short aliases of the command this object is responsible for.
|
||||
* <br>
|
||||
* This will return an empty ArrayList if none are present
|
||||
*
|
||||
* @return The aliases of the command.
|
||||
*/
|
||||
@Override
|
||||
public ArrayList<String> getAliases() {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the info on the command (not sub command) to be used in help menus.
|
||||
*
|
||||
* @return The command info.
|
||||
*/
|
||||
@Override
|
||||
public CommandInfo getCommandInfo() {
|
||||
return new CommandInfo(
|
||||
"time",
|
||||
"Displays the current time for the calendar in its respective TimeZone.",
|
||||
"!time"
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Issues the command this Object is responsible for.
|
||||
*
|
||||
* @param args The command arguments.
|
||||
* @param event The event received.
|
||||
* @param settings The guild settings.
|
||||
* @return {@code true} if successful, else {@code false}.
|
||||
*/
|
||||
@Override
|
||||
public Mono<Void> issueCommand(final String[] args, final MessageCreateEvent event, final GuildSettings settings) {
|
||||
return this.calendarTime(event, settings);
|
||||
}
|
||||
|
||||
//TODO: Support multiple calendars
|
||||
private Mono<Void> calendarTime(final MessageCreateEvent event, final GuildSettings settings) {
|
||||
return DatabaseManager.INSTANCE.getMainCalendar(settings.getGuildID())
|
||||
.flatMap(calData -> CalendarWrapper.INSTANCE.getCalendar(calData).flatMap(cal -> {
|
||||
final LocalDateTime ldt = LocalDateTime.now(ZoneId.of(cal.getTimeZone()));
|
||||
|
||||
DateTimeFormatter fmt;
|
||||
if (settings.getTwelveHour()) fmt = DateTimeFormatter.ofPattern("yyyy/MM/dd hh:mm:ss a");
|
||||
else fmt = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
|
||||
|
||||
|
||||
final String correctTime = fmt.format(ldt);
|
||||
|
||||
return event.getGuild().map(guild -> {
|
||||
var builder = EmbedCreateSpec.builder();
|
||||
if (settings.getBranded()) {
|
||||
builder.author(guild.getName(), BotSettings.BASE_URL.get(),
|
||||
guild.getIconUrl(Image.Format.PNG).orElse(GlobalVal.getIconUrl()));
|
||||
} else {
|
||||
builder.author("DisCal", BotSettings.BASE_URL.get(),
|
||||
GlobalVal.getIconUrl());
|
||||
}
|
||||
|
||||
builder.title(Messages.getMessage("Embed.Time.Title", settings));
|
||||
|
||||
builder.addField(Messages.getMessage("Embed.Time.Time", settings), correctTime, false);
|
||||
|
||||
builder.addField(Messages.getMessage("Embed.Time.TimeZone", settings), cal.getTimeZone(), false);
|
||||
|
||||
builder.footer(Messages.getMessage("Embed.Time.Footer", settings), null);
|
||||
builder.url(CalendarMessageFormatter.getCalendarLink(settings.getGuildID(),
|
||||
calData.getCalendarNumber()));
|
||||
|
||||
builder.color(GlobalVal.getDiscalColor());
|
||||
|
||||
return builder.build();
|
||||
}).flatMap(embed -> Messages.sendMessage(embed, event));
|
||||
}))
|
||||
.switchIfEmpty(Messages.sendMessage(
|
||||
Messages.getMessage("Creator.Calendar.NoCalendar", settings), event))
|
||||
.then();
|
||||
}
|
||||
}
|
||||
@@ -66,7 +66,6 @@ class DisCalClient {
|
||||
CommandExecutor.registerCommand(DisCalCommand())
|
||||
CommandExecutor.registerCommand(CalendarCommand())
|
||||
CommandExecutor.registerCommand(AddCalendarCommand())
|
||||
CommandExecutor.registerCommand(TimeCommand())
|
||||
CommandExecutor.registerCommand(EventListCommand())
|
||||
CommandExecutor.registerCommand(EventCommand())
|
||||
CommandExecutor.registerCommand(RsvpCommand())
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package org.dreamexposure.discal.client.commands
|
||||
|
||||
import discord4j.core.`object`.command.ApplicationCommandInteractionOptionValue
|
||||
import discord4j.core.event.domain.interaction.SlashCommandEvent
|
||||
import org.dreamexposure.discal.client.message.Responder
|
||||
import org.dreamexposure.discal.client.message.embed.CalendarEmbed
|
||||
import org.dreamexposure.discal.core.`object`.GuildSettings
|
||||
import org.springframework.stereotype.Component
|
||||
import reactor.core.publisher.Mono
|
||||
|
||||
@Component
|
||||
class TimeCommand : SlashCommand {
|
||||
override val name = "time"
|
||||
override val ephemeral = true
|
||||
|
||||
override fun handle(event: SlashCommandEvent, settings: GuildSettings): Mono<Void> {
|
||||
return Mono.justOrEmpty(event.getOption("number"))
|
||||
.flatMap { Mono.justOrEmpty(it.value) }
|
||||
.map(ApplicationCommandInteractionOptionValue::asLong)
|
||||
.map(Long::toInt)
|
||||
.defaultIfEmpty(1)
|
||||
.flatMap { calNumber ->
|
||||
event.interaction.guild.flatMap { guild ->
|
||||
CalendarEmbed.getTimeEmbed(guild, settings, calNumber).flatMap {
|
||||
Responder.followupEphemeral(event, it)
|
||||
}
|
||||
}.switchIfEmpty(
|
||||
//TODO: i18n
|
||||
Responder.followupEphemeral(event, "Calendar not found. Perhaps you should create a new one?")
|
||||
)
|
||||
}.then()
|
||||
}
|
||||
}
|
||||
@@ -24,8 +24,26 @@ object Responder {
|
||||
return sendFollowup(event, spec)
|
||||
}
|
||||
|
||||
fun followupEphemeral(event: InteractionCreateEvent, embed: EmbedCreateSpec): Mono<MessageData> {
|
||||
val spec = WebhookExecuteRequest.builder()
|
||||
.addEmbed(embed.asRequest())
|
||||
.build()
|
||||
|
||||
private fun sendFollowup(event: InteractionCreateEvent, request: WebhookExecuteRequest): Mono<MessageData> {
|
||||
return event.interactionResponse.createFollowupMessage(MultipartRequest.ofRequest(request))
|
||||
return sendFollowupEphemeral(event, spec)
|
||||
}
|
||||
|
||||
fun followupEphemeral(event: InteractionCreateEvent, message: String): Mono<MessageData> {
|
||||
val spec = WebhookExecuteRequest.builder()
|
||||
.content(message)
|
||||
.build()
|
||||
|
||||
return sendFollowupEphemeral(event, spec)
|
||||
}
|
||||
|
||||
|
||||
private fun sendFollowup(event: InteractionCreateEvent, request: WebhookExecuteRequest) =
|
||||
event.interactionResponse.createFollowupMessage(MultipartRequest.ofRequest(request))
|
||||
|
||||
private fun sendFollowupEphemeral(event: InteractionCreateEvent, request: WebhookExecuteRequest) =
|
||||
event.interactionResponse.createFollowupMessageEphemeral(MultipartRequest.ofRequest(request))
|
||||
}
|
||||
|
||||
@@ -10,6 +10,8 @@ import org.dreamexposure.discal.core.extensions.discord4j.getCalendar
|
||||
import org.dreamexposure.discal.core.utils.GlobalVal.discalColor
|
||||
import org.dreamexposure.discal.core.utils.GlobalVal.iconUrl
|
||||
import reactor.core.publisher.Mono
|
||||
import java.time.LocalDateTime
|
||||
import java.time.format.DateTimeFormatter
|
||||
|
||||
object CalendarEmbed {
|
||||
fun getLinkCalEmbed(guild: Guild, settings: GuildSettings, calNumber: Int): Mono<EmbedCreateSpec> {
|
||||
@@ -33,4 +35,36 @@ object CalendarEmbed {
|
||||
builder.build()
|
||||
}
|
||||
}
|
||||
|
||||
fun getTimeEmbed(guild: Guild, settings: GuildSettings, calNumber: Int): Mono<EmbedCreateSpec> {
|
||||
return guild.getCalendar(calNumber).map { cal ->
|
||||
val ldt = LocalDateTime.now(cal.timezone)
|
||||
|
||||
val fmt: DateTimeFormatter =
|
||||
if (settings.twelveHour)
|
||||
DateTimeFormatter.ofPattern("yyyy/MM/dd hh:mm:ss a")
|
||||
else
|
||||
DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")
|
||||
|
||||
|
||||
val correctTime = fmt.format(ldt)
|
||||
|
||||
val builder = EmbedCreateSpec.builder()
|
||||
|
||||
if (settings.branded)
|
||||
builder.author(guild.name, BotSettings.BASE_URL.get(), guild.getIconUrl(Image.Format.PNG).orElse(iconUrl))
|
||||
else
|
||||
builder.author("DisCal", BotSettings.BASE_URL.get(), iconUrl)
|
||||
|
||||
builder.title(Messages.getMessage("Embed.Time.Title", settings))
|
||||
builder.addField(Messages.getMessage("Embed.Time.Time", settings), correctTime, false)
|
||||
builder.addField(Messages.getMessage("Embed.Time.TimeZone", settings), cal.zoneName, false)
|
||||
builder.footer(Messages.getMessage("Embed.Time.Footer", settings), null)
|
||||
builder.url(cal.link)
|
||||
|
||||
builder.color(discalColor)
|
||||
|
||||
builder.build()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
13
core/src/main/resources/commands/time.json
Normal file
13
core/src/main/resources/commands/time.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "time",
|
||||
"description": "Displays the current time as seen by the calendar's timezone",
|
||||
"options": [
|
||||
{
|
||||
"name": "number",
|
||||
"type": 4,
|
||||
"description": "The number of the calendar you wish to use (default 1)",
|
||||
"required": false
|
||||
}
|
||||
],
|
||||
"default_permissions": true
|
||||
}
|
||||
Reference in New Issue
Block a user