[AB-302] refactoring assignable roles to use buttons instead of reactions

moved button related services to component service instead of message service
adding component type to component payload
renamed async role service methods
ignoring bot reactions in starboard
fixing rank not showing correct experience to next level for other members
This commit is contained in:
Sheldan
2021-07-09 02:00:33 +02:00
parent c08134a150
commit 7e7591a4b3
117 changed files with 1886 additions and 2470 deletions

View File

@@ -4,12 +4,12 @@ import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.util.HashMap;
import java.util.Map;
@Getter
@Setter
@Builder
public class ConditionContextInstance {
private HashMap<String, Object> parameters;
private Map<String, Object> parameters;
private String conditionName;
}

View File

@@ -24,4 +24,5 @@ public class FullEmote implements Serializable {
return fakeEmote.getEmoteId().toString();
}
}
}

View File

@@ -29,6 +29,11 @@ public class ComponentPayload {
@Column(name = "payload")
private String payload;
@Getter
@Enumerated(EnumType.STRING)
@Column(name = "type")
private ComponentType type;
@Column(name = "payload_type", length = 255)
private String payloadType;

View File

@@ -0,0 +1,5 @@
package dev.sheldan.abstracto.core.models.database;
public enum ComponentType {
BUTTON, SELECTION
}

View File

@@ -0,0 +1,25 @@
package dev.sheldan.abstracto.core.models.template.display;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import net.dv8tion.jda.api.entities.TextChannel;
@Getter
@Setter
@Builder
public class ChannelDisplay {
private String name;
private String channelMention;
public static ChannelDisplay fromChannel(TextChannel channel) {
if(channel == null) {
return null;
}
return ChannelDisplay
.builder()
.name(channel.getName())
.channelMention(channel.getAsMention())
.build();
}
}

View File

@@ -0,0 +1,31 @@
package dev.sheldan.abstracto.core.models.template.display;
import dev.sheldan.abstracto.core.models.database.ARole;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import net.dv8tion.jda.api.entities.Role;
@Getter
@Setter
@Builder
public class RoleDisplay {
private String roleMention;
private Long roleId;
public static RoleDisplay fromRole(Role role) {
return RoleDisplay
.builder()
.roleId(role.getIdLong())
.roleMention(role.getAsMention())
.build();
}
public static RoleDisplay fromARole(ARole role) {
return RoleDisplay
.builder()
.roleId(role.getId())
.roleMention(role.getAsMention())
.build();
}
}

View File

@@ -0,0 +1,10 @@
package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.ComponentPayload;
import dev.sheldan.abstracto.core.models.template.button.ButtonPayload;
public interface ComponentPayloadService {
ComponentPayload createButtonPayload(String componentId, ButtonPayload payload, String origin, AServer server);
ComponentPayload createSelectionPayload(String componentId, ButtonPayload payload, String origin, AServer server);
}

View File

@@ -1,6 +1,25 @@
package dev.sheldan.abstracto.core.service;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.interactions.components.ActionRow;
import net.dv8tion.jda.api.interactions.components.ButtonStyle;
import net.dv8tion.jda.api.interactions.components.Component;
import java.util.List;
import java.util.concurrent.CompletableFuture;
public interface ComponentService {
Integer MAX_BUTTONS_PER_ROW = Component.Type.BUTTON.getMaxPerRow();
String generateComponentId(Long serverId);
String generateComponentId();
CompletableFuture<Message> addButtonToMessage(Long messageId, TextChannel textChannel, String buttonId, String description, String emoteMarkdown, ButtonStyle style);
CompletableFuture<Void> clearButtons(Message message);
CompletableFuture<Void> disableAllButtons(Message message);
CompletableFuture<Void> enableAllButtons(Message message);
CompletableFuture<Void> removeComponentWithId(Message message, String componentId);
CompletableFuture<Void> removeComponentWithId(Message message, String componentId, Boolean rearrange);
List<ActionRow> splitIntoActionRowsMax(List<Component> components);
}

View File

@@ -9,6 +9,7 @@ import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.MessageChannel;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.interactions.components.ActionRow;
import net.dv8tion.jda.api.requests.restaction.AuditableRestAction;
import net.dv8tion.jda.api.requests.restaction.MessageAction;
@@ -40,5 +41,6 @@ public interface MessageService {
MessageAction editMessage(Message message, String text, MessageEmbed messageEmbed);
AuditableRestAction<Void> deleteMessageWithAction(Message message);
CompletableFuture<Void> deleteMessage(Message message);
CompletableFuture<Void> clearButtons(Message message);
CompletableFuture<Void> editMessageWithActionRows(Message message, List<ActionRow> rows);
CompletableFuture<Message> editMessageWithActionRowsMessage(Message message, List<ActionRow> rows);
}

View File

@@ -12,18 +12,20 @@ import java.util.Optional;
import java.util.concurrent.CompletableFuture;
public interface RoleService {
void addRoleToUser(AUserInAServer aUserInAServer, ARole role);
CompletableFuture<Void> addRoleToUserFuture(AUserInAServer aUserInAServer, ARole role);
CompletableFuture<Void> addRoleToMemberFuture(Member member, Long roleId);
void addRoleToMember(AUserInAServer aUserInAServer, ARole role);
CompletableFuture<Void> addRoleToUserAsync(AUserInAServer aUserInAServer, ARole role);
CompletableFuture<Void> addRoleToMemberAsync(Member member, Long roleId);
CompletableFuture<Void> addRoleToMemberAsync(Member member, Role role);
void addRoleToMember(Member member, ARole role);
CompletableFuture<Void> addRoleToMemberFuture(Member member, ARole role);
CompletableFuture<Void> addRoleToMemberAsync(Member member, ARole role);
void removeRoleFromMember(Member member, ARole role);
CompletableFuture<Void> removeRoleFromMemberAsync(Member member, ARole role);
CompletableFuture<Void> removeRoleFromMemberAsync(Member member, Long roleId);
CompletableFuture<Void> addRoleToUser(Guild guild, Long userId, Role roleById);
CompletableFuture<Void> removeRoleFromUser(Guild guild, Long userId, Role roleById);
CompletableFuture<Void> addRoleToMemberAsync(Guild guild, Long userId, Role roleById);
CompletableFuture<Void> removeRoleFromUserAsync(Guild guild, Long userId, Role roleById);
void removeRoleFromUser(AUserInAServer aUserInAServer, ARole role);
CompletableFuture<Void> removeRoleFromUserFuture(AUserInAServer aUserInAServer, ARole role);
CompletableFuture<Void> removeRoleFromUserAsync(AUserInAServer aUserInAServer, ARole role);
CompletableFuture<Void> removeRoleFromUserAsync(Member member, Role role);
void markDeleted(Role role, AServer server);
void markDeleted(Long id, AServer server);
Role getRoleFromGuild(ARole role);
@@ -35,6 +37,7 @@ public interface RoleService {
boolean memberHasRole(Member member, Long roleId);
boolean isRoleInServer(ARole role);
boolean canBotInteractWithRole(ARole role);
boolean canBotInteractWithRole(Role role);
ARole getFakeRoleFromRole(Role role);
ARole getFakeRoleFromId(Long roleId);
}

View File

@@ -2,15 +2,17 @@ package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.ComponentPayload;
import dev.sheldan.abstracto.core.models.database.ComponentType;
import dev.sheldan.abstracto.core.models.template.button.ButtonConfigModel;
import java.util.List;
import java.util.Optional;
public interface ComponentPayloadManagementService {
ComponentPayload createPayload(String id, String payload, Class payloadType, String buttonOrigin, AServer server);
ComponentPayload createPayload(String id, String payload, Class payloadType, String buttonOrigin, AServer server, ComponentType type);
ComponentPayload createPayload(ButtonConfigModel buttonConfigModel, AServer server);
Optional<ComponentPayload> findPayload(String id);
List<ComponentPayload> findPayloadsOfOriginInServer(String buttonOrigin, AServer server);
void deletePayload(String id);
void deletePayload(ComponentPayload payload);
}

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.core.templating.model;
import dev.sheldan.abstracto.core.models.database.ComponentType;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@@ -53,6 +54,7 @@ public class MessageToSend {
public static class ComponentConfig {
private String payload;
private String componentOrigin;
private ComponentType componentType;
private Class payloadType;
private Boolean persistCallback;
}