Compare commits

...

75 Commits

Author SHA1 Message Date
release-bot
9ada2c39a2 [maven-release-plugin] prepare release sissi-1.5.7 2025-07-13 20:13:08 +00:00
Sheldan
d61d378a6a [SIS-xxx] upgrading abstracto to get change for embed cleanup job 2025-07-13 22:09:41 +02:00
release-bot
09af4b516f Commit from GitHub Actions (Publishes a new version of Sissi) 2025-07-13 18:18:03 +00:00
release-bot
0e50a7b826 [maven-release-plugin] prepare for next development iteration 2025-07-13 18:13:04 +00:00
release-bot
d4dc118f66 [maven-release-plugin] prepare release sissi-1.5.6 2025-07-13 18:13:02 +00:00
Sheldan
be35a84dcf [SIS-xxx] upgrading to abstracto version supporting components v2
changing meetup and quote command responses to use components v2
changing column name of quote attachment
2025-07-13 20:09:45 +02:00
release-bot
5f6df14c24 [maven-release-plugin] prepare for next development iteration 2025-05-29 20:30:01 +00:00
release-bot
a60cf5d745 [maven-release-plugin] prepare release sissi-1.5.5 2025-05-29 20:30:00 +00:00
Sheldan
6e7ae8b36f [SIS-xxx] upgrading abstracto version and preparing to release 2025-05-29 22:26:07 +02:00
release-bot
3f22955df2 Commit from GitHub Actions (Publishes a new version of Sissi) 2025-04-01 12:12:50 +00:00
release-bot
938f9e5cd4 [maven-release-plugin] prepare for next development iteration 2025-04-01 12:07:29 +00:00
release-bot
45516f2458 [maven-release-plugin] prepare release sissi-1.5.4 2025-04-01 12:07:28 +00:00
Sheldan
9d9c8beb88 [SIS-xxx] upgrading abstracto version 2025-04-01 14:04:17 +02:00
Sheldan
427250e0bc [SIS-xxx] adding ability to select multiple decisions for meetup notify
making meetup notify slash command only
2025-03-31 22:32:04 +02:00
Sheldan
35d20be13b [SIS-xxx] updating privacy policy 2025-02-23 23:18:18 +01:00
Sheldan
693bc2cd2c [SIS-xxx] creating privacy policy 2025-02-23 23:08:24 +01:00
release-bot
c62757590a Commit from GitHub Actions (Publishes a new version of Sissi) 2025-02-23 20:37:20 +00:00
release-bot
1b2d326655 [maven-release-plugin] prepare for next development iteration 2025-02-23 20:32:54 +00:00
release-bot
180c2681e0 [maven-release-plugin] prepare release sissi-1.5.3 2025-02-23 20:32:53 +00:00
Sheldan
80d0552d65 [SIS-xxx] updating abstracto version to 1.6.4 2025-02-23 21:30:03 +01:00
release-bot
f76f8afef5 Commit from GitHub Actions (Publishes a new version of Sissi) 2025-02-15 19:14:59 +00:00
release-bot
8bf9fe6c45 [maven-release-plugin] prepare for next development iteration 2025-02-15 19:10:33 +00:00
release-bot
de8301750a [maven-release-plugin] prepare release sissi-1.5.2 2025-02-15 19:10:32 +00:00
Sheldan
555c60caad [SIS-xxx] updating abstracto version and setting default permissions for commands 2025-02-15 20:07:27 +01:00
release-bot
0481deae4a Commit from GitHub Actions (Publishes a new version of Sissi) 2025-02-04 22:53:36 +00:00
release-bot
edb887f51a [maven-release-plugin] prepare for next development iteration 2025-02-04 22:49:03 +00:00
release-bot
4dc424b87a [maven-release-plugin] prepare release sissi-1.5.1 2025-02-04 22:49:01 +00:00
Sheldan
290e59f8da [SIS-xxx] properly upgrading abstracto version 2025-02-04 23:46:16 +01:00
Sheldan
aca7e3449c [SIS-xxx] updating abstracto version to 1.6.2 and abstracto templates to 1.4.53 2025-02-04 23:45:22 +01:00
release-bot
aa1a7344de [maven-release-plugin] prepare for next development iteration 2025-02-04 21:06:14 +00:00
release-bot
faa85173cc [maven-release-plugin] prepare release sissi-1.5.0 2025-02-04 21:06:10 +00:00
Sheldan
2ee2907c72 [SIS-xxx] version re-set after failed release 2025-02-04 22:01:45 +01:00
release-bot
51d9ec2931 [maven-release-plugin] prepare for next development iteration 2025-02-04 20:37:22 +00:00
release-bot
dc801dc220 [maven-release-plugin] prepare release sissi-1.5.0 2025-02-04 20:37:20 +00:00
Sheldan
71aaa31fa1 [SIS-xxx] reducing size of bot image 2025-02-04 21:34:05 +01:00
Sheldan
80a56f4426 [SIS-xxx] preparing for minor release 2025-02-04 21:31:11 +01:00
Sheldan
9f3d1a0080 [SIS-xxx] updating to abstracto 1.6.0 for user installable commands support and general fixes 2025-02-04 21:29:03 +01:00
release-bot
ecf30513b1 Commit from GitHub Actions (Publishes a new version of Sissi) 2025-01-31 20:08:32 +00:00
release-bot
4f9369ce22 [maven-release-plugin] prepare for next development iteration 2025-01-31 20:04:02 +00:00
release-bot
c0369d6cf3 [maven-release-plugin] prepare release sissi-1.4.76 2025-01-31 20:04:01 +00:00
Sheldan
0bd4082f72 [SIS-xxx] updating login action version 2025-01-31 21:01:00 +01:00
release-bot
cda1b2d61c [maven-release-plugin] prepare for next development iteration 2025-01-31 19:34:55 +00:00
release-bot
e9d2ceb2af [maven-release-plugin] prepare release sissi-1.4.75 2025-01-31 19:34:53 +00:00
Sheldan
3c9e8606fa [SIS-xxx] year bump 2025-01-31 20:32:11 +01:00
release-bot
f726a4ca95 [maven-release-plugin] prepare for next development iteration 2025-01-31 18:22:30 +00:00
release-bot
311eb7d3fa [maven-release-plugin] prepare release sissi-1.4.74 2025-01-31 18:22:28 +00:00
Sheldan
7c47159508 [SIS-xxx] updating abstracto version for nicer emote stats output 2025-01-31 19:19:46 +01:00
release-bot
5edba2c037 Commit from GitHub Actions (Publishes a new version of Sissi) 2025-01-27 20:32:40 +00:00
release-bot
e6b35af78a [maven-release-plugin] prepare for next development iteration 2025-01-27 20:28:11 +00:00
release-bot
f11f74507d [maven-release-plugin] prepare release sissi-1.4.73 2025-01-27 20:28:09 +00:00
Sheldan
9bdc023e99 [SIS-xxx] updating abstracto version for emote stats output always showing all emotes 2025-01-27 21:25:23 +01:00
release-bot
f343a5a280 Commit from GitHub Actions (Publishes a new version of Sissi) 2025-01-27 00:56:04 +00:00
release-bot
2312892f0a [maven-release-plugin] prepare for next development iteration 2025-01-27 00:50:42 +00:00
release-bot
d69c4b5b79 [maven-release-plugin] prepare release sissi-1.4.72 2025-01-27 00:50:41 +00:00
Sheldan
2ffa0feb3f [SIS-xxx] updating abstracto version for reaction emote tracking 2025-01-27 01:47:06 +01:00
release-bot
5a3b7216fc Commit from GitHub Actions (Publishes a new version of Sissi) 2025-01-15 21:38:25 +00:00
release-bot
5676d7291c [maven-release-plugin] prepare for next development iteration 2025-01-15 21:34:09 +00:00
release-bot
f6452077f0 [maven-release-plugin] prepare release sissi-1.4.71 2025-01-15 21:34:08 +00:00
Sheldan
2602d073d3 [SIS-xxx] updating abstracto version to contain the currency conversion
adding configuration necessary for currency conversion
2025-01-15 22:31:12 +01:00
Sheldan
d85ebedfcc [SIS-xxx] updating appeal invite link 2025-01-03 08:50:30 +01:00
Sheldan
841bfc19ac [SIS-xxx] allowing an orf news post to have no title 2024-12-27 23:12:00 +01:00
release-bot
d02f2d3088 Commit from GitHub Actions (Publishes a new version of Sissi) 2024-12-26 00:13:20 +00:00
release-bot
c164969afb [maven-release-plugin] prepare for next development iteration 2024-12-26 00:08:18 +00:00
release-bot
af37454918 [maven-release-plugin] prepare release sissi-1.4.70 2024-12-26 00:08:16 +00:00
Sheldan
5e915713e2 [SIS-xxx] upgrading abstracto version to 1.5.56 2024-12-26 01:04:24 +01:00
release-bot
1f7ffc16e2 Commit from GitHub Actions (Publishes a new version of Sissi) 2024-12-25 19:46:27 +00:00
release-bot
3734d271f0 [maven-release-plugin] prepare for next development iteration 2024-12-25 19:42:25 +00:00
release-bot
f219c4ab54 [maven-release-plugin] prepare release sissi-1.4.69 2024-12-25 19:42:24 +00:00
Sheldan
2c984cd183 [SIS-xxx] properly upgrading abstracto version 2024-12-25 20:39:37 +01:00
release-bot
d06a1db108 Commit from GitHub Actions (Publishes a new version of Sissi) 2024-12-25 19:38:01 +00:00
release-bot
6125f39670 [maven-release-plugin] prepare for next development iteration 2024-12-25 19:33:46 +00:00
release-bot
c020a3a0f2 [maven-release-plugin] prepare release sissi-1.4.68 2024-12-25 19:33:45 +00:00
Sheldan
91a0265e6e [SIS-xxx] updating abstracto version to contain the giveaway key features
adding template for custom giveaway winner notification
2024-12-25 20:30:34 +01:00
release-bot
a822c5486f Commit from GitHub Actions (Publishes a new version of Sissi) 2024-12-01 12:55:53 +00:00
release-bot
fd50050870 [maven-release-plugin] prepare for next development iteration 2024-12-01 12:51:45 +00:00
105 changed files with 623 additions and 252 deletions

