mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-03-27 14:23:56 +00:00
added command to set emotes to emote keys
added emote support to command parameters
This commit is contained in:
@@ -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.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.models.UserInitiatedServerContext;
|
import dev.sheldan.abstracto.core.models.UserInitiatedServerContext;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
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.Member;
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
import net.dv8tion.jda.api.entities.TextChannel;
|
import net.dv8tion.jda.api.entities.TextChannel;
|
||||||
@@ -24,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class CommandReceivedHandler extends ListenerAdapter {
|
public class CommandReceivedHandler extends ListenerAdapter {
|
||||||
@@ -63,6 +65,9 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
|||||||
Command foundCommand = null;
|
Command foundCommand = null;
|
||||||
try {
|
try {
|
||||||
List<String> parameters = Arrays.asList(event.getMessage().getContentStripped().split(" "));
|
List<String> parameters = Arrays.asList(event.getMessage().getContentStripped().split(" "));
|
||||||
|
parameters = parameters.stream().filter(s -> {
|
||||||
|
return !s.equals("");
|
||||||
|
}).collect(Collectors.toList());
|
||||||
UnParsedCommandParameter unparsedParameter = new UnParsedCommandParameter();
|
UnParsedCommandParameter unparsedParameter = new UnParsedCommandParameter();
|
||||||
unparsedParameter.setParameters(parameters.subList(1, parameters.size()));
|
unparsedParameter.setParameters(parameters.subList(1, parameters.size()));
|
||||||
String withoutPrefix = parameters.get(0).substring(1);
|
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){
|
public Parameters getParsedParameters(UnParsedCommandParameter unParsedCommandParameter, Command command, Message message){
|
||||||
List<Object> parsedParameters = new ArrayList<>();
|
List<Object> parsedParameters = new ArrayList<>();
|
||||||
Iterator<TextChannel> channelIterator = message.getMentionedChannels().iterator();
|
Iterator<TextChannel> channelIterator = message.getMentionedChannels().iterator();
|
||||||
|
Iterator<Emote> emoteIterator = message.getEmotes().iterator();
|
||||||
Iterator<Member> memberIterator = message.getMentionedMembers().iterator();
|
Iterator<Member> memberIterator = message.getMentionedMembers().iterator();
|
||||||
for (int i = 0; i < unParsedCommandParameter.getParameters().size(); i++) {
|
for (int i = 0; i < unParsedCommandParameter.getParameters().size(); i++) {
|
||||||
Parameter param = command.getConfiguration().getParameters().get(i);
|
Parameter param = command.getConfiguration().getParameters().get(i);
|
||||||
@@ -111,12 +117,20 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
|||||||
parsedParameters.add(Integer.parseInt(value));
|
parsedParameters.add(Integer.parseInt(value));
|
||||||
} else if(param.getType().equals(Double.class)){
|
} else if(param.getType().equals(Double.class)){
|
||||||
parsedParameters.add(Double.parseDouble(value));
|
parsedParameters.add(Double.parseDouble(value));
|
||||||
} else if(param.getType().equals(Long.class)){
|
} else if(param.getType().equals(Long.class)){
|
||||||
parsedParameters.add(Long.parseLong(value));
|
parsedParameters.add(Long.parseLong(value));
|
||||||
} else if(param.getType().equals(TextChannel.class)){
|
} else if(param.getType().equals(TextChannel.class)){
|
||||||
parsedParameters.add(channelIterator.next());
|
parsedParameters.add(channelIterator.next());
|
||||||
} else if(param.getType().equals(Member.class)) {
|
} else if(param.getType().equals(Member.class)) {
|
||||||
parsedParameters.add(memberIterator.next());
|
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 {
|
} else {
|
||||||
parsedParameters.add(value);
|
parsedParameters.add(value);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,9 +7,11 @@ import org.springframework.stereotype.Component;
|
|||||||
@Component
|
@Component
|
||||||
public class UtilityModule implements Module {
|
public class UtilityModule implements Module {
|
||||||
|
|
||||||
|
public static final String UTILITY = "utility";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ModuleInfo getInfo() {
|
public ModuleInfo getInfo() {
|
||||||
return ModuleInfo.builder().name("utility").description("General utilities").build();
|
return ModuleInfo.builder().name(UTILITY).description("General utilities").build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -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.AEmote;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.repository.EmoteRepository;
|
import dev.sheldan.abstracto.repository.EmoteRepository;
|
||||||
|
import net.dv8tion.jda.api.entities.Emote;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -28,6 +29,37 @@ public class EmoteManagementServiceBean implements EmoteManagementService {
|
|||||||
return repository.findAEmoteByNameAndServerRef(name, server);
|
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
|
@Override
|
||||||
public AEmote createCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated) {
|
public AEmote createCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated) {
|
||||||
AEmote emote = AEmote.builder()
|
AEmote emote = AEmote.builder()
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package dev.sheldan.abstracto.listener;
|
package dev.sheldan.abstracto.listener;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.core.models.database.PostTarget;
|
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.service.PostTargetService;
|
||||||
import dev.sheldan.abstracto.core.management.ServerManagementService;
|
import dev.sheldan.abstracto.core.management.ServerManagementService;
|
||||||
import dev.sheldan.abstracto.templating.TemplateService;
|
import dev.sheldan.abstracto.templating.TemplateService;
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
package dev.sheldan.abstracto.core.management;
|
package dev.sheldan.abstracto.core.management;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.core.models.database.AEmote;
|
import dev.sheldan.abstracto.core.models.database.AEmote;
|
||||||
|
import net.dv8tion.jda.api.entities.Emote;
|
||||||
|
|
||||||
public interface EmoteManagementService {
|
public interface EmoteManagementService {
|
||||||
AEmote loadEmote(Long id);
|
AEmote loadEmote(Long id);
|
||||||
AEmote loadEmoteByName(String name, Long serverId);
|
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 createCustomEmote(String name, String emoteKey, Long emoteId, Boolean animated);
|
||||||
AEmote createDefaultEmote(String name, String emoteKey);
|
AEmote createDefaultEmote(String name, String emoteKey);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,15 +20,19 @@ public class AEmote {
|
|||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
@Column
|
@Column
|
||||||
|
@Setter
|
||||||
private String emoteKey;
|
private String emoteKey;
|
||||||
|
|
||||||
@Column
|
@Column
|
||||||
|
@Setter
|
||||||
private Long emoteId;
|
private Long emoteId;
|
||||||
|
|
||||||
@Column
|
@Column
|
||||||
|
@Setter
|
||||||
private Boolean animated;
|
private Boolean animated;
|
||||||
|
|
||||||
@Column
|
@Column
|
||||||
|
@Setter
|
||||||
private Boolean custom;
|
private Boolean custom;
|
||||||
|
|
||||||
@ManyToOne(fetch = FetchType.LAZY)
|
@ManyToOne(fetch = FetchType.LAZY)
|
||||||
|
|||||||
Reference in New Issue
Block a user