// Path: src/com/vauff/maunzdiscord/objects/Await.java
// public class Await
// {
// 	private Snowflake id;
// 	private AbstractCommand command;
// 	private ChatInputInteractionEvent event;
// 
// 	/**
// 	 * @param id      An ID of a user who triggered the message or a message to be removed later on
// 	 * @param command The command with which to continue execution upon adding a reaction
// 	 * @param event   The ChatInputInteractionEvent that triggered the execution of {@link Await#command}
// 	 */
// 	public Await(Snowflake id, AbstractCommand command, ChatInputInteractionEvent event)
// 	{
// 		this.id = id;
// 		this.command = command;
// 		this.event = event;
// 	}
// 
// 	/**
// 	 * @param id      An ID of a user who triggered the message or a message to be removed later on
// 	 * @param command The command with which to continue execution upon adding a reaction
// 	 */
// 	public Await(Snowflake id, AbstractCommand command)
// 	{
// 		this(id, command, null);
// 	}
// 
// 	/**
// 	 * @return The ID of the user who triggered the message or of the message to be removed later on
// 	 */
// 	public Snowflake getID()
// 	{
// 		return id;
// 	}
// 
// 	/**
// 	 * @return The command with which to continue execution upon adding a reaction
// 	 */
// 	public AbstractCommand getCommand()
// 	{
// 		return command;
// 	}
// 
// 	/**
// 	 * @return The ChatInputInteractionEvent that triggered the execution of {@link Await#command}, only present if instance of {@link AbstractSlashCommand}
// 	 */
// 	public ChatInputInteractionEvent getInteractionEvent()
// 	{
// 		return event;
// 	}
// }


import com.vauff.maunzdiscord.objects.Await;
import discord4j.common.util.Snowflake;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.event.domain.message.ReactionAddEvent;
import discord4j.core.object.entity.Message;
import discord4j.core.object.entity.User;
import discord4j.core.object.entity.channel.MessageChannel;
package com.vauff.maunzdiscord.commands.templates;


public abstract class AbstractLegacyCommand<M extends MessageCreateEvent> extends AbstractCommand
{
	/**
	 * Executes this command
	 *
	 * @param event The event by which this command got triggered
	 * @throws Exception If an exception gets thrown by any implementing methods
	 */
	public abstract void exe(M event, MessageChannel channel, User author) throws Exception;

	/**
	 * Gets called when a reaction is added to a message defined prior in {@link AbstractLegacyCommand#waitForReaction(Snowflake, Snowflake)}
	 *
	 * @param event   The event holding information about the added reaction
	 * @param message The Message that was reacted to
	 */
	public void onReactionAdd(ReactionAddEvent event, Message message) throws Exception
	{
	}

	/**
	 * Sets up this command to await a reaction by the user who triggered this command
	 *
	 * @param messageID The message which should get reacted on
	 * @param userID    The user who triggered this command
	 */
	public final void waitForReaction(Snowflake messageID, Snowflake userID)
	{
// Path: src/com/vauff/maunzdiscord/objects/Await.java
// public class Await
// {
// 	private Snowflake id;
// 	private AbstractCommand command;
// 	private ChatInputInteractionEvent event;
// 
// 	/**
// 	 * @param id      An ID of a user who triggered the message or a message to be removed later on
// 	 * @param command The command with which to continue execution upon adding a reaction
// 	 * @param event   The ChatInputInteractionEvent that triggered the execution of {@link Await#command}
// 	 */
// 	public Await(Snowflake id, AbstractCommand command, ChatInputInteractionEvent event)
// 	{
// 		this.id = id;
// 		this.command = command;
// 		this.event = event;
// 	}
// 
// 	/**
// 	 * @param id      An ID of a user who triggered the message or a message to be removed later on
// 	 * @param command The command with which to continue execution upon adding a reaction
// 	 */
// 	public Await(Snowflake id, AbstractCommand command)
// 	{
// 		this(id, command, null);
// 	}
// 
// 	/**
// 	 * @return The ID of the user who triggered the message or of the message to be removed later on
// 	 */
// 	public Snowflake getID()
// 	{
// 		return id;
// 	}
// 
// 	/**
// 	 * @return The command with which to continue execution upon adding a reaction
// 	 */
// 	public AbstractCommand getCommand()
// 	{
// 		return command;
// 	}
// 
// 	/**
// 	 * @return The ChatInputInteractionEvent that triggered the execution of {@link Await#command}, only present if instance of {@link AbstractSlashCommand}
// 	 */
// 	public ChatInputInteractionEvent getInteractionEvent()
// 	{
// 		return event;
// 	}
// }


// Path: src/com/vauff/maunzdiscord/commands/templates/AbstractLegacyCommand.java
import com.vauff.maunzdiscord.objects.Await;
import discord4j.common.util.Snowflake;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.event.domain.message.ReactionAddEvent;
import discord4j.core.object.entity.Message;
import discord4j.core.object.entity.User;
import discord4j.core.object.entity.channel.MessageChannel;

package com.vauff.maunzdiscord.commands.templates;


public abstract class AbstractLegacyCommand<M extends MessageCreateEvent> extends AbstractCommand
{
	/**
	 * Executes this command
	 *
	 * @param event The event by which this command got triggered
	 * @throws Exception If an exception gets thrown by any implementing methods
	 */
	public abstract void exe(M event, MessageChannel channel, User author) throws Exception;

	/**
	 * Gets called when a reaction is added to a message defined prior in {@link AbstractLegacyCommand#waitForReaction(Snowflake, Snowflake)}
	 *
	 * @param event   The event holding information about the added reaction
	 * @param message The Message that was reacted to
	 */
	public void onReactionAdd(ReactionAddEvent event, Message message) throws Exception
	{
	}

	/**
	 * Sets up this command to await a reaction by the user who triggered this command
	 *
	 * @param messageID The message which should get reacted on
	 * @param userID    The user who triggered this command
	 */
	public final void waitForReaction(Snowflake messageID, Snowflake userID)
	{
		AWAITED.put(messageID, new Await(userID, this));