AltitudeBot/src/main/java/com/alttd/commandManager/commands/PollCommand/SubCommandAdd.java
2022-09-14 21:36:43 +02:00

97 lines
3.6 KiB
Java

package com.alttd.commandManager.commands.PollCommand;
import com.alttd.commandManager.DiscordCommand;
import com.alttd.commandManager.SubCommand;
import com.alttd.commandManager.SubCommandGroup;
import com.alttd.templates.Parser;
import com.alttd.templates.Template;
import com.alttd.util.Logger;
import com.alttd.util.OptionMappingParsing;
import com.alttd.util.Util;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.channel.ChannelType;
import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel;
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.interactions.InteractionHook;
import java.awt.*;
public class SubCommandAdd extends SubCommand {
protected SubCommandAdd(SubCommandGroup parentGroup, DiscordCommand parent) {
super(parentGroup, parent);
}
@Override
public String getName() {
return "add";
}
@Override
public void execute(SlashCommandInteractionEvent event) {
GuildMessageChannel channel = OptionMappingParsing.getGuildChannel("channel", event, getName());
Member member = event.getMember();
if (member == null) {
event.replyEmbeds(Util.genericErrorEmbed("Error", "Unable to find valid guild member."))
.setEphemeral(true)
.queue();
return;
}
if (!Util.validateGuildMessageChannel(event.getInteraction(), channel, ChannelType.TEXT, member))
return;
String title = OptionMappingParsing.getString("title", event, getName());
if (title == null) {
event.replyEmbeds(Util.genericErrorEmbed("Error", "Unable to retrieve title."))
.setEphemeral(true)
.queue();
return;
}
if (title.length() > 256) {
event.replyEmbeds(Util.genericErrorEmbed("Error", "Title is too long, max 256 characters."))
.setEphemeral(true)
.queue();
return;
}
event.replyEmbeds(Util.genericWaitingEmbed("Creating Poll...", null))
.setEphemeral(true)
.queue(result -> createPoll(channel, title, result));
}
@Override
public void suggest(CommandAutoCompleteInteractionEvent event) {
}
private void createPoll(GuildMessageChannel channel, String title, InteractionHook hook) {
channel.sendMessageEmbeds(new EmbedBuilder()
.setTitle(title)
.setColor(Color.RED)
.build()
).queue(message -> createdPoll(message, hook), throwable -> failedCreatingPoll(throwable, hook));
}
private void createdPoll(Message message, InteractionHook hook) {
hook.editOriginalEmbeds(Util.genericSuccessEmbed("Created Poll!",
Parser.parse("Created a poll with the message id: `<message_id>`. " +
"When you're ready don't forget to open the poll!",
Template.of("message_id", message.getId()))))
.queue();
}
private void failedCreatingPoll(Throwable throwable, InteractionHook hook) {
Logger.warning(throwable.getMessage());
hook.editOriginalEmbeds(Util.genericErrorEmbed("Failed to create Poll",
"Unable to create poll, please contact an Admin."))
.queue();
}
@Override
public String getHelpMessage() {
return null;
}
}