diff --git a/deployment/image-packaging/pom.xml b/deployment/image-packaging/pom.xml
index 57dbe65f..1c1fd2e5 100644
--- a/deployment/image-packaging/pom.xml
+++ b/deployment/image-packaging/pom.xml
@@ -25,808 +25,828 @@
copy
+
+
+
+
+
+ dev.sheldan.sissi.application
+ executable
+ ${project.version}
+ exec
+ jar
+ true
+ ${file.basedir}/sissi/bot
+ app.jar
+
+
+
+
+ dev.sheldan.abstracto-templates.templates
+ core
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ core.zip
+
+
+
+ dev.sheldan.abstracto-templates.templates
+ assignable-roles
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ assignable-roles.zip
+
+
+
+ dev.sheldan.abstracto-templates.templates
+ twitch
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ twitch.zip
+
+
+
+ dev.sheldan.abstracto-templates.templates
+ experience-tracking
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ experience-tracking.zip
+
+
+
+ dev.sheldan.abstracto-templates.templates
+ modmail
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ modmail.zip
+
+
+
+ dev.sheldan.abstracto-templates.templates
+ utility
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ utility.zip
+
+
+
+ dev.sheldan.abstracto-templates.templates
+ logging
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ logging.zip
+
+
+
+ dev.sheldan.abstracto-templates.templates
+ webservices
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ webservices.zip
+
+
+
+ dev.sheldan.abstracto-templates.templates
+ remind
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ remind.zip
+
+
+
+ dev.sheldan.abstracto-templates.templates
+ suggestion
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ suggestion.zip
+
+
+
+ dev.sheldan.abstracto-templates.templates
+ link-embed
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ link-embed.zip
+
+
+
+ dev.sheldan.abstracto-templates.templates
+ starboard
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ starboard.zip
+
+
+
+ dev.sheldan.abstracto-templates.templates
+ moderation
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ moderation.zip
+
+
+
+ dev.sheldan.abstracto-templates.templates
+ entertainment
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ entertainment.zip
+
+
+
+ dev.sheldan.abstracto-templates.templates
+ custom-command
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ custom-command.zip
+
+
+
+ dev.sheldan.abstracto-templates.templates
+ statistic
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ statistic.zip
+
+
+
+ dev.sheldan.abstracto-templates.templates
+ giveaway
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ giveaway.zip
+
+
+
+
+ dev.sheldan.sissi.templates
+ quotes-templates
+ ${project.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ quotes.zip
+
+
+
+ dev.sheldan.sissi.templates
+ rss-news-templates
+ ${project.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ rss-news.zip
+
+
+
+ dev.sheldan.sissi.templates
+ meetup-templates
+ ${project.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ meetup.zip
+
+
+
+ dev.sheldan.sissi.templates
+ debra-templates
+ ${project.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ debra.zip
+
+
+
+
+
+ dev.sheldan.sissi.templates
+ moderation-customization-templates
+ ${project.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ moderation-custom.zip
+
+
+
+
+
+ dev.sheldan.abstracto-templates.translations
+ core
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ core.zip
+
+
+
+ dev.sheldan.abstracto-templates.translations
+ link-embed
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ link-embed.zip
+
+
+
+ dev.sheldan.abstracto-templates.translations
+ experience-tracking
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ experience-tracking.zip
+
+
+
+ dev.sheldan.abstracto-templates.translations
+ twitch
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ twitch.zip
+
+
+
+ dev.sheldan.abstracto-templates.translations
+ modmail
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ modmail.zip
+
+
+
+ dev.sheldan.abstracto-templates.translations
+ assignable-roles
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ assignable-roles.zip
+
+
+
+ dev.sheldan.abstracto-templates.translations
+ utility
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ utility.zip
+
+
+
+ dev.sheldan.abstracto-templates.translations
+ webservices
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ webservices.zip
+
+
+
+ dev.sheldan.abstracto-templates.translations
+ remind
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ remind.zip
+
+
+
+ dev.sheldan.abstracto-templates.translations
+ suggestion
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ suggestion.zip
+
+
+
+ dev.sheldan.abstracto-templates.translations
+ starboard
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ starboard.zip
+
+
+
+ dev.sheldan.abstracto-templates.translations
+ moderation
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ moderation.zip
+
+
+
+ dev.sheldan.abstracto-templates.translations
+ entertainment
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ entertainment.zip
+
+
+
+ dev.sheldan.abstracto-templates.translations
+ logging
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ logging.zip
+
+
+
+ dev.sheldan.abstracto-templates.translations
+ custom-command
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ custom-command.zip
+
+
+
+ dev.sheldan.abstracto-templates.translations
+ statistic
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ statistic.zip
+
+
+
+ dev.sheldan.abstracto-templates.translations
+ giveaway
+ ${abstracto.templates.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ giveaway.zip
+
+
+
+
+
+ dev.sheldan.sissi.templates.translations
+ quote-translations
+ ${project.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ quotes.zip
+
+
+
+ dev.sheldan.sissi.templates.translations
+ rss-news-translations
+ ${project.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ rss-news.zip
+
+
+
+ dev.sheldan.sissi.templates.translations
+ meetup-translations
+ ${project.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ meetup.zip
+
+
+
+ dev.sheldan.sissi.templates.translations
+ debra-translations
+ ${project.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ debra.zip
+
+
+
+
+
+
+ dev.sheldan.abstracto.scheduling
+ scheduling-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ scheduling.zip
+
+
+
+ dev.sheldan.abstracto.core
+ core-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ core.zip
+
+
+
+ dev.sheldan.abstracto.modules
+ link-embed-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ link-embed.zip
+
+
+
+ dev.sheldan.abstracto.modules
+ twitch-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ twitch.zip
+
+
+
+ dev.sheldan.abstracto.modules
+ experience-tracking-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ experience-tracking.zip
+
+
+
+ dev.sheldan.abstracto.modules
+ logging-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ logging.zip
+
+
+
+ dev.sheldan.abstracto.modules
+ starboard-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ starboard.zip
+
+
+
+ dev.sheldan.abstracto.modules
+ assignable-roles-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ assignable-roles.zip
+
+
+
+ dev.sheldan.abstracto.modules
+ utility-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ utility.zip
+
+
+
+ dev.sheldan.abstracto.modules
+ modmail-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ modmail.zip
+
+
+
+ dev.sheldan.abstracto.modules
+ utility-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ utility.zip
+
+
+
+ dev.sheldan.abstracto.modules
+ webservices-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ webservices.zip
+
+
+
+ dev.sheldan.abstracto.modules
+ remind-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ remind.zip
+
+
+
+ dev.sheldan.abstracto.modules
+ suggestion-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ suggestion.zip
+
+
+
+ dev.sheldan.abstracto.modules
+ moderation-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ moderation.zip
+
+
+
+ dev.sheldan.abstracto.modules
+ entertainment-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ entertainment.zip
+
+
+
+ dev.sheldan.abstracto.modules
+ custom-command-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ custom-command.zip
+
+
+
+
+
+ dev.sheldan.sissi.application.module
+ quotes
+ ${project.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ quotes.zip
+
+
+
+ dev.sheldan.sissi.application.module
+ meetup
+ ${project.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ meetup.zip
+
+
+
+ dev.sheldan.sissi.application.module
+ rss-news
+ ${project.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ rss-news.zip
+
+
+
+ dev.sheldan.sissi.application.module
+ debra
+ ${project.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ debra.zip
+
+
+
+ dev.sheldan.abstracto.modules
+ statistic-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ statistic.zip
+
+
+
+ dev.sheldan.abstracto.modules
+ giveaway-impl
+ ${abstracto.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ giveaway.zip
+
+
+
+
+
+ dev.sheldan.sissi.application.module.custom
+ moderation-custom
+ ${project.version}
+ liquibase
+ zip
+ true
+ ${file.basedir}/db-data/liquibase-artifacts/
+ moderation-custom.zip
+
+
+
+ dev.sheldan.sissi.templates.translations
+ moderation-customization-translations
+ ${project.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ moderation-custom.zip
+
+
+
+
+
+ dev.sheldan.sissi.templates
+ moderation-template-overrides
+ ${project.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ moderation-template-overrides.zip
+
+
+
+ dev.sheldan.sissi.templates
+ experience-template-overrides
+ ${project.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ experience-template-overrides.zip
+
+
+
+ dev.sheldan.sissi.templates
+ logging-template-overrides
+ ${project.version}
+ zip
+ true
+ ${file.basedir}/template-data/template-artifacts/
+ logging-template-overrides.zip
+
+
+
+
+
+ dev.sheldan.sissi.templates.translations.overrides
+ moderation-translation-overrides
+ ${project.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ moderation-translation-overrides.zip
+
+
+
+ dev.sheldan.sissi.templates.translations.overrides
+ experience-translation-overrides
+ ${project.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ experience-translation-overrides.zip
+
+
+
+ dev.sheldan.sissi.templates.translations.overrides
+ logging-translation-overrides
+ ${project.version}
+ zip
+ true
+ ${file.basedir}/template-data/translation-artifacts/
+ logging-translation-overrides.zip
+
+
+
+
+
+
+ unpack
+ process-resources
+
+ unpack
+
+
+
+
+ dev.sheldan.sissi.api
+ rest-api
+ ${abstracto.version}
+ zip
+ true
+ ${file.basedir}/rest-api/python
+
+
+
-
-
-
-
-
- dev.sheldan.sissi.application
- executable
- ${project.version}
- exec
- jar
- true
- ${file.basedir}/sissi/bot
- app.jar
-
-
-
-
- dev.sheldan.abstracto-templates.templates
- core
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- core.zip
-
-
-
- dev.sheldan.abstracto-templates.templates
- assignable-roles
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- assignable-roles.zip
-
-
-
- dev.sheldan.abstracto-templates.templates
- twitch
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- twitch.zip
-
-
-
- dev.sheldan.abstracto-templates.templates
- experience-tracking
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- experience-tracking.zip
-
-
-
- dev.sheldan.abstracto-templates.templates
- modmail
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- modmail.zip
-
-
-
- dev.sheldan.abstracto-templates.templates
- utility
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- utility.zip
-
-
-
- dev.sheldan.abstracto-templates.templates
- logging
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- logging.zip
-
-
-
- dev.sheldan.abstracto-templates.templates
- webservices
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- webservices.zip
-
-
-
- dev.sheldan.abstracto-templates.templates
- remind
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- remind.zip
-
-
-
- dev.sheldan.abstracto-templates.templates
- suggestion
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- suggestion.zip
-
-
-
- dev.sheldan.abstracto-templates.templates
- link-embed
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- link-embed.zip
-
-
-
- dev.sheldan.abstracto-templates.templates
- starboard
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- starboard.zip
-
-
-
- dev.sheldan.abstracto-templates.templates
- moderation
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- moderation.zip
-
-
-
- dev.sheldan.abstracto-templates.templates
- entertainment
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- entertainment.zip
-
-
-
- dev.sheldan.abstracto-templates.templates
- custom-command
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- custom-command.zip
-
-
-
- dev.sheldan.abstracto-templates.templates
- statistic
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- statistic.zip
-
-
-
- dev.sheldan.abstracto-templates.templates
- giveaway
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- giveaway.zip
-
-
-
-
- dev.sheldan.sissi.templates
- quotes-templates
- ${project.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- quotes.zip
-
-
-
- dev.sheldan.sissi.templates
- rss-news-templates
- ${project.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- rss-news.zip
-
-
-
- dev.sheldan.sissi.templates
- meetup-templates
- ${project.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- meetup.zip
-
-
-
- dev.sheldan.sissi.templates
- debra-templates
- ${project.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- debra.zip
-
-
-
-
-
- dev.sheldan.sissi.templates
- moderation-customization-templates
- ${project.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- moderation-custom.zip
-
-
-
-
-
- dev.sheldan.abstracto-templates.translations
- core
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- core.zip
-
-
-
- dev.sheldan.abstracto-templates.translations
- link-embed
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- link-embed.zip
-
-
-
- dev.sheldan.abstracto-templates.translations
- experience-tracking
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- experience-tracking.zip
-
-
-
- dev.sheldan.abstracto-templates.translations
- twitch
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- twitch.zip
-
-
-
- dev.sheldan.abstracto-templates.translations
- modmail
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- modmail.zip
-
-
-
- dev.sheldan.abstracto-templates.translations
- assignable-roles
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- assignable-roles.zip
-
-
-
- dev.sheldan.abstracto-templates.translations
- utility
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- utility.zip
-
-
-
- dev.sheldan.abstracto-templates.translations
- webservices
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- webservices.zip
-
-
-
- dev.sheldan.abstracto-templates.translations
- remind
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- remind.zip
-
-
-
- dev.sheldan.abstracto-templates.translations
- suggestion
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- suggestion.zip
-
-
-
- dev.sheldan.abstracto-templates.translations
- starboard
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- starboard.zip
-
-
-
- dev.sheldan.abstracto-templates.translations
- moderation
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- moderation.zip
-
-
-
- dev.sheldan.abstracto-templates.translations
- entertainment
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- entertainment.zip
-
-
-
- dev.sheldan.abstracto-templates.translations
- logging
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- logging.zip
-
-
-
- dev.sheldan.abstracto-templates.translations
- custom-command
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- custom-command.zip
-
-
-
- dev.sheldan.abstracto-templates.translations
- statistic
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- statistic.zip
-
-
-
- dev.sheldan.abstracto-templates.translations
- giveaway
- ${abstracto.templates.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- giveaway.zip
-
-
-
-
-
- dev.sheldan.sissi.templates.translations
- quote-translations
- ${project.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- quotes.zip
-
-
-
- dev.sheldan.sissi.templates.translations
- rss-news-translations
- ${project.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- rss-news.zip
-
-
-
- dev.sheldan.sissi.templates.translations
- meetup-translations
- ${project.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- meetup.zip
-
-
-
- dev.sheldan.sissi.templates.translations
- debra-translations
- ${project.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- debra.zip
-
-
-
-
-
-
- dev.sheldan.abstracto.scheduling
- scheduling-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- scheduling.zip
-
-
-
- dev.sheldan.abstracto.core
- core-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- core.zip
-
-
-
- dev.sheldan.abstracto.modules
- link-embed-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- link-embed.zip
-
-
-
- dev.sheldan.abstracto.modules
- twitch-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- twitch.zip
-
-
-
- dev.sheldan.abstracto.modules
- experience-tracking-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- experience-tracking.zip
-
-
-
- dev.sheldan.abstracto.modules
- logging-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- logging.zip
-
-
-
- dev.sheldan.abstracto.modules
- starboard-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- starboard.zip
-
-
-
- dev.sheldan.abstracto.modules
- assignable-roles-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- assignable-roles.zip
-
-
-
- dev.sheldan.abstracto.modules
- utility-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- utility.zip
-
-
-
- dev.sheldan.abstracto.modules
- modmail-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- modmail.zip
-
-
-
- dev.sheldan.abstracto.modules
- utility-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- utility.zip
-
-
-
- dev.sheldan.abstracto.modules
- webservices-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- webservices.zip
-
-
-
- dev.sheldan.abstracto.modules
- remind-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- remind.zip
-
-
-
- dev.sheldan.abstracto.modules
- suggestion-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- suggestion.zip
-
-
-
- dev.sheldan.abstracto.modules
- moderation-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- moderation.zip
-
-
-
- dev.sheldan.abstracto.modules
- entertainment-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- entertainment.zip
-
-
-
- dev.sheldan.abstracto.modules
- custom-command-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- custom-command.zip
-
-
-
-
-
- dev.sheldan.sissi.application.module
- quotes
- ${project.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- quotes.zip
-
-
-
- dev.sheldan.sissi.application.module
- meetup
- ${project.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- meetup.zip
-
-
-
- dev.sheldan.sissi.application.module
- rss-news
- ${project.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- rss-news.zip
-
-
-
- dev.sheldan.sissi.application.module
- debra
- ${project.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- debra.zip
-
-
-
- dev.sheldan.abstracto.modules
- statistic-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- statistic.zip
-
-
-
- dev.sheldan.abstracto.modules
- giveaway-impl
- ${abstracto.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- giveaway.zip
-
-
-
-
-
- dev.sheldan.sissi.application.module.custom
- moderation-custom
- ${project.version}
- liquibase
- zip
- true
- ${file.basedir}/db-data/liquibase-artifacts/
- moderation-custom.zip
-
-
-
- dev.sheldan.sissi.templates.translations
- moderation-customization-translations
- ${project.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- moderation-custom.zip
-
-
-
-
-
- dev.sheldan.sissi.templates
- moderation-template-overrides
- ${project.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- moderation-template-overrides.zip
-
-
-
- dev.sheldan.sissi.templates
- experience-template-overrides
- ${project.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- experience-template-overrides.zip
-
-
-
- dev.sheldan.sissi.templates
- logging-template-overrides
- ${project.version}
- zip
- true
- ${file.basedir}/template-data/template-artifacts/
- logging-template-overrides.zip
-
-
-
-
-
- dev.sheldan.sissi.templates.translations.overrides
- moderation-translation-overrides
- ${project.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- moderation-translation-overrides.zip
-
-
-
- dev.sheldan.sissi.templates.translations.overrides
- experience-translation-overrides
- ${project.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- experience-translation-overrides.zip
-
-
-
- dev.sheldan.sissi.templates.translations.overrides
- logging-translation-overrides
- ${project.version}
- zip
- true
- ${file.basedir}/template-data/translation-artifacts/
- logging-translation-overrides.zip
-
-
-
-
+
maven-resources-plugin
@@ -838,10 +858,26 @@
copy-resources
- src/main/docker/rest-api/python
+ src/main/docker/rest-api/python/custom
- ../../python/modules/rest-api/
+ ../../python/modules/rest-api/python
+ false
+
+
+
+
+
+ copy-resources-resources
+ validate
+
+ copy-resources
+
+
+ src/main/docker/rest-api/python/resources
+
+
+ ../../python/modules/rest-api/resources
false
diff --git a/deployment/image-packaging/src/main/docker/rest-api/wrapper/run.sh b/deployment/image-packaging/src/main/docker/rest-api/wrapper/run.sh
index 08464ea5..95dc52d5 100755
--- a/deployment/image-packaging/src/main/docker/rest-api/wrapper/run.sh
+++ b/deployment/image-packaging/src/main/docker/rest-api/wrapper/run.sh
@@ -1,4 +1,5 @@
#!/bin/sh
echo "Starting python server..."
-cd python && python3 -u main.py
\ No newline at end of file
+cd python
+python3 -u main.py
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 306d235c..875ca5d2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,7 @@
17
17
- 1.5.14
+ 1.5.15-SNAPSHOT
1.4.25
4.9.0
3.5.0
diff --git a/python/modules/rest-api/image_gen.py b/python/modules/rest-api/image_gen.py
deleted file mode 100644
index b9b42d29..00000000
--- a/python/modules/rest-api/image_gen.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from __main__ import app
-
-from PIL import Image, ImageDraw, ImageFont
-from flask import request
-
-from utils import serve_pil_image
-
-
-@app.route('/memes/doge/orangeSun/')
-def image_gen():
- text = request.args.get('text')
- with Image.open('res/img/semf_template.jpg') as im:
- d1 = ImageDraw.Draw(im)
- text_box_size = (300, 240)
- W, H = text_box_size
- font = ImageFont.truetype(f'Impact.ttf', 60)
- _, _, w, h = d1.textbbox((0, 0), text, font=font)
- d1.text(((W-w)/2 + 320, (H-h)/2 + 120), text, font=font, fill=(255, 255, 255))
- return serve_pil_image(im)
diff --git a/python/modules/rest-api/main.py b/python/modules/rest-api/main.py
deleted file mode 100644
index c76d3478..00000000
--- a/python/modules/rest-api/main.py
+++ /dev/null
@@ -1,23 +0,0 @@
-import logging
-import os
-
-from flask import Flask
-
-FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
-logging.basicConfig(encoding='utf-8', level=logging.INFO, format=FORMAT)
-template_dir = os.path.abspath('res/templates')
-app = Flask(__name__, template_folder=template_dir)
-
-# loads the api end points
-import debra
-import image_gen
-
-@app.route('/')
-def hello():
- return 'Hello, World?'
-
-
-if __name__ == "__main__":
- from waitress import serve
-
- serve(app, host="0.0.0.0", port=8080)
diff --git a/python/modules/rest-api/debra.py b/python/modules/rest-api/python/debra.py
similarity index 98%
rename from python/modules/rest-api/debra.py
rename to python/modules/rest-api/python/debra.py
index e4e1539e..a7e68743 100644
--- a/python/modules/rest-api/debra.py
+++ b/python/modules/rest-api/python/debra.py
@@ -6,7 +6,7 @@ import json
import logging
import uuid
from __main__ import app
-from utils import serve_pil_image
+from utils import flask_utils
from datetime import timezone, datetime
import pytz
@@ -130,7 +130,7 @@ def total_donations_image():
d1 = ImageDraw.Draw(img)
font = ImageFont.truetype(f'{parameters.font_name}.ttf', parameters.font_size)
d1.text((0, 0), f"{campaign_info['collected']}/{campaign_info['target']}€", fill=parameters.color, font=font)
- return serve_pil_image(img)
+ return flask_utils.serve_pil_image(img)
@app.route('/debra/image/endlessStream/end')
@@ -148,7 +148,7 @@ def endless_stream_image():
tz = pytz.timezone('Europe/Vienna')
end_time_formatted = end_time.astimezone(tz).strftime('%d.%m %H:%M')
d1.text((0, 0), f"{end_time_formatted}", fill=parameters.color, font=font)
- return serve_pil_image(img)
+ return flask_utils.serve_pil_image(img)
@app.route('/debra/image/endlessStream/end/html')
@@ -176,7 +176,7 @@ def endless_stream_remaining():
total_seconds = remaining_time.total_seconds()
remaining_time_formatted = f'{int(total_seconds // 3600):02d}:{int((total_seconds % 3600) // 60):02d}:{int(total_seconds % 60):02d}'
d1.text((0, 0), f"{remaining_time_formatted}", fill=parameters.color, font=font)
- return serve_pil_image(img)
+ return flask_utils.serve_pil_image(img)
@app.route('/debra/image/endlessStream/remaining/html')
@@ -242,7 +242,7 @@ def rendering_donation_image(donation_stats, parameters):
name = donation['firstName'] if not donation['anonymous'] else 'anonym'
d1.text((0, height * it), f"{donation['donationAmount']}€ von {name}", fill=parameters.color, font=font)
it += 1
- return serve_pil_image(img)
+ return flask_utils.serve_pil_image(img)
def parse_image_parameters() -> DonationImageGenerationParameters:
diff --git a/python/modules/rest-api/res/img/semf_template.jpg b/python/modules/rest-api/res/img/semf_template.jpg
deleted file mode 100644
index 61ac0aa0..00000000
Binary files a/python/modules/rest-api/res/img/semf_template.jpg and /dev/null differ
diff --git a/python/modules/rest-api/res/templates/image_refresh_wrapper.html b/python/modules/rest-api/res/templates/image_refresh_wrapper.html
deleted file mode 100644
index ca4920dd..00000000
--- a/python/modules/rest-api/res/templates/image_refresh_wrapper.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/python/modules/rest-api/resources/templates/image_refresh_wrapper.html b/python/modules/rest-api/resources/templates/image_refresh_wrapper.html
new file mode 100644
index 00000000..108c2e81
--- /dev/null
+++ b/python/modules/rest-api/resources/templates/image_refresh_wrapper.html
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/python/modules/rest-api/utils.py b/python/modules/rest-api/utils.py
deleted file mode 100644
index 08806db4..00000000
--- a/python/modules/rest-api/utils.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from io import BytesIO
-
-from flask import send_file
-
-
-def serve_pil_image(pil_img):
- img_io = BytesIO()
- pil_img.save(img_io, 'PNG')
- img_io.seek(0)
- return send_file(img_io, mimetype='image/png')
-
-
-class ValidationException(Exception):
- def __init__(self, provided_value, message):
- self.provided_value = provided_value
- self.message = message
- super().__init__(f'{self.message}: provided value: {provided_value}')