From fd4d7840817be23ceea09f0031be1fb8c8630306 Mon Sep 17 00:00:00 2001
From: Sheldan <5037282+Sheldan@users.noreply.github.com>
Date: Thu, 23 Jul 2020 02:22:58 +0200
Subject: [PATCH] added assignable role place module including: setting up,
configuring, deleting commands and documentation upgraded JDA version to
4.2.0 refactored multiple interfaces to be more convenient/contain more
information (reaction added/removed now gets the actual event) added generic
way to check for conditions. these conditions are provided by modules and are
loosely connected via condition context and a condition name added changeable
flag to emotes to indicate that they can be updated via setEmote refactored
emote parsing in command parameters, the command parameters will now contain
a fake emote added feature to embed templates for fields to force a new
message regardless of the discord limit added some more functionality to
message and channel service regarding field edit/embed sending introduced the
full emote parameter, to have both the emote (if custom) and a fake aemote at
hand refactored some methods to already throw exceptions within the retrieval
methods, instead of optionals which need to be dealt outside changed
getEmotes to getEmotesBag to have duplicates of emotes fixed setEmote to
behave correctly with new parameter types fixed creation of emotes, which
previously created additional instances fixed templating multiple fields
handling refactored command handling to allow async commands, they are the
same interface, but configuration dicates whether or not it is async added
generic exception reporting for async commands refactored a bunch of service
methods to be named optional, and the non optional methods throw exceptions
in case nothing is found added a few more customized exceptions added
clearing freemarker internal template cache to clear cache added feature to
skip, not use, embeds if they look to be empty (no fields, no description, no
attachment) added virtual env to gitignore fixed initial sync of roles
un-marking roles as deleted added some convenience methods to remove
reactions from users directly fixed post command handling in case it is not a
templatable instance fixed exceptions without cause in generic exception
model
---
.gitignore | 3 +
.../assignable-roles-impl/pom.xml | 45 +
.../src/main/assembly/liquibase.xml | 18 +
.../command/ActivateAssignableRolePlace.java | 52 +
.../command/AddRoleToAssignableRolePost.java | 75 +
.../command/AssignableRoleModule.java | 18 +
.../ChangeAssignablePlaceDescription.java | 54 +
.../ChangeAssignableRolePlaceConfig.java | 62 +
.../command/CreateAssignableRolePost.java | 67 +
.../DeactivateAssignableRolePlace.java | 52 +
.../command/DeleteAssignableRolePlace.java | 52 +
.../command/EditAssignableRolePlaceText.java | 58 +
.../command/MoveAssignableRolePlace.java | 55 +
.../RemoveRoleFromAssignableRolePlace.java | 55 +
.../command/SetAssignableRolePosition.java | 63 +
.../command/SetupAssignableRolePlace.java | 61 +
.../ShowAssignableRolePlaceConfig.java | 53 +
.../command/ShowAssignableRolePlaces.java | 47 +
.../command/SwapAssignableRolePosition.java | 73 +
.../command/TestAssignableRolePlace.java | 52 +
.../AssignablePostDeletedListener.java | 40 +
.../listener/AssignablePostReactionAdded.java | 106 ++
.../AssignablePostReactionRemoved.java | 63 +
.../AssignableRolePlacePostRepository.java | 10 +
.../AssignableRolePlaceRepository.java | 16 +
.../repository/AssignableRoleRepository.java | 9 +
.../AssignedRoleUserRepository.java | 9 +
.../AssignableRolePlaceServiceBean.java | 751 +++++++++
.../service/AssignableRoleServiceBean.java | 69 +
.../AssignableRoleManagementServiceBean.java | 77 +
...ignableRolePlaceManagementServiceBean.java | 72 +
...bleRolePlacePostManagementServiceBean.java | 28 +
...AssignedRoleUserManagementServiceBean.java | 54 +
.../assignableRoles-seedData/command.xml | 111 ++
.../assignableRoles-seedData/data.xml | 13 +
.../default_feature_flag.xml | 18 +
.../assignableRoles-seedData/feature.xml | 16 +
.../assignableRoles-seedData/module.xml | 16 +
.../assignable_role.xml | 50 +
.../assignable_role_place.xml | 39 +
.../assignable_role_place_post.xml | 33 +
.../assigned_role_user.xml | 38 +
.../assignableRoles-tables/tables.xml | 13 +
.../1.0-assignableRoles/collection.xml | 11 +
.../migrations/assignableRoles-changeLog.xml | 10 +
.../resources/migrations/dbchangelog-3.8.xsd | 1377 +++++++++++++++++
.../assignable-roles-int/pom.xml | 21 +
.../AssignableRolePlaceParameterKey.java | 10 +
.../features/AssignableFeatureConfig.java | 13 +
.../features/AssignableRoleFeature.java | 15 +
.../AssignablePlacePostNotFoundException.java | 25 +
...AssignableRoleAlreadyDefinedException.java | 25 +
.../AssignableRoleNotUsableException.java | 26 +
...gnableRolePlaceAlreadyExistsException.java | 25 +
...ssignableRolePlaceChannelDoesNotExist.java | 25 +
.../AssignableRolePlaceNotFoundException.java | 25 +
.../AssignedUserNotFoundException.java | 26 +
...moteNotInAssignableRolePlaceException.java | 26 +
.../models/database/AssignableRole.java | 73 +
.../models/database/AssignableRolePlace.java | 88 ++
.../database/AssignableRolePlacePost.java | 51 +
.../models/database/AssignedRoleUser.java | 46 +
.../AssignableRoleAlreadyDefinedModel.java | 16 +
.../AssignableRoleNotUsableModel.java | 17 +
...AssignableRolePlaceAlreadyExistsModel.java | 12 +
...ableRolePlaceChannelDoesNotExistModel.java | 15 +
.../AssignableRolePlaceExceptionModel.java | 28 +
.../AssignableRolePlaceNotFoundModel.java | 12 +
.../AssignableRolePlacePostNotFoundModel.java | 14 +
.../exception/AssignedUserNotFoundModel.java | 13 +
.../EmoteNotInAssignableRolePlaceModel.java | 16 +
.../templates/AssignablePlaceOverview.java | 17 +
.../templates/AssignablePostConfigRole.java | 21 +
.../templates/AssignablePostMessage.java | 17 +
.../models/templates/AssignablePostRole.java | 19 +
.../templates/AssignableRolePlaceConfig.java | 16 +
.../service/AssignableRolePlaceService.java | 66 +
.../service/AssignableRoleService.java | 11 +
.../AssignableRoleManagementService.java | 14 +
.../AssignableRolePlaceManagementService.java | 20 +
...ignableRolePlacePostManagementService.java | 10 +
.../AssignedRoleUserManagementService.java | 16 +
.../assignable-roles/pom.xml | 29 +
.../service/condition/HasLevelCondition.java | 56 +
.../moderation/service/BanServiceBean.java | 4 +-
.../moderation/service/MuteServiceBean.java | 4 +-
.../service/SlowModeServiceBean.java | 4 +-
.../service/BanServiceBeanTest.java | 4 +-
.../service/MuteServiceBeanTest.java | 2 +-
.../service/SlowModeServiceBeanTest.java | 4 +-
.../service/ModMailMessageServiceBean.java | 2 +-
.../service/ModMailThreadServiceBean.java | 2 +-
.../ModMailThreadManagementServiceBean.java | 4 +-
.../setup/ModMailCategorySetupBean.java | 87 +-
.../abstracto-modules/pom.xml | 1 +
.../MessageEmbedRemovalReactionListener.java | 9 +-
.../listener/starboard/StarboardListener.java | 17 +-
.../service/MessageEmbedServiceBean.java | 6 +-
.../utility/service/RemindServiceBean.java | 5 +-
.../utility/service/StarboardServiceBean.java | 5 +-
...MessageEmbedPostManagementServiceBean.java | 5 +-
.../StarboardPostManagementServiceBean.java | 3 +-
.../SuggestionManagementServiceBean.java | 9 +-
...ssageEmbedRemovalReactionListenerTest.java | 11 +-
.../starboard/StarboardListenerTest.java | 52 +-
.../service/MessageEmbedServiceBeanTest.java | 4 +-
.../service/RemindServiceBeanTest.java | 8 +-
.../service/StarboardServiceBeanTest.java | 16 +-
...ageEmbedPostManagementServiceBeanTest.java | 2 +-
...tarboardPostManagementServiceBeanTest.java | 27 +-
.../SuggestionManagementServiceBeanTest.java | 16 +-
abstracto-application/bundle/pom.xml | 6 +
.../core/command/CommandReceivedHandler.java | 170 +-
.../command/post/ExceptionPostExecution.java | 23 +-
.../command/post/ReactionPostExecution.java | 2 +-
.../command/service/ExceptionServiceBean.java | 52 +
.../core/commands/utility/SetEmote.java | 22 +-
.../interactive/InteractiveServiceBean.java | 5 +-
.../core/interactive/PostTargetSetupStep.java | 74 +-
.../core/interactive/SetupSummaryStep.java | 44 +-
.../interactive/SystemConfigSetupStep.java | 70 +-
.../listener/MessageDeletedListenerBean.java | 4 +-
.../listener/ReactionUpdatedListener.java | 6 +-
.../core/repository/EmoteRepository.java | 12 +-
.../core/service/BotServiceBean.java | 45 +-
.../core/service/CacheServiceBean.java | 5 +
.../core/service/ChannelGroupServiceBean.java | 9 +-
.../core/service/ChannelServiceBean.java | 78 +-
.../core/service/ConditionServiceBean.java | 45 +
.../core/service/EmoteServiceBean.java | 22 +-
.../core/service/MessageCacheBean.java | 8 +-
.../core/service/MessageServiceBean.java | 126 +-
.../core/service/PostTargetServiceBean.java | 6 +-
.../core/service/RoleServiceBean.java | 121 +-
.../core/service/SetupServiceBean.java | 2 +-
.../core/service/StartupServiceBean.java | 3 +-
.../ChannelManagementServiceBean.java | 12 +-
.../EmoteManagementServiceBean.java | 87 +-
.../management/PostTargetManagementBean.java | 8 +-
.../management/RoleManagementServiceBean.java | 8 +-
.../ServerManagementServiceBean.java | 15 +-
.../resources/config/application.properties | 5 -
.../migrations/1.0-core/core-tables/emote.xml | 1 +
.../abstracto/core/command/Command.java | 5 +-
.../condition/CommandDisallowedCondition.java | 2 +-
.../condition/FeatureEnabledCondition.java | 2 +-
.../condition/FeatureModeCondition.java | 2 +-
.../condition/ImmuneUserCondition.java | 2 +-
.../command/config/CommandConfiguration.java | 6 +
...ndParameterKeyValueWrongTypeException.java | 27 +
.../execution/CommandParameterKey.java | 22 +
.../core/command/execution/CommandResult.java | 4 +
.../core/command/execution/ResultState.java | 2 +-
...ommandParameterKeyValueWrongTypeModel.java | 14 +
.../FeatureDisabledMessage.java | 2 +-
.../exception/GenericExceptionModel.java | 26 +
.../IncorrectFeatureModeMessage.java | 2 +-
.../InsufficientPermissionMessage.java | 2 +-
.../{ => exception}/UserImmuneMessage.java | 2 +-
.../command/service/ExceptionService.java | 9 +
.../exception/AbstractoRunTimeException.java | 6 +
.../exception/ChannelNotFoundException.java | 7 +-
.../exception/EmoteNotFoundInDbException.java | 28 +
.../exception/EmoteNotUsableException.java | 25 +
.../ExceptionNotInServerException.java | 24 +
...ption.java => GuildNotFoundException.java} | 6 +-
.../InvalidConditionParametersException.java | 7 +
.../core/exception/RoleDeletedException.java | 25 +
.../exception/RoleNotFoundInDBException.java | 5 +-
.../core/listener/ReactedAddedListener.java | 4 +-
.../core/listener/ReactedRemovedListener.java | 4 +-
.../core/models/ConditionContext.java | 14 +
.../core/models/ConditionContextInstance.java | 15 +
.../core/models/ConditionContextVariable.java | 13 +
.../abstracto/core/models/FullEmote.java | 27 +
.../abstracto/core/models/FullRole.java | 8 +
.../core/models/database/AEmote.java | 10 +
.../exception/EmoteNotInServerModel.java | 12 +
.../core/models/exception/EmoteNotUsable.java | 13 +
.../models/exception/RoleDeletedModel.java | 13 +
.../abstracto/core/service/BotService.java | 7 +-
.../core/service/ChannelService.java | 7 +
.../core/service/ConditionService.java | 7 +
.../abstracto/core/service/EmoteService.java | 5 +-
.../core/service/MessageService.java | 16 +
.../abstracto/core/service/RoleService.java | 8 +
.../core/service/SystemCondition.java | 10 +
.../management/ChannelManagementService.java | 3 +-
.../management/EmoteManagementService.java | 23 +-
.../management/RoleManagementService.java | 3 +-
.../management/ServerManagementService.java | 3 +
.../abstracto/core/utils/ContextUtils.java | 5 +-
.../core/utils/ContextUtilsTest.java | 3 +-
abstracto-application/coverage/pom.xml | 5 +
.../asciidoc/features/assignableRoles.adoc | 77 +
.../src/main/docs/asciidoc/main.adoc | 2 +
abstracto-application/pom.xml | 4 +-
.../templating/model/EmbedConfiguration.java | 2 +
.../templating/model/EmbedField.java | 1 +
.../service/TemplateServiceBean.java | 36 +-
.../templating/service/TemplateService.java | 2 +
201 files changed, 6547 insertions(+), 527 deletions(-)
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/pom.xml
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/assembly/liquibase.xml
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/ActivateAssignableRolePlace.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/AddRoleToAssignableRolePost.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/AssignableRoleModule.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/ChangeAssignablePlaceDescription.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/ChangeAssignableRolePlaceConfig.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/CreateAssignableRolePost.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/DeactivateAssignableRolePlace.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/DeleteAssignableRolePlace.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/EditAssignableRolePlaceText.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/MoveAssignableRolePlace.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/RemoveRoleFromAssignableRolePlace.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/SetAssignableRolePosition.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/SetupAssignableRolePlace.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/ShowAssignableRolePlaceConfig.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/ShowAssignableRolePlaces.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/SwapAssignableRolePosition.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/TestAssignableRolePlace.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/listener/AssignablePostDeletedListener.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/listener/AssignablePostReactionAdded.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/listener/AssignablePostReactionRemoved.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/repository/AssignableRolePlacePostRepository.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/repository/AssignableRolePlaceRepository.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/repository/AssignableRoleRepository.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/repository/AssignedRoleUserRepository.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/service/AssignableRolePlaceServiceBean.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/service/AssignableRoleServiceBean.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/service/management/AssignableRoleManagementServiceBean.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/service/management/AssignableRolePlaceManagementServiceBean.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/service/management/AssignableRolePlacePostManagementServiceBean.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/service/management/AssignedRoleUserManagementServiceBean.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/resources/migrations/1.0-assignableRoles/assignableRoles-seedData/command.xml
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/resources/migrations/1.0-assignableRoles/assignableRoles-seedData/data.xml
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/resources/migrations/1.0-assignableRoles/assignableRoles-seedData/default_feature_flag.xml
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/resources/migrations/1.0-assignableRoles/assignableRoles-seedData/feature.xml
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/resources/migrations/1.0-assignableRoles/assignableRoles-seedData/module.xml
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/resources/migrations/1.0-assignableRoles/assignableRoles-tables/assignable_role.xml
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/resources/migrations/1.0-assignableRoles/assignableRoles-tables/assignable_role_place.xml
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/resources/migrations/1.0-assignableRoles/assignableRoles-tables/assignable_role_place_post.xml
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/resources/migrations/1.0-assignableRoles/assignableRoles-tables/assigned_role_user.xml
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/resources/migrations/1.0-assignableRoles/assignableRoles-tables/tables.xml
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/resources/migrations/1.0-assignableRoles/collection.xml
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/resources/migrations/assignableRoles-changeLog.xml
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/resources/migrations/dbchangelog-3.8.xsd
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/pom.xml
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/config/AssignableRolePlaceParameterKey.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/config/features/AssignableFeatureConfig.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/config/features/AssignableRoleFeature.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/exceptions/AssignablePlacePostNotFoundException.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/exceptions/AssignableRoleAlreadyDefinedException.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/exceptions/AssignableRoleNotUsableException.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/exceptions/AssignableRolePlaceAlreadyExistsException.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/exceptions/AssignableRolePlaceChannelDoesNotExist.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/exceptions/AssignableRolePlaceNotFoundException.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/exceptions/AssignedUserNotFoundException.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/exceptions/EmoteNotInAssignableRolePlaceException.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/database/AssignableRole.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/database/AssignableRolePlace.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/database/AssignableRolePlacePost.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/database/AssignedRoleUser.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/exception/AssignableRoleAlreadyDefinedModel.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/exception/AssignableRoleNotUsableModel.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/exception/AssignableRolePlaceAlreadyExistsModel.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/exception/AssignableRolePlaceChannelDoesNotExistModel.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/exception/AssignableRolePlaceExceptionModel.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/exception/AssignableRolePlaceNotFoundModel.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/exception/AssignableRolePlacePostNotFoundModel.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/exception/AssignedUserNotFoundModel.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/exception/EmoteNotInAssignableRolePlaceModel.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/templates/AssignablePlaceOverview.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/templates/AssignablePostConfigRole.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/templates/AssignablePostMessage.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/templates/AssignablePostRole.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/models/templates/AssignableRolePlaceConfig.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/service/AssignableRolePlaceService.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/service/AssignableRoleService.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/service/management/AssignableRoleManagementService.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/service/management/AssignableRolePlaceManagementService.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/service/management/AssignableRolePlacePostManagementService.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/assignable-roles-int/src/main/java/dev/sheldan/abstracto/assignableroles/service/management/AssignedRoleUserManagementService.java
create mode 100644 abstracto-application/abstracto-modules/assignable-roles/pom.xml
create mode 100644 abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/service/condition/HasLevelCondition.java
create mode 100644 abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/command/service/ExceptionServiceBean.java
create mode 100644 abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/service/ConditionServiceBean.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/command/exception/CommandParameterKeyValueWrongTypeException.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/command/execution/CommandParameterKey.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/command/models/exception/CommandParameterKeyValueWrongTypeModel.java
rename abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/command/models/{ => exception}/FeatureDisabledMessage.java (79%)
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/command/models/exception/GenericExceptionModel.java
rename abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/command/models/{ => exception}/IncorrectFeatureModeMessage.java (83%)
rename abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/command/models/{ => exception}/InsufficientPermissionMessage.java (80%)
rename abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/command/models/{ => exception}/UserImmuneMessage.java (76%)
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/command/service/ExceptionService.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/exception/EmoteNotFoundInDbException.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/exception/EmoteNotUsableException.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/exception/ExceptionNotInServerException.java
rename abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/exception/{GuildException.java => GuildNotFoundException.java} (72%)
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/exception/InvalidConditionParametersException.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/exception/RoleDeletedException.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/ConditionContext.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/ConditionContextInstance.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/ConditionContextVariable.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/FullEmote.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/exception/EmoteNotInServerModel.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/exception/EmoteNotUsable.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/models/exception/RoleDeletedModel.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/ConditionService.java
create mode 100644 abstracto-application/core/core-interface/src/main/java/dev/sheldan/abstracto/core/service/SystemCondition.java
create mode 100644 abstracto-application/documentation/src/main/docs/asciidoc/features/assignableRoles.adoc
diff --git a/.gitignore b/.gitignore
index af7e11dba..e2932c6f1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,3 +23,6 @@ target/
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
+
+
+venv/
\ No newline at end of file
diff --git a/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/pom.xml b/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/pom.xml
new file mode 100644
index 000000000..04419f7a4
--- /dev/null
+++ b/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/pom.xml
@@ -0,0 +1,45 @@
+
+
+
+ dev.sheldan.abstracto.modules
+ assignable-roles
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ assignable-roles-impl
+
+
+
+
+ maven-assembly-plugin
+
+
+ src/main/assembly/liquibase.xml
+
+
+
+
+ make-assembly
+ package
+
+ single
+
+
+
+
+
+
+
+
+
+ dev.sheldan.abstracto.modules
+ assignable-roles-int
+ ${project.version}
+
+
+
+
+
\ No newline at end of file
diff --git a/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/assembly/liquibase.xml b/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/assembly/liquibase.xml
new file mode 100644
index 000000000..8b4774fa0
--- /dev/null
+++ b/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/assembly/liquibase.xml
@@ -0,0 +1,18 @@
+
+ liquibase
+
+ zip
+
+ false
+
+
+ .
+ ${project.basedir}/src/main/resources/migrations
+
+ **/*
+
+
+
+
\ No newline at end of file
diff --git a/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/ActivateAssignableRolePlace.java b/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/ActivateAssignableRolePlace.java
new file mode 100644
index 000000000..5dd6e9cf9
--- /dev/null
+++ b/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/ActivateAssignableRolePlace.java
@@ -0,0 +1,52 @@
+package dev.sheldan.abstracto.assignableroles.command;
+
+import dev.sheldan.abstracto.assignableroles.config.features.AssignableRoleFeature;
+import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
+import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
+import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
+import dev.sheldan.abstracto.core.command.config.HelpInfo;
+import dev.sheldan.abstracto.core.command.config.Parameter;
+import dev.sheldan.abstracto.core.command.execution.CommandContext;
+import dev.sheldan.abstracto.core.command.execution.CommandResult;
+import dev.sheldan.abstracto.core.config.FeatureEnum;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.List;
+
+@Component
+public class ActivateAssignableRolePlace extends AbstractConditionableCommand {
+
+ @Autowired
+ private AssignableRolePlaceService service;
+
+ @Override
+ public CommandResult execute(CommandContext commandContext) {
+ checkParameters(commandContext);
+ List