mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-09 18:16:52 +00:00
[AB-54] adding various command parameter handlers
removing old parameter length validation
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
package dev.sheldan.abstracto.core.command;
|
||||
|
||||
public class CommandConstants {
|
||||
|
||||
private CommandConstants() {
|
||||
|
||||
}
|
||||
|
||||
public static final Integer CORE_HANDLER_PRIORITY = 50;
|
||||
public static final Integer CUSTOM_HANDLER_PRIORITY = 100;
|
||||
}
|
||||
@@ -6,37 +6,33 @@ import dev.sheldan.abstracto.core.command.config.ParameterValidator;
|
||||
import dev.sheldan.abstracto.core.command.config.Parameters;
|
||||
import dev.sheldan.abstracto.core.command.exception.CommandParameterValidationException;
|
||||
import dev.sheldan.abstracto.core.command.exception.IncorrectParameterException;
|
||||
import dev.sheldan.abstracto.core.command.exception.ParameterTooLongException;
|
||||
import dev.sheldan.abstracto.core.command.handler.CommandParameterHandler;
|
||||
import dev.sheldan.abstracto.core.command.handler.CommandParameterIterators;
|
||||
import dev.sheldan.abstracto.core.command.service.CommandManager;
|
||||
import dev.sheldan.abstracto.core.command.service.CommandService;
|
||||
import dev.sheldan.abstracto.core.command.service.ExceptionService;
|
||||
import dev.sheldan.abstracto.core.command.service.PostCommandExecution;
|
||||
import dev.sheldan.abstracto.core.command.execution.*;
|
||||
import dev.sheldan.abstracto.core.command.execution.UnParsedCommandParameter;
|
||||
import dev.sheldan.abstracto.core.Constants;
|
||||
import dev.sheldan.abstracto.core.exception.MemberNotFoundException;
|
||||
import dev.sheldan.abstracto.core.exception.RoleNotFoundInDBException;
|
||||
import dev.sheldan.abstracto.core.models.FullEmote;
|
||||
import dev.sheldan.abstracto.core.models.FullRole;
|
||||
import dev.sheldan.abstracto.core.models.database.*;
|
||||
import dev.sheldan.abstracto.core.service.EmoteService;
|
||||
import dev.sheldan.abstracto.core.service.RoleService;
|
||||
import dev.sheldan.abstracto.core.service.management.*;
|
||||
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
|
||||
import dev.sheldan.abstracto.core.utils.ParseUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.entities.*;
|
||||
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.time.Duration;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static java.util.Comparator.comparing;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
@@ -79,6 +75,9 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
||||
@Autowired
|
||||
private RoleService roleService;
|
||||
|
||||
@Autowired
|
||||
private List<CommandParameterHandler> parameterHandlers;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void onMessageReceived(@Nonnull MessageReceivedEvent event) {
|
||||
@@ -99,7 +98,7 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
||||
.userInitiatedContext(userInitiatedContext);
|
||||
final Command foundCommand;
|
||||
try {
|
||||
String contentStripped = event.getMessage().getContentStripped();
|
||||
String contentStripped = event.getMessage().getContentRaw();
|
||||
List<String> parameters = Arrays.asList(contentStripped.split(" "));
|
||||
UnParsedCommandParameter unParsedParameter = new UnParsedCommandParameter(contentStripped);
|
||||
String commandName = commandManager.getCommandName(parameters.get(0), event.getGuild().getIdLong());
|
||||
@@ -214,120 +213,42 @@ public class CommandReceivedHandler extends ListenerAdapter {
|
||||
Iterator<Member> memberIterator = message.getMentionedMembers().iterator();
|
||||
Iterator<Role> roleIterator = message.getMentionedRolesBag().iterator();
|
||||
Parameter param = command.getConfiguration().getParameters().get(0);
|
||||
CommandParameterIterators iterators = new CommandParameterIterators(channelIterator, emoteIterator, memberIterator, roleIterator);
|
||||
boolean reminderActive = false;
|
||||
List<CommandParameterHandler> orderedHandlers = parameterHandlers.stream().sorted(comparing(CommandParameterHandler::getPriority)).collect(Collectors.toList());
|
||||
for (int i = 0; i < unParsedCommandParameter.getParameters().size(); i++) {
|
||||
if(i < command.getConfiguration().getParameters().size() && !param.isRemainder()) {
|
||||
param = command.getConfiguration().getParameters().get(i);
|
||||
} else {
|
||||
reminderActive = true;
|
||||
}
|
||||
String value = unParsedCommandParameter.getParameters().get(i);
|
||||
if(param.getMaxLength() != null && (value.length() + Constants.PARAMETER_LIMIT) > param.getMaxLength()) {
|
||||
throw new ParameterTooLongException(command, param.getName(), value.length(), param.getMaxLength());
|
||||
}
|
||||
if(i < command.getConfiguration().getParameters().size() && !param.isRemainder()) {
|
||||
param = command.getConfiguration().getParameters().get(i);
|
||||
} else {
|
||||
reminderActive = true;
|
||||
}
|
||||
String value = unParsedCommandParameter.getParameters().get(i);
|
||||
boolean handlerMatched = false;
|
||||
for (CommandParameterHandler handler : orderedHandlers) {
|
||||
try {
|
||||
if(param.getType().equals(Integer.class)){
|
||||
parsedParameters.add(Integer.parseInt(value));
|
||||
} else if(param.getType().equals(Double.class)){
|
||||
parsedParameters.add(Double.parseDouble(value));
|
||||
} 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)) {
|
||||
if(StringUtils.isNumeric(value)) {
|
||||
Member memberById = message.getGuild().getMemberById(Long.parseLong(value));
|
||||
if(memberById == null) {
|
||||
throw new MemberNotFoundException();
|
||||
}
|
||||
parsedParameters.add(memberById);
|
||||
} else {
|
||||
parsedParameters.add(memberIterator.next());
|
||||
}
|
||||
} else if(param.getType().equals(FullEmote.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()) {
|
||||
try {
|
||||
Long emoteId = Long.parseLong(value);
|
||||
if(emoteManagementService.emoteExists(emoteId)) {
|
||||
AEmote aEmote = AEmote.builder().emoteId(emoteId).custom(true).build();
|
||||
FullEmote emote = FullEmote.builder().fakeEmote(aEmote).build();
|
||||
parsedParameters.add(emote);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Emote actualEmote = emoteIterator.next();
|
||||
AEmote fakeEmote = emoteService.getFakeEmote(actualEmote);
|
||||
FullEmote emote = FullEmote.builder().fakeEmote(fakeEmote).emote(actualEmote).build();
|
||||
parsedParameters.add(emote);
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
Long emoteId = Long.parseLong(value);
|
||||
if(emoteManagementService.emoteExists(emoteId)) {
|
||||
// we do not need to load the actual emote, as there is no guarantee that it exists anyway
|
||||
// there might be multiple emotes with the same emoteId, so we dont have any gain to fetch any of them
|
||||
AEmote aEmote = AEmote.builder().emoteId(emoteId).custom(true).build();
|
||||
FullEmote emote = FullEmote.builder().fakeEmote(aEmote).build();
|
||||
parsedParameters.add(emote);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
AEmote fakeEmote = emoteService.getFakeEmote(value);
|
||||
FullEmote emote = FullEmote.builder().fakeEmote(fakeEmote).build();
|
||||
parsedParameters.add(emote);
|
||||
}
|
||||
}
|
||||
} else if(param.getType().equals(AEmote.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(emoteService.getFakeEmote(emoteIterator.next()));
|
||||
} else {
|
||||
parsedParameters.add(emoteService.getFakeEmote(value));
|
||||
}
|
||||
} else if(CommandParameterKey.class.isAssignableFrom(param.getType())) {
|
||||
CommandParameterKey cast = (CommandParameterKey) CommandParameterKey.getEnumFromKey(param.getType(), value);
|
||||
parsedParameters.add(cast);
|
||||
} else if(param.getType().equals(FullRole.class)) {
|
||||
ARole aRole;
|
||||
if(StringUtils.isNumeric(value)) {
|
||||
long roleId = Long.parseLong(value);
|
||||
aRole = roleManagementService.findRoleOptional(roleId).orElseThrow(() -> new RoleNotFoundInDBException(roleId));
|
||||
} else {
|
||||
long roleId = roleIterator.next().getIdLong();
|
||||
aRole = roleManagementService.findRoleOptional(roleId).orElseThrow(() -> new RoleNotFoundInDBException(roleId));
|
||||
}
|
||||
Role role = roleService.getRoleFromGuild(aRole);
|
||||
FullRole fullRole = FullRole.builder().role(aRole).serverRole(role).build();
|
||||
parsedParameters.add(fullRole);
|
||||
} else if(param.getType().equals(ARole.class)) {
|
||||
if(StringUtils.isNumeric(value)) {
|
||||
long roleId = Long.parseLong(value);
|
||||
parsedParameters.add(roleManagementService.findRoleOptional(roleId).orElseThrow(() -> new RoleNotFoundInDBException(roleId)));
|
||||
} else {
|
||||
long roleId = roleIterator.next().getIdLong();
|
||||
parsedParameters.add(roleManagementService.findRoleOptional(roleId).orElseThrow(() -> new RoleNotFoundInDBException(roleId)));
|
||||
}
|
||||
} else if(param.getType().equals(Boolean.class)) {
|
||||
parsedParameters.add(Boolean.valueOf(value));
|
||||
} else if (param.getType().equals(Duration.class)) {
|
||||
parsedParameters.add(ParseUtils.parseDuration(value));
|
||||
} else {
|
||||
if(!reminderActive) {
|
||||
parsedParameters.add(value);
|
||||
} else {
|
||||
if(parsedParameters.isEmpty()) {
|
||||
parsedParameters.add(value);
|
||||
} else {
|
||||
int lastIndex = parsedParameters.size() - 1;
|
||||
parsedParameters.set(lastIndex, parsedParameters.get(lastIndex) + " " + value);
|
||||
}
|
||||
}
|
||||
if(handler.handles(param.getType())) {
|
||||
handlerMatched = true;
|
||||
parsedParameters.add(handler.handle(value, iterators, param.getType(), message));
|
||||
break;
|
||||
}
|
||||
} catch (NoSuchElementException e) {
|
||||
throw new IncorrectParameterException(command, param.getType(), param.getName());
|
||||
}
|
||||
}
|
||||
if(!handlerMatched) {
|
||||
if(!reminderActive) {
|
||||
parsedParameters.add(value);
|
||||
} else {
|
||||
if(parsedParameters.isEmpty()) {
|
||||
parsedParameters.add(value);
|
||||
} else {
|
||||
int lastIndex = parsedParameters.size() - 1;
|
||||
parsedParameters.set(lastIndex, parsedParameters.get(lastIndex) + " " + value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return Parameters.builder().parameters(parsedParameters).build();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package dev.sheldan.abstracto.core.command.handler;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.CommandConstants;
|
||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||
import dev.sheldan.abstracto.core.service.ChannelService;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class AChannelParameterHandler implements CommandParameterHandler {
|
||||
|
||||
@Autowired
|
||||
private TextChannelParameterHandler textChannelParameterHandler;
|
||||
|
||||
@Autowired
|
||||
private ChannelService channelService;
|
||||
|
||||
@Override
|
||||
public boolean handles(Class clazz) {
|
||||
return clazz.equals(AChannel.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handle(String input, CommandParameterIterators iterators, Class clazz, Message context) {
|
||||
TextChannel textChannel = (TextChannel) textChannelParameterHandler.handle(input, iterators, clazz, context);
|
||||
return channelService.getFakeChannelFromTextChannel(textChannel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return CommandConstants.CORE_HANDLER_PRIORITY;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package dev.sheldan.abstracto.core.command.handler;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.CommandConstants;
|
||||
import dev.sheldan.abstracto.core.models.database.AEmote;
|
||||
import dev.sheldan.abstracto.core.service.EmoteService;
|
||||
import net.dv8tion.jda.api.entities.Emote;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class AEmoteParameterHandler implements CommandParameterHandler {
|
||||
|
||||
@Autowired
|
||||
private EmoteParameterHandler emoteParameterHandler;
|
||||
|
||||
@Autowired
|
||||
private EmoteService emoteService;
|
||||
|
||||
@Override
|
||||
public boolean handles(Class clazz) {
|
||||
return clazz.equals(AEmote.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handle(String input, CommandParameterIterators iterators, Class clazz, Message context) {
|
||||
Emote emote = (Emote) emoteParameterHandler.handle(input, iterators, Emote.class, context);
|
||||
return emoteService.getFakeEmoteFromEmote(emote);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return CommandConstants.CORE_HANDLER_PRIORITY;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package dev.sheldan.abstracto.core.command.handler;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.CommandConstants;
|
||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||
import dev.sheldan.abstracto.core.service.RoleService;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.Role;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class ARoleParameterHandler implements CommandParameterHandler {
|
||||
|
||||
@Autowired
|
||||
private RoleParameterHandler roleParameterHandler;
|
||||
|
||||
@Autowired
|
||||
private RoleService roleService;
|
||||
|
||||
@Override
|
||||
public boolean handles(Class clazz) {
|
||||
return clazz.equals(ARole.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handle(String input, CommandParameterIterators iterators, Class clazz, Message context) {
|
||||
Role role = (Role) roleParameterHandler.handle(input, iterators, Role.class, context);
|
||||
return roleService.getFakeRoleFromRole(role);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return CommandConstants.CORE_HANDLER_PRIORITY;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package dev.sheldan.abstracto.core.command.handler;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.CommandConstants;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class BooleanParameterHandler implements CommandParameterHandler {
|
||||
@Override
|
||||
public boolean handles(Class clazz) {
|
||||
return clazz.equals(Boolean.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handle(String input, CommandParameterIterators iterators, Class clazz, Message context) {
|
||||
return Boolean.valueOf(input);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return CommandConstants.CORE_HANDLER_PRIORITY;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package dev.sheldan.abstracto.core.command.handler;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.CommandConstants;
|
||||
import dev.sheldan.abstracto.core.command.execution.CommandParameterKey;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class CommandKeyParameterHandler implements CommandParameterHandler {
|
||||
|
||||
@Override
|
||||
public boolean handles(Class clazz) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handle(String input, CommandParameterIterators iterators, Class clazz, Message context) {
|
||||
return CommandParameterKey.getEnumFromKey(clazz, input);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return CommandConstants.CORE_HANDLER_PRIORITY;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package dev.sheldan.abstracto.core.command.handler;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.CommandConstants;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class DoubleParameterHandler implements CommandParameterHandler {
|
||||
@Override
|
||||
public boolean handles(Class clazz) {
|
||||
return clazz.equals(Double.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handle(String input, CommandParameterIterators iterators, Class clazz, Message context) {
|
||||
return Double.parseDouble(input);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return CommandConstants.CORE_HANDLER_PRIORITY;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package dev.sheldan.abstracto.core.command.handler;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.CommandConstants;
|
||||
import dev.sheldan.abstracto.core.utils.ParseUtils;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
@Component
|
||||
public class DurationParameterHandler implements CommandParameterHandler {
|
||||
@Override
|
||||
public boolean handles(Class clazz) {
|
||||
return clazz.equals(Duration.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handle(String input, CommandParameterIterators iterators, Class clazz, Message context) {
|
||||
return ParseUtils.parseDuration(input);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return CommandConstants.CORE_HANDLER_PRIORITY;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package dev.sheldan.abstracto.core.command.handler;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.CommandConstants;
|
||||
import net.dv8tion.jda.api.entities.Emote;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
@Component
|
||||
public class EmoteParameterHandler implements CommandParameterHandler {
|
||||
|
||||
@Override
|
||||
public boolean handles(Class clazz) {
|
||||
return clazz.equals(Emote.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handle(String input, CommandParameterIterators iterators, Class clazz, Message context) {
|
||||
Matcher matcher = Message.MentionType.EMOTE.getPattern().matcher(input);
|
||||
if(matcher.matches()) {
|
||||
return iterators.getEmoteIterator().next();
|
||||
} else {
|
||||
long emoteId = Long.parseLong(input);
|
||||
return context.getGuild().getEmoteById(emoteId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return CommandConstants.CORE_HANDLER_PRIORITY;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package dev.sheldan.abstracto.core.command.handler;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.CommandConstants;
|
||||
import dev.sheldan.abstracto.core.models.FullEmote;
|
||||
import dev.sheldan.abstracto.core.models.database.AEmote;
|
||||
import dev.sheldan.abstracto.core.service.EmoteService;
|
||||
import net.dv8tion.jda.api.entities.Emote;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class FullEmoteParameterHandler implements CommandParameterHandler {
|
||||
|
||||
@Autowired
|
||||
private EmoteParameterHandler emoteParameterHandler;
|
||||
|
||||
@Autowired
|
||||
private EmoteService emoteService;
|
||||
|
||||
@Override
|
||||
public boolean handles(Class clazz) {
|
||||
return clazz.equals(FullEmote.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handle(String input, CommandParameterIterators iterators, Class clazz, Message context) {
|
||||
Emote emote = (Emote) emoteParameterHandler.handle(input, iterators, Emote.class, context);
|
||||
AEmote aEmote = emoteService.getFakeEmoteFromEmote(emote);
|
||||
return FullEmote.builder().emote(emote).fakeEmote(aEmote).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return CommandConstants.CORE_HANDLER_PRIORITY;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package dev.sheldan.abstracto.core.command.handler;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.CommandConstants;
|
||||
import dev.sheldan.abstracto.core.models.FullRole;
|
||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||
import dev.sheldan.abstracto.core.service.RoleService;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.Role;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class FullRoleParameterHandler implements CommandParameterHandler {
|
||||
|
||||
@Autowired
|
||||
private RoleParameterHandler roleParameterHandler;
|
||||
|
||||
@Autowired
|
||||
private RoleService roleService;
|
||||
|
||||
@Override
|
||||
public boolean handles(Class clazz) {
|
||||
return clazz.equals(FullRole.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handle(String input, CommandParameterIterators iterators, Class clazz, Message context) {
|
||||
Role role = (Role) roleParameterHandler.handle(input, iterators, Role.class, context);
|
||||
ARole aRole = roleService.getFakeRoleFromRole(role);
|
||||
return FullRole.builder().role(aRole).serverRole(role).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return CommandConstants.CORE_HANDLER_PRIORITY;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package dev.sheldan.abstracto.core.command.handler;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.CommandConstants;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class IntegerParameterHandler implements CommandParameterHandler {
|
||||
|
||||
@Override
|
||||
public boolean handles(Class clazz) {
|
||||
return clazz.equals(Integer.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handle(String input, CommandParameterIterators iterators, Class clazz, Message context) {
|
||||
return Integer.parseInt(input);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return CommandConstants.CORE_HANDLER_PRIORITY;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package dev.sheldan.abstracto.core.command.handler;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.CommandConstants;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class LongParameterHandler implements CommandParameterHandler {
|
||||
|
||||
@Override
|
||||
public boolean handles(Class clazz) {
|
||||
return clazz.equals(Long.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handle(String input, CommandParameterIterators iterators, Class clazz, Message context) {
|
||||
return Long.parseLong(input);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return CommandConstants.CORE_HANDLER_PRIORITY;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package dev.sheldan.abstracto.core.command.handler;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.CommandConstants;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
@Component
|
||||
public class MemberParameterHandler implements CommandParameterHandler {
|
||||
@Override
|
||||
public boolean handles(Class clazz) {
|
||||
return clazz.equals(Member.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handle(String input, CommandParameterIterators iterators, Class clazz, Message context) {
|
||||
Matcher matcher = Message.MentionType.USER.getPattern().matcher(input);
|
||||
if(matcher.matches()) {
|
||||
return iterators.getMemberIterator().next();
|
||||
} else {
|
||||
// TODO add handling for names
|
||||
long emoteId = Long.parseLong(input);
|
||||
return context.getGuild().getMemberById(emoteId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return CommandConstants.CORE_HANDLER_PRIORITY;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package dev.sheldan.abstracto.core.command.handler;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.CommandConstants;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.Role;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
@Component
|
||||
public class RoleParameterHandler implements CommandParameterHandler {
|
||||
@Override
|
||||
public boolean handles(Class clazz) {
|
||||
return clazz.equals(Role.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handle(String input, CommandParameterIterators iterators, Class clazz, Message context) {
|
||||
Matcher matcher = Message.MentionType.ROLE.getPattern().matcher(input);
|
||||
if(matcher.matches()) {
|
||||
return iterators.getRoleIterator().next();
|
||||
} else {
|
||||
long roleId = Long.parseLong(input);
|
||||
return context.getGuild().getRoleById(roleId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return CommandConstants.CORE_HANDLER_PRIORITY;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package dev.sheldan.abstracto.core.command.handler;
|
||||
|
||||
import dev.sheldan.abstracto.core.command.CommandConstants;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
@Component
|
||||
public class TextChannelParameterHandler implements CommandParameterHandler {
|
||||
@Override
|
||||
public boolean handles(Class clazz) {
|
||||
return clazz.equals(TextChannel.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object handle(String input, CommandParameterIterators iterators, Class clazz, Message context) {
|
||||
Matcher matcher = Message.MentionType.CHANNEL.getPattern().matcher(input);
|
||||
if(matcher.matches()) {
|
||||
return iterators.getChannelIterator().next();
|
||||
} else {
|
||||
long channelId = Long.parseLong(input);
|
||||
return context.getGuild().getTextChannelById(channelId);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getPriority() {
|
||||
return CommandConstants.CORE_HANDLER_PRIORITY;
|
||||
}
|
||||
}
|
||||
@@ -256,4 +256,19 @@ public class ChannelServiceBean implements ChannelService {
|
||||
public Optional<TextChannel> getChannelFromAChannel(AChannel channel) {
|
||||
return botService.getTextChannelFromServerOptional(channel.getServer().getId(), channel.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public AChannel getFakeChannelFromTextChannel(TextChannel textChannel) {
|
||||
AServer server = AServer
|
||||
.builder()
|
||||
.id(textChannel.getIdLong())
|
||||
.fake(true)
|
||||
.build();
|
||||
return AChannel
|
||||
.builder()
|
||||
.fake(true)
|
||||
.id(textChannel.getIdLong())
|
||||
.server(server)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,8 +4,10 @@ import dev.sheldan.abstracto.core.exception.EmoteNotDefinedException;
|
||||
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
||||
import dev.sheldan.abstracto.core.models.cache.CachedReaction;
|
||||
import dev.sheldan.abstracto.core.models.database.AEmote;
|
||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||
import dev.sheldan.abstracto.core.service.management.DefaultEmoteManagementService;
|
||||
import dev.sheldan.abstracto.core.service.management.EmoteManagementService;
|
||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.entities.Emote;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
@@ -28,6 +30,9 @@ public class EmoteServiceBean implements EmoteService {
|
||||
@Autowired
|
||||
private DefaultEmoteManagementService defaultEmoteManagementService;
|
||||
|
||||
@Autowired
|
||||
private ServerManagementService serverManagementService;
|
||||
|
||||
@Override
|
||||
public boolean isEmoteUsableByBot(Emote emote) {
|
||||
for (Guild guild : botService.getInstance().getGuilds()) {
|
||||
@@ -128,7 +133,7 @@ public class EmoteServiceBean implements EmoteService {
|
||||
public AEmote getFakeEmote(Object object) {
|
||||
if(object instanceof Emote) {
|
||||
Emote emote = (Emote) object;
|
||||
return AEmote.builder().fake(true).emoteKey(emote.getName()).custom(true).animated(emote.isAnimated()).emoteId(emote.getIdLong()).build();
|
||||
return getFakeEmoteFromEmote(emote);
|
||||
} else if(object instanceof String) {
|
||||
String emoteText = (String) object;
|
||||
return AEmote.builder().fake(true).custom(false).emoteKey(emoteText).build();
|
||||
@@ -136,4 +141,21 @@ public class EmoteServiceBean implements EmoteService {
|
||||
throw new IllegalArgumentException("Not possible to convert given object to AEmote.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public AEmote getFakeEmoteFromEmote(Emote emote) {
|
||||
AServer server = null;
|
||||
if(emote.getGuild() != null) {
|
||||
server = AServer.builder().id(emote.getGuild().getIdLong()).fake(true).build();
|
||||
}
|
||||
return AEmote
|
||||
.builder()
|
||||
.fake(true)
|
||||
.emoteKey(emote.getName())
|
||||
.custom(true)
|
||||
.animated(emote.isAnimated())
|
||||
.emoteId(emote.getIdLong())
|
||||
.serverRef(server)
|
||||
.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -187,4 +187,20 @@ public class RoleServiceBean implements RoleService {
|
||||
Member selfMember = jdaRole.getGuild().getSelfMember();
|
||||
return selfMember.canInteract(jdaRole);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ARole getFakeRoleFromRole(Role role) {
|
||||
AServer server = AServer
|
||||
.builder()
|
||||
.id(role.getGuild().getIdLong())
|
||||
.fake(true)
|
||||
.build();
|
||||
return ARole
|
||||
.builder()
|
||||
.fake(true)
|
||||
.deleted(false)
|
||||
.id(role.getIdLong())
|
||||
.server(server)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
abstracto.startup.synchronize=true
|
||||
|
||||
abstracto.parameter.lowerBound=50
|
||||
|
||||
abstracto.eventWaiter.threads=10
|
||||
|
||||
Reference in New Issue
Block a user