4
.env
View File

@@ -1,4 +1,4 @@
REGISTRY_PREFIX=harbor.sheldan.dev/sissi/
ABSTRACTO_PREFIX=harbor.sheldan.dev/abstracto/
VERSION=1.4.66
ABSTRACTO_VERSION=1.5.54
VERSION=1.5.6
ABSTRACTO_VERSION=1.6.10

View File

@@ -38,7 +38,7 @@ jobs:
maven-args: "-Dmaven.javadoc.skip=true -s settings.xml -DskipTests"
access-token: ${{ secrets.GITHUB_TOKEN }}
- name: Login to Harbor
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
registry: harbor.sheldan.dev
username: ${{ secrets.HARBOR_USERNAME }}

View File

@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2024 Sheldan
Copyright (c) 2025 Sheldan
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

164
PRIVACY_POLICY.md Normal file
View File

@@ -0,0 +1,164 @@
# Sissi Discord bot privacy policy
Last updated: 23.02.2025
## Description
The bot requires some information to function properly and in a reasonable way. These features heavily depend which features are enabled for which server, and this list just presents ALL of the features available.
The detailed list of what information is stored and processed is the following:
### General
* your Discord user ID (in combination with the server ID) is used to uniquely identify you and associate various properties, such as experience, level, opened modmail threads etc
* the IDs of the servers this bot is in
* the IDs of the channel in the servers this bot is in
* the names of channel groups which were given by their creator
* the server aliases which were created for commands
* the name of emotes which are used in the bot for convenience, if they are customized
* towards which channel (identified by ID) certain messages by the bot are posted. e.g. logging, news, starboard
* **no message content, username, channel name or role name is stored, except at the places where its mentioned**
* most of the stored records have a 'created' and 'updated' timestamp, in order to assist in examining bugs and malfunctions
* which commands have which cooldown in which channel group and in which channel group they are disabled
* which channel is in which channel group
* which role is allowed to execute which command
* which features are enabled
* which feature modes are enabled
* **aliases** created for the commands
* **information** necessary to handle components (buttons, select menus). This information is of varying nature and can be user identifiable information
* **emotes** which should be used for varying places (assignable roles, particular emotes which are overwriten, such as star board)
### Moderation
* **mute reason**, duration, mute date, who muted whom and in which message was the mute executed
* the names of filtered invite link servers in order to find out if it would be valid to allow the invite
* any configured allowed invite links the server ID and the actually used invite
* this is necessary in order to determine the server via its ID and allow other unknown invite links. The invite link is necessary as there is no way to map server ID to actual server
* configured profanity regexes
* reported profanities, including which message contains the profanity, and the message which was used to report the profanity, and whether it was identified as a true profanity
* **the text of notes regarding users**
* this is used to enable taking notes about users, and the content is stored directly
* meta information regarding warnings
* **reason for the warning**
* date of the warning
* the user who warned a user
* whether the warning was decayed and when
* the infractions of each user accompanied with **reason** (if available): warns, mutes, bans, kicks
### Giveaway
* the give away information: **description**, provider, manager, target date, winners and participants
### Embedded messages
* embedded message information
* this information includes who embedded which message in which channel and is deleted after a few days
### Emote usage tracking
* the name of emotes which are being tracked in the emote usage tracking system for purely convenience reasons
* **who** used which emote is **not** tracked
* at which day an emote was used how many times
* whether the emote was a reaction
### Reminder
* **the message content** in order to provide you with the reminder text
* the date it was created, and the date it is due
* the id of the message which contained the command
* whether you have been reminded
* the users who have joined the reminders
### Modmail
* the information that a modmail thread existed (creation, status and close date), and the IDs of the messages that have been sent in both directions
### News
* the ORF integration stores which posts from ORF RSS were already sent.
* which ORF RSS feeds were subscribed
### Polls
* the **text** of polls, the creator of polls and who made which decision in polls
### Starboard (best-of)
* the message which was the origin for the starboard post
* the message which was the resulting starboard post
* the author of the message and the amount of stars
* who reacted to a starboard post
* this is necessary to provide the information about 'top star giver' and to disallow duplicate starboard reactions
### Suggestion
* **the message content** of the message used to create the suggestion
* this was used for the message used to update the status of a suggestion, but this is currently disabled
* the author of the suggestion and the message which has been posted in the suggestions channel
* every suggestion will be deleted completely from the database a few days after it has reached a final state (rejected, denied, accepted)
* whether you voted for a suggestion and which decision you made
### Leveling system
* the amount of messages which were considered for the leveling system
* it only considers a message once per minute, so it does not directly translate to your absolute message count
* the amount of experience, and the experience level you have
* whether experience gain has been disabled for you
* the role you received because of the experience system
* which roles are configured to be used as experience roles and at which level they are assigned
* which roles are used to disable experience gain
### Entertainment
* PressF: for **what** the pressF was initiated by whom and who participated
### Economy
* The amount of credits for each user
### Assignable roles
* the names of assignable role places and assignable role button text, together with the associated emote markdown (if given)
* the assigned assignable roles for each member in order to provide the 'unique' assignable role functionality
* custom configured conditions to enable a level restriction
### Weekly items (for Miepscord)
* The text of the weekly art posts and the creator of them
### Sticky roles
* The roles a user had when leaving the server to be re-applied when re-joining (opt out possible)
### Meetups
* The meta data of meetups: text, location, creator and the decision of each user interacting with the meetup. This information will be deleted a few days after a meetup has passed/is cancelled.
### Twitch
* The ID/**name** of streamers to follow accompanied with their discord ID
* The start/end dates of their streams
* The individual sections of streams identified by title and game for updating the message
### Custom commands
* the **names** given to custom commands and the configured **response text**
## Grafana dashboard
There is also a [Grafana](https://grafana.com/) dashboard in order to inspect how the bot is operating.
The information visible in this dashboard is:
* message events
* Discord gateway ping
* starboard reactions
* amount of command executions
* emotes currently being processed for tracking
* embedded messages
* invite filter activity
* amount of experience which is currently being processed
All of this information cannot be linked to any user (or any server for that matter, if the bot would be in multiple servers) and is deleted after 15 days.
## How can I decide which information is collected?
It is not possible to opt-out of singular sub-services of the bot. Should you decide that your information should not be collected, please cease usage of the bot immediately (leave any guild the bot operates in).
_Should you decide to no longer utilize the bot, you may request your data to be erased within 30 days as per GDPR if you are a citizen of the EU. You can do this by sending a message to the user "sheldan" on Discord: GDPR Data removal <Username> <UserId>. If your request is incomplete, we cannot acknowledge it and therefore your data will not be removed. In order to identify authentic requests, please contact modmail beforehand by sending a direct message to the bot and stating your intention._
## Open source content
This bot uses the following open source libraries and frameworks:
* [abstracto](https://github.com/Sheldan/abstracto) is used as a base for this bot, providing most of the functionalities
* [JDA](https://github.com/DV8FromTheWorld/JDA/) The Discord API Wrapper used
* [Spring boot](https://github.com/spring-projects/spring-boot) is used as a framework to create standalone application in Java with Java EE methods. (including Dependency injection and more)
* [Hibernate](https://github.com/hibernate/hibernate-orm) is used as a reference implementation of JPA.
* [Freemarker](https://github.com/apache/freemarker) is used as a templating engine. This is used to provide internationalization for user facing text and enable dynamic embed configuration.
* [Ehcache](https://github.com/ehcache/ehcache3) is used as a caching implementation.
* [Lombok](https://github.com/rzwitserloot/lombok) is used as a framework in order to speed up creation of container classes and builders.
* [Quartz](https://github.com/quartz-scheduler/quartz) is used as a scheduling framework in order to provide functionalities which either require a delayed or cronjob behaviour.
* [Docker](https://github.com/docker) is used to package the application into a container and [k3s](https://k3s.io/) to orchestrate the containers
* [Liquibase](https://github.com/liquibase/liquibase) is used to manage changes to the database
* [Prometheus](https://prometheus.io) to scrap and collect the metrics about how the bot is operating
* [Grafana](https://grafana.com) to visualize metrics of the bot and [Loki](https://grafana.com/oss/loki/) for logging

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.application</groupId>
<artifactId>application</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>executable</artifactId>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi</groupId>
<artifactId>sissi</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>dev.sheldan.sissi.application.module.custom</groupId>
<artifactId>sissi-customizations</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<artifactId>image-generation-custom</artifactId>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.application.module.custom</groupId>
<artifactId>sissi-customizations</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.moderation.config.ModerationModuleDefinition;
import dev.sheldan.sissi.module.custom.moderation.config.ModerationCustomFeatureDefinition;
@@ -72,6 +73,7 @@ public class ModMode extends AbstractConditionableCommand {
.builder()
.enabled(true)
.rootCommandName(ModerationCustomSlashCommandNames.MODERATION)
.defaultPrivilege(SlashCommandPrivilegeLevels.ADMIN)
.commandName(MOD_MODE_COMMAND)
.build();

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>application</artifactId>
<groupId>dev.sheldan.sissi.application</groupId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.application</groupId>
<artifactId>sissi-modules</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.sissi.module.debra.config.DebraFeatureDefinition;
import dev.sheldan.sissi.module.debra.config.DebraSlashCommandNames;
@@ -58,6 +59,7 @@ public class DebraInfoButton extends AbstractConditionableCommand {
.enabled(true)
.rootCommandName(DebraSlashCommandNames.DEBRA_INTERNAL)
.commandName("debrainfobutton")
.defaultPrivilege(SlashCommandPrivilegeLevels.ADMIN)
.build();
Parameter targetChannelParameter = Parameter

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.application</groupId>
<artifactId>sissi-modules</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -10,6 +10,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.utils.FutureUtils;
import dev.sheldan.sissi.module.meetup.config.MeetupFeatureDefinition;
@@ -88,6 +89,7 @@ public class CancelMeetup extends AbstractConditionableCommand {
.builder()
.enabled(true)
.rootCommandName(MeetupSlashCommandNames.MEETUP)
.defaultPrivilege(SlashCommandPrivilegeLevels.ADMIN)
.commandName("cancel")
.build();

View File

@@ -10,6 +10,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.sissi.module.meetup.config.MeetupFeatureDefinition;
import dev.sheldan.sissi.module.meetup.config.MeetupSlashCommandNames;
@@ -131,6 +132,7 @@ public class ChangeMeetup extends AbstractConditionableCommand {
.builder()
.enabled(true)
.rootCommandName(MeetupSlashCommandNames.MEETUP)
.defaultPrivilege(SlashCommandPrivilegeLevels.ADMIN)
.commandName("changeMeetup")
.build();

View File

@@ -11,6 +11,7 @@ import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.ComponentService;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.core.templating.model.MessageToSend;
@@ -150,6 +151,7 @@ public class ChangeMeetupTime extends AbstractConditionableCommand {
.builder()
.enabled(true)
.rootCommandName(MeetupSlashCommandNames.MEETUP)
.defaultPrivilege(SlashCommandPrivilegeLevels.ADMIN)
.commandName("changeTime")
.build();

View File

@@ -12,6 +12,7 @@ import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.ComponentService;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
@@ -198,6 +199,7 @@ public class CreateMeetup extends AbstractConditionableCommand {
.builder()
.enabled(true)
.rootCommandName(MeetupSlashCommandNames.MEETUP)
.defaultPrivilege(SlashCommandPrivilegeLevels.ADMIN)
.commandName("create")
.build();

View File

@@ -10,6 +10,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.sissi.module.meetup.config.MeetupFeatureDefinition;
import dev.sheldan.sissi.module.meetup.config.MeetupSlashCommandNames;
@@ -22,6 +23,7 @@ import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEve
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@@ -48,19 +50,6 @@ public class NotifyMeetupParticipants extends AbstractConditionableCommand {
private static final String NOTIFY_MEETUP_PARTICIPANTS_COMMAND = "notifyMeetupParticipants";
private static final String NOTIFY_MEETUP_PARTICIPANTS_RESPONSE = "notifyMeetupParticipants_response";
@Override
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
List<Object> parameters = commandContext.getParameters().getParameters();
Long meetupId = (Long) parameters.get(0);
Meetup meetup = meetupManagementServiceBean.getMeetup(meetupId, commandContext.getGuild().getIdLong());
if(!meetup.getOrganizer().getUserReference().getId().equals(commandContext.getAuthor().getIdLong())) {
throw new NotMeetupOrganizerException();
}
String notificationMessage = (String) parameters.get(1);
return meetupServiceBean.notifyMeetupParticipants(meetup, notificationMessage, null)
.thenApply(unused -> CommandResult.fromSuccess());
}
@Override
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
Long meetupId = slashCommandParameterService.getCommandOption(MEETUP_ID_PARAMETER, event, Integer.class).longValue();
@@ -68,12 +57,15 @@ public class NotifyMeetupParticipants extends AbstractConditionableCommand {
if(!meetup.getOrganizer().getUserReference().getId().equals(event.getMember().getIdLong())) {
throw new NotMeetupOrganizerException();
}
MeetupDecision toNotify = null;
if(slashCommandParameterService.hasCommandOption(NOTIFICATION_MEETUP_DECISION, event)) {
toNotify = MeetupDecision.valueOf(slashCommandParameterService.getCommandOption(NOTIFICATION_MEETUP_DECISION, event, String.class));
List<MeetupDecision> decisionsToNotify = new ArrayList<>();
for (int i = 0; i < MeetupDecision.values().length; i++) {
if(slashCommandParameterService.hasCommandOption(NOTIFICATION_MEETUP_DECISION + "_" + i, event)) {
String choice = slashCommandParameterService.getCommandOption(NOTIFICATION_MEETUP_DECISION + "_" + i, event, String.class);
decisionsToNotify.add(MeetupDecision.valueOf(choice));
}
}
String notificationMessage = slashCommandParameterService.getCommandOption(NOTIFICATION_MESSAGE_PARAMETER, event, String.class);
return meetupServiceBean.notifyMeetupParticipants(meetup, notificationMessage, toNotify)
return meetupServiceBean.notifyMeetupParticipants(meetup, notificationMessage, decisionsToNotify)
.thenCompose(unused -> interactionService.replyEmbed(NOTIFY_MEETUP_PARTICIPANTS_RESPONSE, event))
.thenApply(unused -> CommandResult.fromSuccess());
}
@@ -105,6 +97,8 @@ public class NotifyMeetupParticipants extends AbstractConditionableCommand {
.templated(true)
.name(NOTIFICATION_MEETUP_DECISION)
.type(String.class)
.listSize(MeetupDecision.values().length)
.isListParam(true)
.optional(true)
.choices(meetupDecisions)
.slashCommandOnly(true)
@@ -120,6 +114,7 @@ public class NotifyMeetupParticipants extends AbstractConditionableCommand {
.builder()
.enabled(true)
.rootCommandName(MeetupSlashCommandNames.MEETUP)
.defaultPrivilege(SlashCommandPrivilegeLevels.ADMIN)
.commandName("notify")
.build();
@@ -129,6 +124,7 @@ public class NotifyMeetupParticipants extends AbstractConditionableCommand {
.templated(true)
.slashCommandConfig(slashCommandConfig)
.async(true)
.slashCommandOnly(true)
.supportsEmbedException(true)
.causesReaction(true)
.parameters(parameters)

View File

@@ -60,7 +60,7 @@ public class MeetupDecisionListener implements ButtonClickedListener {
MeetupMessageModel meetupMessageModel = meetupServiceBean.getMeetupMessageModel(meetup);
addParticipationToModel(meetupMessageModel, userInAServer, payload.getMeetupDecision());
MessageToSend messageToSend = meetupServiceBean.getMeetupMessage(meetupMessageModel, model.getServerId());
channelService.editEmbedMessageInAChannel(messageToSend.getEmbeds().get(0), model.getEvent().getChannel(), meetup.getMessageId())
channelService.editMessageInAChannelFuture(messageToSend, model.getEvent().getChannel(), meetup.getMessageId())
.thenAccept(message -> log.info("Updated message of meetup {} in channel {} in server {}.", meetup.getId().getId(), meetup.getMeetupChannel().getId(), meetup.getServer().getId()))
.exceptionally(throwable -> {
log.info("Failed to update message of meetup {} in channel {} in server {}.", meetup.getId().getId(), meetup.getMeetupChannel().getId(), meetup.getServer().getId(), throwable);

View File

@@ -293,8 +293,8 @@ public class MeetupServiceBean {
}
}
public CompletableFuture<Void> notifyMeetupParticipants(Meetup meetup, String message, MeetupDecision toNotify) {
List<MeetupDecision> decisionsToBeNotified = toNotify == null ? Arrays.asList(MeetupDecision.MAYBE, MeetupDecision.YES) : Arrays.asList(toNotify);
public CompletableFuture<Void> notifyMeetupParticipants(Meetup meetup, String message, List<MeetupDecision> toNotify) {
List<MeetupDecision> decisionsToBeNotified = toNotify == null || toNotify.isEmpty() ? Arrays.asList(MeetupDecision.MAYBE, MeetupDecision.YES) : toNotify;
List<MemberDisplay> participants = meetup
.getParticipants()
.stream()
@@ -372,7 +372,7 @@ public class MeetupServiceBean {
List<Long> userIdsToNotify = participants
.stream()
.map(meetupParticipator -> meetupParticipator.getParticipator().getUserReference().getId())
.collect(Collectors.toList());
.toList();
Long serverId = meetup.getServer().getId();
@@ -415,7 +415,7 @@ public class MeetupServiceBean {
List<Long> userInServerIds = participants
.stream()
.map(meetupParticipant -> meetupParticipant.getParticipator().getUserInServerId())
.collect(Collectors.toList());
.toList();
meetup
.getParticipants().removeIf(meetupParticipant -> userInServerIds.contains(meetupParticipant.getParticipator().getUserInServerId()));
MeetupMessageModel meetupMessageModel = getMeetupMessageModel(meetup);

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>sissi-modules</artifactId>
<groupId>dev.sheldan.sissi.application</groupId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.sissi.module.miepscord.MiepscordFeatureDefinition;
import dev.sheldan.sissi.module.miepscord.MiepscordSlashCommandNames;
@@ -65,6 +66,7 @@ public class AddTextItem extends AbstractConditionableCommand {
.builder()
.enabled(true)
.rootCommandName(MiepscordSlashCommandNames.MIEPSCORD_ROOT_NAME_CONFIG)
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
.groupName("weeklytexts")
.commandName("add")
.build();

View File

@@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.sissi.module.miepscord.MiepscordFeatureDefinition;
import dev.sheldan.sissi.module.miepscord.MiepscordSlashCommandNames;
@@ -66,6 +67,7 @@ public class RemoveTextItem extends AbstractConditionableCommand {
.builder()
.enabled(true)
.rootCommandName(MiepscordSlashCommandNames.MIEPSCORD_ROOT_NAME_CONFIG)
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
.groupName("weeklytexts")
.commandName("remove")
.build();

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.application</groupId>
<artifactId>application</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.application</groupId>
<artifactId>sissi-modules</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
@@ -79,6 +80,7 @@ public class QuoteDelete extends AbstractConditionableCommand {
.builder()
.enabled(true)
.rootCommandName(QuoteSlashCommandNames.QUOTE_INTERNAL)
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
.commandName("delete")
.build();

View File

@@ -1,6 +1,8 @@
package dev.sheldan.sissi.module.quotes.model.command;
import dev.sheldan.abstracto.core.models.ServerChannelMessage;
import dev.sheldan.abstracto.core.models.template.display.MemberDisplay;
import dev.sheldan.abstracto.core.models.template.display.UserDisplay;
import lombok.Builder;
import lombok.Getter;
@@ -11,14 +13,14 @@ import java.util.List;
@Builder
public class QuoteResponseModel {
private Long quoteId;
private String authorAvatarURL;
private String authorName;
private UserDisplay authorUserDisplay;
private MemberDisplay authorMemberDisplay;
private ServerChannelMessage quotedMessage;
private String quoteContent;
private List<String> imageAttachmentURLs;
private List<String> mediaAttachmentURLs;
private List<String> fileAttachmentURLs;
private String adderAvatarURL;
private String adderName;
private UserDisplay adderUserDisplay;
private MemberDisplay adderMemberDisplay;
private Instant creationDate;
private String sourceChannelName;
}

View File

@@ -41,8 +41,8 @@ public class QuoteAttachment {
@Getter
@Setter
@Column(name = "is_image", nullable = false)
@Column(name = "is_media", nullable = false)
@Builder.Default
private Boolean isImage = false;
private Boolean isMedia = false;
}

View File

@@ -4,6 +4,8 @@ import dev.sheldan.abstracto.core.models.ServerChannelMessage;
import dev.sheldan.abstracto.core.models.ServerUser;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.template.display.MemberDisplay;
import dev.sheldan.abstracto.core.models.template.display.UserDisplay;
import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.core.service.MemberService;
import dev.sheldan.abstracto.core.service.UserService;
@@ -103,21 +105,21 @@ public class QuoteServiceBean {
List<String> imageAttachments = quote
.getAttachments()
.stream()
.filter(QuoteAttachment::getIsImage)
.filter(QuoteAttachment::getIsMedia)
.map(QuoteAttachment::getUrl)
.collect(Collectors.toList());
List<String> fileAttachments = quote
.getAttachments()
.stream()
.filter(quoteAttachment -> !quoteAttachment.getIsImage())
.filter(quoteAttachment -> !quoteAttachment.getIsMedia())
.map(QuoteAttachment::getUrl)
.collect(Collectors.toList());
QuoteResponseModel.QuoteResponseModelBuilder modelBuilder = QuoteResponseModel
.builder()
.quoteContent(quote.getText())
.imageAttachmentURLs(imageAttachments)
.mediaAttachmentURLs(imageAttachments)
.quoteId(quote.getId())
.fileAttachmentURLs(fileAttachments)
.creationDate(quote.getCreated())
@@ -166,42 +168,14 @@ public class QuoteServiceBean {
.filter(user -> user.getIdLong() == quoteAdderUserId)
.findFirst()
.orElse(null);
String adderAvatar = Optional
.ofNullable(adderMember)
.map(member -> member.getUser().getAvatarUrl())
.orElse(Optional
.ofNullable(adderUser)
.map(User::getAvatarUrl)
.orElse(null));
String authorAvatar = Optional
.ofNullable(authorMember)
.map(member -> member.getUser().getAvatarUrl())
.orElse(Optional
.ofNullable(authorUser)
.map(User::getAvatarUrl)
.orElse(null));
String adderName = Optional
.ofNullable(adderMember)
.map(Member::getEffectiveName)
.orElse(Optional
.ofNullable(adderUser)
.map(User::getName)
.orElse(null));
String authorName = Optional
.ofNullable(authorMember)
.map(Member::getEffectiveName)
.orElse(Optional
.ofNullable(authorUser)
.map(User::getName)
.orElse(null));
String channelName = sourceChannel
.map(Channel::getName)
.orElse(null);
QuoteResponseModel model = modelBuilder
.adderAvatarURL(adderAvatar)
.authorAvatarURL(authorAvatar)
.adderName(adderName)
.authorName(authorName)
.authorMemberDisplay(authorMember != null ? MemberDisplay.fromMember(authorMember) : null)
.authorUserDisplay(authorUser != null ? UserDisplay.fromUser(authorUser) : UserDisplay.fromServerUser(ServerUser.fromId(serverId, quotedUserId)))
.adderMemberDisplay(adderMember != null ? MemberDisplay.fromMember(adderMember) : null)
.adderUserDisplay(adderUser != null ? UserDisplay.fromUser(adderUser) : UserDisplay.fromServerUser(ServerUser.fromId(serverId, quoteAdderUserId)))
.sourceChannelName(channelName)
.build();
return templateService.renderEmbedTemplate(QUOTE_RESPONSE_TEMPLATE_KEY, model, serverId);
@@ -260,7 +234,7 @@ public class QuoteServiceBean {
List<Pair<String, Boolean>> attachments = quoteMessage
.getAttachments()
.stream()
.map(attachment -> Pair.of(attachment.getProxyUrl(), attachment.isImage()))
.map(attachment -> Pair.of(attachment.getProxyUrl(), attachment.isImage() || attachment.isVideo()))
.toList();
return quoteManagementService.createQuote(author, adder, quoteMessage.getContentDisplay(), ServerChannelMessage.fromMessage(quoteMessage), attachments);
}

View File

@@ -45,7 +45,7 @@ public class QuoteManagementService {
.url(stringBooleanPair.getLeft())
.quote(quote)
.server(adder.getServerReference())
.isImage(stringBooleanPair.getRight())
.isMedia(stringBooleanPair.getRight())
.build())
.toList();

View File

@@ -0,0 +1,6 @@
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
<include file="tables/tables.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -0,0 +1,12 @@
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
<changeSet author="Sheldan" id="quote_attachment-rename-media-column">
<renameColumn
tableName="quote_attachment"
newColumnName="is_media"
oldColumnName="is_image" />
</changeSet>
</databaseChangeLog>

View File

@@ -0,0 +1,6 @@
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
<include file="quote_attachment.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -5,4 +5,5 @@
<include file="1.0.2/collection.xml" relativeToChangelogFile="true"/>
<include file="1.4.56/collection.xml" relativeToChangelogFile="true"/>
<include file="1.4.57/collection.xml" relativeToChangelogFile="true"/>
<include file="1.5.6/collection.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>sissi-modules</artifactId>
<groupId>dev.sheldan.sissi.application</groupId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
@@ -70,6 +71,7 @@ public class CreateNewsCategory extends AbstractConditionableCommand {
.builder()
.enabled(true)
.rootCommandName(RssNewsSlashCommandNames.RSS_NEWS)
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
.groupName("category")
.commandName("create")
.build();

View File

@@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.sissi.module.rssnews.config.RssNewsFeatureDefinition;
@@ -97,6 +98,7 @@ public class CreateNewsCategoryChannelMapping extends AbstractConditionableComma
.builder()
.enabled(true)
.rootCommandName(RssNewsSlashCommandNames.RSS_NEWS)
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
.groupName("categorychannelmapping")
.commandName("create")
.build();

View File

@@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.sissi.module.rssnews.config.RssNewsFeatureDefinition;
@@ -127,6 +128,7 @@ public class CreateNewsCategorySubscription extends AbstractConditionableCommand
.builder()
.enabled(true)
.rootCommandName(RssNewsSlashCommandNames.RSS_NEWS)
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
.groupName("categorysubscription")
.commandName("create")
.build();

View File

@@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
@@ -70,6 +71,7 @@ public class DeleteNewsCategory extends AbstractConditionableCommand {
.builder()
.enabled(true)
.rootCommandName(RssNewsSlashCommandNames.RSS_NEWS)
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
.groupName("category")
.commandName("delete")
.build();

View File

@@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.sissi.module.rssnews.config.RssNewsFeatureDefinition;
@@ -96,6 +97,7 @@ public class DeleteNewsCategoryChannelMapping extends AbstractConditionableComma
.builder()
.enabled(true)
.rootCommandName(RssNewsSlashCommandNames.RSS_NEWS)
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
.groupName("categorychannelmapping")
.commandName("delete")
.build();

View File

@@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
import dev.sheldan.sissi.module.rssnews.config.RssNewsFeatureDefinition;
@@ -127,6 +128,7 @@ public class DeleteNewsCategorySubscription extends AbstractConditionableCommand
.builder()
.enabled(true)
.rootCommandName(RssNewsSlashCommandNames.RSS_NEWS)
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
.groupName("categorysubscription")
.commandName("delete")
.build();

View File

@@ -8,6 +8,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureDefinition;
import dev.sheldan.abstracto.core.interaction.InteractionService;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
import dev.sheldan.sissi.module.rssnews.config.RssNewsFeatureDefinition;
import dev.sheldan.sissi.module.rssnews.config.RssNewsSlashCommandNames;
import dev.sheldan.sissi.module.rssnews.model.template.NewsCategoryInfo;
@@ -54,6 +55,7 @@ public class ShowNewsCategories extends AbstractConditionableCommand {
.builder()
.enabled(true)
.rootCommandName(RssNewsSlashCommandNames.RSS_NEWS)
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
.groupName("category")
.commandName("show")
.build();

View File

@@ -2,4 +2,4 @@ apiVersion: v2
name: sissi
description: A Helm chart for Kubernetes
type: application
version: 1.4.66
version: 1.5.6

View File

@@ -7,4 +7,5 @@ data:
youtubeApiKey: {{ $.Values.apiKeys.youtube.apiKey | b64enc }}
twitchClientId: {{ $.Values.apiKeys.twitch.clientId | b64enc }}
twitchSecret: {{ $.Values.apiKeys.twitch.secret | b64enc }}
openWeatherMapApiKey: {{ $.Values.apiKeys.openWeatherMap.apiKey | b64enc }}
openWeatherMapApiKey: {{ $.Values.apiKeys.openWeatherMap.apiKey | b64enc }}
freeCurrencyApiApiKey: {{ $.Values.apiKeys.freeCurrencyApi.apiKey | b64enc }}

View File

@@ -78,6 +78,11 @@ spec:
secretKeyRef:
name: api-keys
key: openWeatherMapApiKey
- name: FREE_CURRENCY_API_API_KEY
valueFrom:
secretKeyRef:
name: api-keys
key: freeCurrencyApiApiKey
- name: TWITCH_CLIENT_ID
valueFrom:
secretKeyRef:

View File

@@ -3,7 +3,7 @@ bot:
repository: harbor.sheldan.dev/sissi
pullPolicy: Always
image: sissi-bot
tag: 1.4.66
tag: 1.5.6
livenessProbe:
initialDelaySeconds: 60
periodSeconds: 5
@@ -22,7 +22,7 @@ restApi:
repository: harbor.sheldan.dev/sissi
pullPolicy: Always
image: sissi-rest-api
tag: 1.4.66
tag: 1.5.6
podAnnotations: {}
podSecurityContext: {}
securityContext: {}
@@ -62,7 +62,7 @@ privateRestApi:
repository: harbor.sheldan.dev/sissi
pullPolicy: Always
image: sissi-private-rest-api
tag: 1.4.66
tag: 1.5.6
podAnnotations: {}
podSecurityContext: {}
securityContext: {}
@@ -93,23 +93,23 @@ templateDeployment:
repository: harbor.sheldan.dev/abstracto
pullPolicy: Always
image: abstracto-template-deployment
tag: 1.5.54
tag: 1.6.10
templateDeploymentData:
repository: harbor.sheldan.dev/sissi
pullPolicy: Always
image: sissi-template-data
tag: 1.4.66
tag: 1.5.6
dbConfigDeployment:
enabled: true
repository: harbor.sheldan.dev/abstracto
pullPolicy: Always
image: abstracto-db-deployment
tag: 1.5.54
tag: 1.6.10
dbConfigDeploymentData:
repository: harbor.sheldan.dev/sissi
pullPolicy: Always
image: sissi-db-data
tag: 1.4.66
tag: 1.5.6
dbCredentials:
host: null
port: null
@@ -138,6 +138,8 @@ apiKeys:
twitch:
secret: null
clientId: null
freeCurrencyApi:
apiKey: null
imagePullSecrets: null
nameOverride: ''
fullnameOverride: ''

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi</groupId>
<artifactId>deployment</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -917,6 +917,16 @@
<destFileName>logging-translation-overrides.zip</destFileName>
</artifactItem>
<artifactItem>
<groupId>dev.sheldan.sissi.templates.translations.overrides</groupId>
<artifactId>giveaway-translation-overrides</artifactId>
<version>${project.version}</version>
<type>zip</type>
<overWrite>true</overWrite>
<outputDirectory>${file.basedir}/template-data/translation-artifacts/</outputDirectory>
<destFileName>giveaway-translation-overrides.zip</destFileName>
</artifactItem>
</artifactItems>
</configuration>
</execution>

View File

@@ -1,8 +1,32 @@
FROM amazoncorretto:17.0.8-alpine3.18
MAINTAINER Sheldan
VOLUME /tmp
ADD config/* /config/
ADD wrapper/*.sh /
# https://careers.wolt.com/en/blog/tech/how-to-reduce-jvm-docker-image-size
FROM amazoncorretto:17.0.14-alpine3.20 AS corretto-jdk
RUN apk add --no-cache binutils
RUN $JAVA_HOME/bin/jlink \
--verbose \
--add-modules ALL-MODULE-PATH \
--strip-debug \
--no-man-pages \
--no-header-files \
--compress=2 \
--output /customjre
FROM alpine:3.21
ENV JAVA_HOME=/jre
ENV PATH="${JAVA_HOME}/bin:${PATH}"
COPY --from=corretto-jdk /customjre $JAVA_HOME
ARG APPLICATION_USER=appuser
RUN adduser --no-create-home -u 1000 -D $APPLICATION_USER
RUN mkdir /app && chown -R $APPLICATION_USER /app
COPY --chown=1000:1000 config/* /config/
COPY --chown=1000:1000 wrapper/*.sh /
RUN chmod +x /start.sh
ADD bot/app.jar /app.jar
COPY --chown=1000:1000 bot/app.jar /app.jar
CMD ["/start.sh"]

View File

@@ -14,7 +14,7 @@
"image-generation",
"quotes", "meetup", "debra", "rss-news", "miepscord",
"moderation-custom",
"moderation-translation-overrides", "experience-translation-overrides", "logging-translation-overrides"
"moderation-translation-overrides", "experience-translation-overrides", "logging-translation-overrides", "giveaway-translation-overrides"
]
}

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi</groupId>
<artifactId>sissi</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -13,13 +13,13 @@
<groupId>dev.sheldan.sissi</groupId>
<artifactId>sissi</artifactId>
<name>Sissi</name>
<version>1.4.67</version>
<version>1.5.7</version>
<properties>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.source>17</maven.compiler.source>
<abstracto.version>1.5.54</abstracto.version>
<abstracto.templates.version>1.4.47</abstracto.templates.version>
<abstracto.version>1.6.10</abstracto.version>
<abstracto.templates.version>1.4.58</abstracto.templates.version>
<apache-jena.version>4.9.0</apache-jena.version>
<rssreader.version>3.5.0</rssreader.version>
</properties>
@@ -73,7 +73,7 @@
<connection>scm:git:${project.scm.url}</connection>
<developerConnection>scm:git:${project.scm.url}</developerConnection>
<url>https://github.com/Sheldan/Sissi.git</url>
<tag>sissi-1.4.67</tag>
<tag>sissi-1.5.7</tag>
</scm>
</project>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi</groupId>
<artifactId>sissi</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -4,7 +4,7 @@
<parent>
<artifactId>customization-templates</artifactId>
<groupId>dev.sheldan.sissi.templates</groupId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<artifactId>image-generation-customization-templates</artifactId>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.templates</groupId>
<artifactId>customization-templates</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>sissi-templates</artifactId>
<groupId>dev.sheldan.sissi.templates</groupId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>module-templates</artifactId>
<groupId>dev.sheldan.sissi.templates</groupId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>module-templates</artifactId>
<groupId>dev.sheldan.sissi.templates</groupId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -1,33 +1,30 @@
<#include "format_instant">
{
"embeds": [
"components": [
{
<#include "abstracto_color">,
"title": {
"title": "${topic?json_string}"
},
"description": "<@format_instant_long_date_time instant=meetupTime/>
${description?json_string}"
<#if location?? && location != "%22%22">,
"fields": [
{
"name": "<@safe_include "createMeetup_confirmation_location_field_title"/>",
"value": "https://www.google.com/maps?q=${location?json_string}"
}
]
</#if>
}
],
"buttons": [
{
"label": "<@safe_include "createMeetup_confirm_button_label"/>",
"id": "${confirmationId}",
"buttonStyle": "success"
<#assign hasLocation=location?? && location != "%22%22">
"type": "textDisplay",
"content": "<#include "createMeetup_meetup_information">"
},
{
"label": "<@safe_include "createMeetup_cancel_button_label"/>",
"id": "${cancelId}",
"buttonStyle": "danger"
"type": "actionRow",
"actionRowItems": [
{
"label": "<@safe_include "createMeetup_confirm_button_label"/>",
"id": "${confirmationId}",
"buttonStyle": "success",
"type": "button"
},
{
"label": "<@safe_include "createMeetup_cancel_button_label"/>",
"id": "${cancelId}",
"buttonStyle": "danger",
"type": "button"
}
]
}
]
],
"messageConfig": {
"useComponentsV2": true
}
}

View File

@@ -1,10 +1,36 @@
<#include "format_instant">
{
"embeds": [
"components": [
<#list meetups as meetup>
<#assign meetup=meetup>
<#assign topic=meetup.topic>
<#assign time><@format_instant_long_date_time instant=meetup.meetupTime/>
</#assign><#assign timeRelative><@format_instant_relative instant=meetup.meetupTime/></#assign>
<#assign link=meetup.meetupMessage.jumpUrl>
{
<#include "abstracto_color">,
"description": "<#list meetups as meetup><#assign meetup=meetup><#assign topic=meetup.topic><#assign time><@format_instant_long_date_time instant=meetup.meetupTime/></#assign><#assign timeRelative><@format_instant_relative instant=meetup.meetupTime/></#assign><#assign link=meetup.meetupMessage.jumpUrl><#include "meetup_list_meetup_display">
<#else><#include "meetup_list_no_meetups"></#list>"
"type": "section",
"components": [
{
"type": "textDisplay",
"content": "<#include "meetup_list_meetup_display">"
}
]
,"accessory": {
"type": "button",
"label": "<#include "meetup_list_jump_button_label"/>",
"url": "${link}",
"buttonStyle": "link"
}
}
]
<#sep>,</#sep>
<#else>
{
"type": "textDisplay",
"content": "<#include "meetup_list_no_meetups">"
}
</#list>
],
"messageConfig": {
"useComponentsV2": true
}
}

View File

@@ -1,63 +1,74 @@
<#include "format_instant">
{
<#assign roleMention="<@&371419588619141121>"/>
"additionalMessage": "${roleMention?json_string}",
"embeds": [
"components": [
{
"type": "textDisplay",
<#assign roleMention="<@&371419588619141121>"/>
"content": "<#if cancelled>~~</#if>${roleMention?json_string} ${topic?json_string} - <@safe_include "meetup_message_id_display"/><#if cancelled>~~</#if>"
},
<#if description?has_content>
{
<#assign descriptionText>${description?json_string}</#assign>
<#assign organizerText>${organizer.memberMention}</#assign>
"type": "textDisplay",
"content": "<#if cancelled>~~</#if><@safe_include "meetup_description_component"/><#if cancelled>~~</#if>"
},
</#if>
{
<#include "abstracto_color">,
"title": {
"title": "${topic?json_string} - <@safe_include "meetup_message_id_display"/>"
},
<#assign time><@format_instant_long_date_time instant=meetupTime/></#assign>
<#assign timeRelative><@format_instant_relative instant=meetupTime/></#assign>
<#assign organizerText>${organizer.memberMention}</#assign>
<#assign meetupId=meetupId/>
<#assign descriptionText>${description?json_string}</#assign>
<#assign participantsText> (${participants?size}) <#list participants as member>${member.memberMention}<#sep>, </#sep><#else><#include "meetup_message_no_member"></#list></#assign>
<#assign maybeParticipantsText> (${maybeParticipants?size}) <#list maybeParticipants as member>${member.memberMention}<#sep>, </#sep><#else><#include "meetup_message_no_member"></#list></#assign>
<#assign noTimeParticipantsText> (${noTimeParticipants?size}) <#list noTimeParticipants as member>${member.memberMention}<#sep>, </#sep><#else><#include "meetup_message_no_member"></#list></#assign>
<#assign declinedParticipantsText> (${declinedParticipants?size}) <#list declinedParticipants as member>${member.memberMention}<#sep>, </#sep><#else><#include "meetup_message_no_member"></#list></#assign>
"description": "<#if cancelled>~~</#if><@safe_include "meetup_display_description"/><#if cancelled>~~</#if>"
}
],
"buttons": [
{
"label": "<@safe_include "meetup_message_yes_button_label"/>",
"id": "${yesId}",
"buttonStyle": "success"
},
{
"label": "<@safe_include "meetup_message_maybe_button_label"/>",
"id": "${maybeId}",
"buttonStyle": "secondary"
},
{
"label": "<@safe_include "meetup_message_no_time_button_label"/>",
"id": "${noTimeId}",
"buttonStyle": "danger"
},
{
"label": "<@safe_include "meetup_message_no_button_label"/>",
"id": "${noId}",
"buttonStyle": "danger"
}
<#if location?? && location != "%22%22">,
{
"label": "<@safe_include "meetup_message_location_button_label"/>",
"url": "https://www.google.com/maps?q=${location?json_string}",
"buttonStyle": "link"
"type": "section",
"components": [
{
"type": "textDisplay",
"content": "<@safe_include "meetup_display_time_component"/>"
}
]
<#if location?? && location != "%22%22">
,"accessory": {
"type": "button",
"label": "<@safe_include "meetup_message_location_button_label"/>",
"url": "https://www.google.com/maps?q=${location?json_string}",
"buttonStyle": "link"
}
</#if>
}
<#macro decision_component button_id button_style label_template content_template user>
{
"type": "section",
"components": [
{
"type": "textDisplay",
"content": "<@safe_include content_template/>"
}
]
,"accessory": {
"type": "button",
"id": "${button_id}",
"label": "<@safe_include label_template/>",
"buttonStyle": "${button_style}"
}
}
</#macro>
<#assign participantsText> (${participants?size}) <#list participants as member>${member.memberMention}<#sep>, </#sep><#else><#include "meetup_message_no_member"></#list></#assign>
<#assign maybeParticipantsText> (${maybeParticipants?size}) <#list maybeParticipants as member>${member.memberMention}<#sep>, </#sep><#else><#include "meetup_message_no_member"></#list></#assign>
<#assign noTimeParticipantsText> (${noTimeParticipants?size}) <#list noTimeParticipants as member>${member.memberMention}<#sep>, </#sep><#else><#include "meetup_message_no_member"></#list></#assign>
<#assign declinedParticipantsText> (${declinedParticipants?size}) <#list declinedParticipants as member>${member.memberMention}<#sep>, </#sep><#else><#include "meetup_message_no_member"></#list></#assign>
,<@decision_component yesId "success" "meetup_message_yes_button_label" "meetup_user_display_participants" participantsText/>
,<@decision_component maybeId "secondary" "meetup_message_maybe_button_label" "meetup_user_display_maybe_participants" maybeParticipantsText/>
,<@decision_component noId "danger" "meetup_message_no_button_label" "meetup_user_display_declined_participants" declinedParticipantsText/>
,<@decision_component noTimeId "danger" "meetup_message_no_time_button_label" "meetup_user_display_no_time_participants" noTimeParticipantsText/>
<#if meetupIcsModel.attachIcsFile>
,{
"type": "fileDisplay",
"fileName": "<@safe_include "meetup_ics_file_name"/>.ics",
"fileContent": "<@safe_include "meetup_ice_file_download"/>"
}
</#if>
],
<#if meetupIcsModel.attachIcsFile>
"files": [
{
"fileName": "<@safe_include "meetup_ics_file_name"/>.ics",
"fileContent": "<@safe_include "meetup_ice_file_download"/>"
}
],
</#if>
"messageConfig": {
"allowsRoleMention": true
"allowsRoleMention": true,
"allowsUserMention": false,
"useComponentsV2": true
}
}

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>dev.sheldan.sissi.templates</groupId>
<artifactId>module-templates</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<artifactId>miepscord-templates</artifactId>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.templates</groupId>
<artifactId>sissi-templates</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.templates</groupId>
<artifactId>module-templates</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -1,26 +1,66 @@
<#include "format_instant">
{
"embeds": [
"components": [
{
<#include "abstracto_color">,
"author": {
<#assign authorName><@default_template_if_null authorName "quote_response_default_author_name"/></#assign>
<#assign channelName><@default_template_if_null sourceChannelName "quote_response_default_channel_name"/></#assign>
"name": "<@safe_include "quote_response_header_author_name"/>"
<#if authorAvatarURL??>,"avatar": "${authorAvatarURL}"</#if>
},
<#assign quoteId=quoteId>
<#assign quoteDescription=quoteContent>
<#assign authorName><#if authorMemberDisplay?has_content>${authorMemberDisplay.name}<#elseif authorUserDisplay?has_content>${authorUserDisplay.name}<#else><@safe_include "quote_response_default_author_name"/></#if></#assign>
<#assign adderUserName><#if adderMemberDisplay?has_content>${adderMemberDisplay.name}<#elseif adderUserDisplay?has_content>${adderMemberDisplay.name}<#else><@safe_include "quote_response_default_adder_name"/></#if></#assign>
<#assign channelName><@default_template_if_null sourceChannelName "quote_response_default_channel_name"/></#assign>
<#assign creationDate><@format_instant_date_time instant=creationDate/></#assign>
"type": "textDisplay",
"content": "<@safe_include "quote_response_header_author_name"/>"
},
{
"type": "section",
"components": [
{
<#assign quoteId=quoteId>
"type": "textDisplay",
"content": "<@safe_include "quote_response_title"/>"
}
],
<#assign quoteJumpUrl=quotedMessage.jumpUrl>
"description": "<@safe_include "quote_response_description"/>",
"footer": {
<#assign adderUserName><@default_template_if_null adderName "quote_response_default_adder_name"/></#assign>
"text": "<@safe_include "quote_response_footer_adder_name" />"
<#if adderAvatarURL??>,"icon": "${adderAvatarURL}"</#if>
},
<#if imageAttachmentURLs?size = 1>
"imageUrl": "${imageAttachmentURLs[0]}",
"accessory": {
"type": "button",
"label": "<@safe_include "quote_response_jump_label"/>",
"url": "${quoteJumpUrl}",
"buttonStyle": "link"
}
},
{
"type": "container",
"components": [
<#assign hasContent=false>
<#if quoteContent?has_content>
<#assign hasContent=true>
{
"type": "textDisplay",
<#assign quoteDescription=quoteContent>
"content": "${quoteDescription}"
}
</#if>
"timeStamp": "${creationDate}"
<#if mediaAttachmentURLs?size gt 0>
<#assign hasContent=true>
,{
"type": "mediaGallery",
"images": [
<#list mediaAttachmentURLs as image>
{
"url": "${image}"
}<#sep>,</#list>
]
}
</#if>
<#if hasContent==false>
{
"type": "textDisplay",
"content": "<@safe_include "quote_response_no_content"/>"
}
</#if>
]
}
]
],
"messageConfig": {
"allowsUserMention": false,
"useComponentsV2": true
}
}

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>module-templates</artifactId>
<groupId>dev.sheldan.sissi.templates</groupId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -6,7 +6,9 @@
"name": "<@safe_include "orf_news_post_author"/>"
},
"title": {
<#if title?has_content>
"title": "${title?json_string}",
</#if>
"url": "${url}"
},
"description": "${url?json_string}<#if description?has_content>\n${description?json_string}</#if>",

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.templates</groupId>
<artifactId>templates</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.templates</groupId>
<artifactId>template-overrides</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.templates</groupId>
<artifactId>template-overrides</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.templates</groupId>
<artifactId>template-overrides</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>sissi-templates</artifactId>
<groupId>dev.sheldan.sissi.templates</groupId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.templates.translations</groupId>
<artifactId>customization-translations</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>sissi-translations</artifactId>
<groupId>dev.sheldan.sissi.templates.translations</groupId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>module-translations</artifactId>
<groupId>dev.sheldan.sissi.templates.translations</groupId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.templates.translations</groupId>
<artifactId>module-translations</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -0,0 +1,5 @@
${topic?json_string} - <@format_instant_long_date_time instant=meetupTime/>
${description?json_string}
<#if hasLocation>https://www.google.com/maps?q=${location?json_string}</#if>

View File

@@ -1,3 +1,2 @@
Time: ${time} ${timeRelative}
Link: [here](${link})
Meetup Topic: `${topic?json_string}`

View File

@@ -0,0 +1,3 @@
Description: ${descriptionText}
Organized by: ${organizerText}

View File

@@ -1,11 +0,0 @@
Time: ${time} ${timeRelative}
<#if descriptionText?hasContent>Description: ${descriptionText}</#if>
Organized by: ${organizerText}
Participants: ${participantsText}
Maybe: ${maybeParticipantsText}
Declined: ${declinedParticipantsText}
No time: ${noTimeParticipantsText}

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>dev.sheldan.sissi.templates.translations</groupId>
<artifactId>module-translations</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<artifactId>miepscord-translations</artifactId>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.templates.translations</groupId>
<artifactId>sissi-translations</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.templates.translations</groupId>
<artifactId>module-translations</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -1,2 +0,0 @@
[**Quote #${quoteId?c}**](${quoteJumpUrl})
${quoteDescription}

View File

@@ -1 +1 @@
${authorName} in ${channelName}
${authorName} in ${channelName} added by ${adderUserName} at ${creationDate}

View File

@@ -3,7 +3,7 @@
<parent>
<artifactId>module-translations</artifactId>
<groupId>dev.sheldan.sissi.templates.translations</groupId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.templates</groupId>
<artifactId>templates</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>dev.sheldan.sissi.templates.translations.overrides</groupId>
<artifactId>translation-overrides</artifactId>
<version>1.4.67</version>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>dev.sheldan.sissi.templates.translations.overrides</groupId>
<artifactId>translation-overrides</artifactId>
<version>1.5.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>giveaway-translation-overrides</artifactId>
<packaging>pom</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>giveaway-translation-overrides-${project.version}</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,15 @@
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>zip</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<outputDirectory>.</outputDirectory>
<directory>${project.basedir}/src/main/resources</directory>
</fileSet>
</fileSets>
</assembly>

View File

@@ -0,0 +1,5 @@
Der key ist `${key}`.
Bitte antworte auf diese Nachricht um zu bestätigen, dass du den Key erhalten hast.
<#if description?has_content>Mehr details: ${description}. </#if>
<#if benefactor?has_content>Der Key wurde gesponsert von: ${benefactor}</#if>

Some files were not shown because too many files have changed in this diff Show More