[AB-54] adding various command parameter handlers

removing old parameter length validation
This commit is contained in:
Sheldan
2020-10-03 10:31:33 +02:00
parent f0d517af22
commit 0f6f6a1e49
49 changed files with 1506 additions and 183 deletions

View File

@@ -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;
}

View File

@@ -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();
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -1,5 +1,3 @@
abstracto.startup.synchronize=true
abstracto.parameter.lowerBound=50
abstracto.eventWaiter.threads=10