added command to set emotes to emote keys

added emote support to command parameters
This commit is contained in:
Sheldan
2020-03-21 15:51:25 +01:00
parent df0c156743
commit f416ac5d6b
7 changed files with 107 additions and 3 deletions

View File

@@ -12,6 +12,7 @@ import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.UserInitiatedServerContext;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import net.dv8tion.jda.api.entities.Emote;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.TextChannel;
@@ -24,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Nonnull;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class CommandReceivedHandler extends ListenerAdapter {
@@ -63,6 +65,9 @@ public class CommandReceivedHandler extends ListenerAdapter {
Command foundCommand = null;
try {
List<String> parameters = Arrays.asList(event.getMessage().getContentStripped().split(" "));
parameters = parameters.stream().filter(s -> {
return !s.equals("");
}).collect(Collectors.toList());
UnParsedCommandParameter unparsedParameter = new UnParsedCommandParameter();
unparsedParameter.setParameters(parameters.subList(1, parameters.size()));
String withoutPrefix = parameters.get(0).substring(1);
@@ -102,6 +107,7 @@ public class CommandReceivedHandler extends ListenerAdapter {
public Parameters getParsedParameters(UnParsedCommandParameter unParsedCommandParameter, Command command, Message message){
List<Object> parsedParameters = new ArrayList<>();
Iterator<TextChannel> channelIterator = message.getMentionedChannels().iterator();
Iterator<Emote> emoteIterator = message.getEmotes().iterator();
Iterator<Member> memberIterator = message.getMentionedMembers().iterator();
for (int i = 0; i < unParsedCommandParameter.getParameters().size(); i++) {
Parameter param = command.getConfiguration().getParameters().get(i);
@@ -111,12 +117,20 @@ public class CommandReceivedHandler extends ListenerAdapter {
parsedParameters.add(Integer.parseInt(value));
} else if(param.getType().equals(Double.class)){
parsedParameters.add(Double.parseDouble(value));
} else if(param.getType().equals(Long.class)){
} else if(param.getType().equals(Long.class)){
parsedParameters.add(Long.parseLong(value));
} else if(param.getType().equals(TextChannel.class)){
parsedParameters.add(channelIterator.next());
} else if(param.getType().equals(Member.class)) {
parsedParameters.add(memberIterator.next());
} else if(param.getType().equals(Emote.class)) {
// TODO maybe rework, this fails if two emotes are needed, and the second one is an emote, the first one a default one
// the second one shadows the first one, and there are too little parameters to go of
if(emoteIterator.hasNext()) {
parsedParameters.add(emoteIterator.next());
} else {
parsedParameters.add(value);
}
} else {
parsedParameters.add(value);
}

View File

@@ -0,0 +1,49 @@
package dev.sheldan.abstracto.core.commands.utility;
import dev.sheldan.abstracto.command.Command;
import dev.sheldan.abstracto.command.execution.CommandConfiguration;
import dev.sheldan.abstracto.command.execution.CommandContext;
import dev.sheldan.abstracto.command.execution.Parameter;
import dev.sheldan.abstracto.command.execution.Result;
import dev.sheldan.abstracto.core.management.EmoteManagementService;
import net.dv8tion.jda.api.entities.Emote;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
@Component
public class SetEmote implements Command {
@Autowired
private EmoteManagementService emoteManagementService;
@Override
public Result execute(CommandContext commandContext) {
String emoteKey = (String) commandContext.getParameters().getParameters().get(0);
Object o = commandContext.getParameters().getParameters().get(1);
if(o instanceof String) {
String emote = (String) o;
emoteManagementService.setEmoteToDefaultEmote(emoteKey, emote, commandContext.getGuild().getIdLong());
} else {
Emote emote = (Emote) o;
emoteManagementService.setEmoteToCustomEmote(emoteKey, emote, commandContext.getGuild().getIdLong());
}
return Result.fromSuccess();
}
@Override
public CommandConfiguration getConfiguration() {
Parameter emoteKey = Parameter.builder().name("emoteKey").type(String.class).description("The internal key of the emote").build();
Parameter emote = Parameter.builder().name("emote").type(net.dv8tion.jda.api.entities.Emote.class).description("The emote to be used").build();
List<Parameter> parameters = Arrays.asList(emoteKey, emote);
return CommandConfiguration.builder()
.name("setEmote")
.module(UtilityModule.UTILITY)
.parameters(parameters)
.description("Configures the emote key pointing towards a defined emote")
.causesReaction(true)
.build();
}
}

View File

@@ -7,9 +7,11 @@ import org.springframework.stereotype.Component;
@Component
public class UtilityModule implements Module {
public static final String UTILITY = "utility";
@Override
public ModuleInfo getInfo() {
return ModuleInfo.builder().name("utility").description("General utilities").build();
return ModuleInfo.builder().name(UTILITY).description("General utilities").build();
}
@Override

View File

@@ -5,6 +5,7 @@ import dev.sheldan.abstracto.core.management.ServerManagementService;
import dev.sheldan.abstracto.core.models.database.AEmote;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.repository.EmoteRepository;
import net.dv8tion.jda.api.entities.Emote;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -28,6 +29,37 @@ public class EmoteManagementServiceBean implements EmoteManagementService {
return repository.findAEmoteByNameAndServerRef(name, server);
}
@Override
public AEmote setEmoteToCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated, Long serverId) {
AEmote existing = loadEmoteByName(name, serverId);
existing.setEmoteKey(emoteKey);
existing.setEmoteId(emoteId);
existing.setAnimated(animated);
existing.setCustom(true);
repository.save(existing);
return existing;
}
@Override
public AEmote setEmoteToCustomEmote(String name, Emote emote, Long serverId) {
AEmote existing = loadEmoteByName(name, serverId);
existing.setCustom(true);
existing.setAnimated(emote.isAnimated());
existing.setEmoteId(emote.getIdLong());
existing.setEmoteKey(emote.getName());
repository.save(existing);
return existing;
}
@Override
public AEmote setEmoteToDefaultEmote(String name, String emoteKey, Long serverId) {
AEmote existing = loadEmoteByName(name, serverId);
existing.setEmoteKey(emoteKey);
existing.setCustom(false);
repository.save(existing);
return existing;
}
@Override
public AEmote createCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated) {
AEmote emote = AEmote.builder()

View File

@@ -1,7 +1,6 @@
package dev.sheldan.abstracto.listener;
import dev.sheldan.abstracto.core.models.database.PostTarget;
import dev.sheldan.abstracto.core.management.PostTargetManagement;
import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.core.management.ServerManagementService;
import dev.sheldan.abstracto.templating.TemplateService;

View File

@@ -1,10 +1,14 @@
package dev.sheldan.abstracto.core.management;
import dev.sheldan.abstracto.core.models.database.AEmote;
import net.dv8tion.jda.api.entities.Emote;
public interface EmoteManagementService {
AEmote loadEmote(Long id);
AEmote loadEmoteByName(String name, Long serverId);
AEmote setEmoteToCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated, Long serverId);
AEmote setEmoteToCustomEmote(String name, Emote emote, Long serverId);
AEmote setEmoteToDefaultEmote(String name, String emoteKey, Long serverId);
AEmote createCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated);
AEmote createDefaultEmote(String name, String emoteKey);
}

View File

@@ -20,15 +20,19 @@ public class AEmote {
private String name;
@Column
@Setter
private String emoteKey;
@Column
@Setter
private Long emoteId;
@Column
@Setter
private Boolean animated;
@Column
@Setter
private Boolean custom;
@ManyToOne(fetch = FetchType.LAZY)