mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-26 22:02:40 +00:00
Compare commits
8 Commits
v1.5.58
...
release-20
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
77b97507b3 | ||
|
|
e952727849 | ||
|
|
909a08d3d2 | ||
|
|
e02236145f | ||
|
|
1d810bdc07 | ||
|
|
f9334d5210 | ||
|
|
0a7e30cace | ||
|
|
d91091d149 |
2
.env
2
.env
@@ -1,2 +1,2 @@
|
|||||||
REGISTRY_PREFIX=harbor.sheldan.dev/abstracto/
|
REGISTRY_PREFIX=harbor.sheldan.dev/abstracto/
|
||||||
VERSION=1.5.57
|
VERSION=1.5.59
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>anti-raid</artifactId>
|
<artifactId>anti-raid</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>anti-raid</artifactId>
|
<artifactId>anti-raid</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>assignable-roles</artifactId>
|
<artifactId>assignable-roles</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>assignable-roles</artifactId>
|
<artifactId>assignable-roles</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>assignable-roles-int</artifactId>
|
<artifactId>assignable-roles-int</artifactId>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>custom-command</artifactId>
|
<artifactId>custom-command</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>custom-command</artifactId>
|
<artifactId>custom-command</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>dynamic-activity</artifactId>
|
<artifactId>dynamic-activity</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>dynamic-activity</artifactId>
|
<artifactId>dynamic-activity</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>entertainment</artifactId>
|
<artifactId>entertainment</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>entertainment</artifactId>
|
<artifactId>entertainment</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>experience-tracking</artifactId>
|
<artifactId>experience-tracking</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>experience-tracking</artifactId>
|
<artifactId>experience-tracking</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>giveaway</artifactId>
|
<artifactId>giveaway</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>giveaway-impl</artifactId>
|
<artifactId>giveaway-impl</artifactId>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>giveaway</artifactId>
|
<artifactId>giveaway</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>giveaway-int</artifactId>
|
<artifactId>giveaway-int</artifactId>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>giveaway</artifactId>
|
<artifactId>giveaway</artifactId>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>image-generation</artifactId>
|
<artifactId>image-generation</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>image-generation-impl</artifactId>
|
<artifactId>image-generation-impl</artifactId>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>image-generation</artifactId>
|
<artifactId>image-generation</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>image-generation-int</artifactId>
|
<artifactId>image-generation-int</artifactId>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>image-generation</artifactId>
|
<artifactId>image-generation</artifactId>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>invite-filter</artifactId>
|
<artifactId>invite-filter</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>invite-filter</artifactId>
|
<artifactId>invite-filter</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>moderation-int</artifactId>
|
<artifactId>moderation-int</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>link-embed</artifactId>
|
<artifactId>link-embed</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>link-embed</artifactId>
|
<artifactId>link-embed</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>logging</artifactId>
|
<artifactId>logging</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>logging</artifactId>
|
<artifactId>logging</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>moderation</artifactId>
|
<artifactId>moderation</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>moderation</artifactId>
|
<artifactId>moderation</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>modmail</artifactId>
|
<artifactId>modmail</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>modmail</artifactId>
|
<artifactId>modmail</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto</groupId>
|
<groupId>dev.sheldan.abstracto</groupId>
|
||||||
<artifactId>abstracto-application</artifactId>
|
<artifactId>abstracto-application</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>profanity-filter</artifactId>
|
<artifactId>profanity-filter</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>profanity-filter</artifactId>
|
<artifactId>profanity-filter</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>remind</artifactId>
|
<artifactId>remind</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>remind</artifactId>
|
<artifactId>remind</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>repost-detection</artifactId>
|
<artifactId>repost-detection</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>repost-detection</artifactId>
|
<artifactId>repost-detection</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>starboard</artifactId>
|
<artifactId>starboard</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>starboard</artifactId>
|
<artifactId>starboard</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>statistic</artifactId>
|
<artifactId>statistic</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand
|
|||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
@@ -22,6 +21,7 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
import net.dv8tion.jda.api.entities.emoji.CustomEmoji;
|
import net.dv8tion.jda.api.entities.emoji.CustomEmoji;
|
||||||
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
||||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -50,24 +50,21 @@ public class DeleteTrackedEmote extends AbstractConditionableCommand {
|
|||||||
private static final String DELETE_TRACKED_EMOTE_COMMAND_NAME = "deleteTrackedEmote";
|
private static final String DELETE_TRACKED_EMOTE_COMMAND_NAME = "deleteTrackedEmote";
|
||||||
private static final String DELETE_TRACKED_EMOTE_RESPONSE = "deleteTrackedEmote_response";
|
private static final String DELETE_TRACKED_EMOTE_RESPONSE = "deleteTrackedEmote_response";
|
||||||
|
|
||||||
@Override
|
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
|
||||||
TrackedEmote fakeTrackedEmote = (TrackedEmote) parameters.get(0);
|
|
||||||
// need to actually load the TrackedEmote
|
|
||||||
TrackedEmote trackedEmote = trackedEmoteManagementService.loadByTrackedEmoteServer(fakeTrackedEmote.getTrackedEmoteId());
|
|
||||||
trackedEmoteService.deleteTrackedEmote(trackedEmote);
|
|
||||||
return CommandResult.fromSuccess();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
String emote = slashCommandParameterService.getCommandOption(DELETE_TRACKED_EMOTE_TRACKED_EMOTE, event, String.class);
|
String emote = slashCommandParameterService.getCommandOption(DELETE_TRACKED_EMOTE_TRACKED_EMOTE, event, String.class);
|
||||||
Emoji emoji = slashCommandParameterService.loadEmoteFromString(emote, event.getGuild());
|
Emoji emoji = slashCommandParameterService.loadEmoteFromString(emote, event.getGuild());
|
||||||
if(!(emoji instanceof CustomEmoji)) {
|
if(emoji instanceof CustomEmoji) {
|
||||||
|
Long emoteId = ((CustomEmoji) emoji).getIdLong();
|
||||||
|
return createResponse(event, emoteId);
|
||||||
|
} else if(StringUtils.isNumeric(emote)) {
|
||||||
|
return createResponse(event, Long.parseLong(emote));
|
||||||
|
} else {
|
||||||
throw new TrackedEmoteNotFoundException();
|
throw new TrackedEmoteNotFoundException();
|
||||||
}
|
}
|
||||||
Long emoteId = ((CustomEmoji) emoji).getIdLong();
|
}
|
||||||
|
|
||||||
|
private CompletableFuture<CommandResult> createResponse(SlashCommandInteractionEvent event, Long emoteId) {
|
||||||
ServerSpecificId serverEmoteId = new ServerSpecificId(event.getGuild().getIdLong(), emoteId);
|
ServerSpecificId serverEmoteId = new ServerSpecificId(event.getGuild().getIdLong(), emoteId);
|
||||||
TrackedEmote trackedEmote = trackedEmoteManagementService.loadByTrackedEmoteServer(serverEmoteId);
|
TrackedEmote trackedEmote = trackedEmoteManagementService.loadByTrackedEmoteServer(serverEmoteId);
|
||||||
trackedEmoteService.deleteTrackedEmote(trackedEmote);
|
trackedEmoteService.deleteTrackedEmote(trackedEmote);
|
||||||
@@ -104,7 +101,7 @@ public class DeleteTrackedEmote extends AbstractConditionableCommand {
|
|||||||
.templated(true)
|
.templated(true)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
.messageCommandOnly(true)
|
.slashCommandOnly(true)
|
||||||
.slashCommandConfig(slashCommandConfig)
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.requiresConfirmation(true)
|
.requiresConfirmation(true)
|
||||||
.parameters(parameters)
|
.parameters(parameters)
|
||||||
|
|||||||
@@ -4,14 +4,13 @@ import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand
|
|||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.service.ChannelService;
|
import dev.sheldan.abstracto.core.service.PaginatorService;
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
||||||
import dev.sheldan.abstracto.core.utils.ParseUtils;
|
import dev.sheldan.abstracto.core.utils.ParseUtils;
|
||||||
@@ -24,7 +23,6 @@ import dev.sheldan.abstracto.statistic.emote.service.UsedEmoteService;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
|
||||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -48,7 +46,7 @@ public class DeletedEmoteStats extends AbstractConditionableCommand {
|
|||||||
private UsedEmoteService usedEmoteService;
|
private UsedEmoteService usedEmoteService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ChannelService channelService;
|
private PaginatorService paginatorService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ServerManagementService serverManagementService;
|
private ServerManagementService serverManagementService;
|
||||||
@@ -64,39 +62,6 @@ public class DeletedEmoteStats extends AbstractConditionableCommand {
|
|||||||
private static final String DELETED_EMOTE_STATS_PERIOD = "period";
|
private static final String DELETED_EMOTE_STATS_PERIOD = "period";
|
||||||
private static final String DELETED_EMOTE_STATS_USED_EMOTE_TYPE = "type";
|
private static final String DELETED_EMOTE_STATS_USED_EMOTE_TYPE = "type";
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
|
||||||
// default is 1.1.1970
|
|
||||||
Instant statsSince = Instant.EPOCH;
|
|
||||||
if(!parameters.isEmpty()) {
|
|
||||||
// if a duration parameter is available, subtract the current time of this to get the true Instant
|
|
||||||
Duration duration = (Duration) parameters.get(0);
|
|
||||||
statsSince = Instant.now().minus(duration);
|
|
||||||
}
|
|
||||||
AServer server = serverManagementService.loadServer(commandContext.getGuild());
|
|
||||||
EmoteStatsModel emoteStatsModel = usedEmoteService.getDeletedEmoteStatsForServerSince(server, statsSince, null);
|
|
||||||
List<CompletableFuture<Message>> messagePromises = new ArrayList<>();
|
|
||||||
// only show the embed, if there are static emotes to show
|
|
||||||
if(!emoteStatsModel.getStaticEmotes().isEmpty()) {
|
|
||||||
log.debug("Deleted emote stats has {} static emotes since {}.", emoteStatsModel.getStaticEmotes().size(), statsSince);
|
|
||||||
messagePromises.addAll(channelService.sendEmbedTemplateInMessageChannel(EMOTE_STATS_STATIC_DELETED_RESPONSE, emoteStatsModel, commandContext.getChannel()));
|
|
||||||
}
|
|
||||||
// only show the embed, if there are animated emotes to show
|
|
||||||
if(!emoteStatsModel.getAnimatedEmotes().isEmpty()) {
|
|
||||||
log.debug("Deleted emote stats has {} animated emotes since {}.", emoteStatsModel.getAnimatedEmotes(), statsSince);
|
|
||||||
messagePromises.addAll(channelService.sendEmbedTemplateInMessageChannel(EMOTE_STATS_ANIMATED_DELETED_RESPONSE, emoteStatsModel, commandContext.getChannel()));
|
|
||||||
}
|
|
||||||
// if neither static nor animated emote stats are available, show an embed indicating so
|
|
||||||
if(!emoteStatsModel.areStatsAvailable()) {
|
|
||||||
log.info("No delete emote stats available for guild {} since {}.", commandContext.getGuild().getIdLong(), statsSince);
|
|
||||||
messagePromises.addAll(channelService.sendEmbedTemplateInMessageChannel(EmoteStats.EMOTE_STATS_NO_STATS_AVAILABLE, new Object(), commandContext.getChannel()));
|
|
||||||
}
|
|
||||||
|
|
||||||
return FutureUtils.toSingleFutureGeneric(messagePromises)
|
|
||||||
.thenApply(unused -> CommandResult.fromIgnored());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
UsedEmoteTypeParameter typeEnum;
|
UsedEmoteTypeParameter typeEnum;
|
||||||
@@ -116,22 +81,23 @@ public class DeletedEmoteStats extends AbstractConditionableCommand {
|
|||||||
}
|
}
|
||||||
AServer server = serverManagementService.loadServer(event.getGuild());
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
EmoteStatsModel emoteStatsModel = usedEmoteService.getDeletedEmoteStatsForServerSince(server, startTime, UsedEmoteTypeParameter.convertToUsedEmoteType(typeEnum));
|
EmoteStatsModel emoteStatsModel = usedEmoteService.getDeletedEmoteStatsForServerSince(server, startTime, UsedEmoteTypeParameter.convertToUsedEmoteType(typeEnum));
|
||||||
List<CompletableFuture<Message>> messagePromises = new ArrayList<>();
|
List<CompletableFuture<Void>> messagePromises = new ArrayList<>();
|
||||||
return event.deferReply().submit().thenCompose(interactionHook -> {
|
return event.deferReply().submit().thenCompose(interactionHook -> {
|
||||||
// only show embed if static emote stats are available
|
// only show embed if static emote stats are available
|
||||||
if(!emoteStatsModel.getStaticEmotes().isEmpty()) {
|
if(!emoteStatsModel.getStaticEmotes().isEmpty()) {
|
||||||
log.debug("Deleted emote stats has {} static emotes since {}.", emoteStatsModel.getStaticEmotes().size(), startTime);
|
log.debug("Deleted emote stats has {} static emotes since {}.", emoteStatsModel.getStaticEmotes().size(), startTime);
|
||||||
messagePromises.addAll(interactionService.sendMessageToInteraction(EMOTE_STATS_STATIC_DELETED_RESPONSE, emoteStatsModel, interactionHook));
|
messagePromises.add(paginatorService.sendPaginatorToInteraction(EMOTE_STATS_STATIC_DELETED_RESPONSE, emoteStatsModel, interactionHook));
|
||||||
}
|
}
|
||||||
// only show embed if animated emote stats are available
|
// only show embed if animated emote stats are available
|
||||||
if(!emoteStatsModel.getAnimatedEmotes().isEmpty()) {
|
if(!emoteStatsModel.getAnimatedEmotes().isEmpty()) {
|
||||||
log.debug("Deleted emote stats has {} animated emotes since {}.", emoteStatsModel.getAnimatedEmotes(), startTime);
|
log.debug("Deleted emote stats has {} animated emotes since {}.", emoteStatsModel.getAnimatedEmotes(), startTime);
|
||||||
messagePromises.addAll(interactionService.sendMessageToInteraction(EMOTE_STATS_ANIMATED_DELETED_RESPONSE, emoteStatsModel, interactionHook));
|
messagePromises.add(paginatorService.sendPaginatorToInteraction(EMOTE_STATS_ANIMATED_DELETED_RESPONSE, emoteStatsModel, interactionHook));
|
||||||
}
|
}
|
||||||
// show an embed if no emote stats are available indicating so
|
// show an embed if no emote stats are available indicating so
|
||||||
if(!emoteStatsModel.areStatsAvailable()) {
|
if(!emoteStatsModel.areStatsAvailable()) {
|
||||||
log.info("No delete emote stats available for guild {} since {}.", event.getGuild().getIdLong(), startTime);
|
log.info("No delete emote stats available for guild {} since {}.", event.getGuild().getIdLong(), startTime);
|
||||||
messagePromises.addAll(interactionService.sendMessageToInteraction(EmoteStats.EMOTE_STATS_NO_STATS_AVAILABLE, emoteStatsModel, interactionHook));
|
return FutureUtils.toSingleFutureGeneric(interactionService.sendMessageToInteraction(EmoteStats.EMOTE_STATS_NO_STATS_AVAILABLE, new Object(), interactionHook))
|
||||||
|
.thenApply(unused -> CommandResult.fromSuccess());
|
||||||
}
|
}
|
||||||
return FutureUtils.toSingleFutureGeneric(messagePromises)
|
return FutureUtils.toSingleFutureGeneric(messagePromises)
|
||||||
.thenApply(unused -> CommandResult.fromIgnored());
|
.thenApply(unused -> CommandResult.fromIgnored());
|
||||||
@@ -187,7 +153,7 @@ public class DeletedEmoteStats extends AbstractConditionableCommand {
|
|||||||
.async(true)
|
.async(true)
|
||||||
.slashCommandConfig(slashCommandConfig)
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.messageCommandOnly(true)
|
.slashCommandOnly(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
.parameters(parameters)
|
.parameters(parameters)
|
||||||
.help(helpInfo)
|
.help(helpInfo)
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand
|
|||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
@@ -14,6 +13,7 @@ import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
|||||||
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
||||||
import dev.sheldan.abstracto.statistic.config.StatisticSlashCommandNames;
|
import dev.sheldan.abstracto.statistic.config.StatisticSlashCommandNames;
|
||||||
import dev.sheldan.abstracto.statistic.emote.config.EmoteTrackingModuleDefinition;
|
import dev.sheldan.abstracto.statistic.emote.config.EmoteTrackingModuleDefinition;
|
||||||
|
import dev.sheldan.abstracto.statistic.emote.exception.TrackedEmoteNotFoundException;
|
||||||
import dev.sheldan.abstracto.statistic.emote.model.database.TrackedEmote;
|
import dev.sheldan.abstracto.statistic.emote.model.database.TrackedEmote;
|
||||||
import dev.sheldan.abstracto.statistic.emote.service.TrackedEmoteService;
|
import dev.sheldan.abstracto.statistic.emote.service.TrackedEmoteService;
|
||||||
import dev.sheldan.abstracto.statistic.emote.service.management.TrackedEmoteManagementService;
|
import dev.sheldan.abstracto.statistic.emote.service.management.TrackedEmoteManagementService;
|
||||||
@@ -21,6 +21,7 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
import net.dv8tion.jda.api.entities.emoji.CustomEmoji;
|
import net.dv8tion.jda.api.entities.emoji.CustomEmoji;
|
||||||
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
||||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -50,29 +51,20 @@ public class DisableEmoteTracking extends AbstractConditionableCommand {
|
|||||||
private static final String DISABLE_EMOTE_TRACKING_RESPONSE = "disableEmoteTracking_response";
|
private static final String DISABLE_EMOTE_TRACKING_RESPONSE = "disableEmoteTracking_response";
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
|
||||||
if(!parameters.isEmpty()) {
|
|
||||||
TrackedEmote fakeTrackedEmote = (TrackedEmote) parameters.get(0);
|
|
||||||
// need to reload the tracked emote
|
|
||||||
TrackedEmote trackedEmote = trackedEmoteManagementService.loadByTrackedEmoteServer(fakeTrackedEmote.getTrackedEmoteId());
|
|
||||||
trackedEmoteManagementService.disableTrackedEmote(trackedEmote);
|
|
||||||
} else {
|
|
||||||
trackedEmoteService.disableEmoteTracking(commandContext.getGuild());
|
|
||||||
}
|
|
||||||
return CommandResult.fromSuccess();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
if(slashCommandParameterService.hasCommandOption(DISABLE_EMOTE_TRACKING_TRACKED_EMOTE, event)) {
|
if(slashCommandParameterService.hasCommandOption(DISABLE_EMOTE_TRACKING_TRACKED_EMOTE, event)) {
|
||||||
String emote = slashCommandParameterService.getCommandOption(DISABLE_EMOTE_TRACKING_TRACKED_EMOTE, event, String.class);
|
String emote = slashCommandParameterService.getCommandOption(DISABLE_EMOTE_TRACKING_TRACKED_EMOTE, event, String.class);
|
||||||
Emoji emoji = slashCommandParameterService.loadEmoteFromString(emote, event.getGuild());
|
Emoji emoji = slashCommandParameterService.loadEmoteFromString(emote, event.getGuild());
|
||||||
Long emoteId = ((CustomEmoji) emoji).getIdLong();
|
if(emoji instanceof CustomEmoji) {
|
||||||
ServerSpecificId serverEmoteId = new ServerSpecificId(event.getGuild().getIdLong(), emoteId);
|
Long emoteId = ((CustomEmoji) emoji).getIdLong();
|
||||||
TrackedEmote trackedEmote = trackedEmoteManagementService.loadByTrackedEmoteServer(serverEmoteId);
|
disableTracking(event, emoteId);
|
||||||
trackedEmoteManagementService.disableTrackedEmote(trackedEmote);
|
} else if(StringUtils.isNumeric(emote)) {
|
||||||
|
disableTracking(event, Long.parseLong(emote));
|
||||||
|
} else {
|
||||||
|
throw new TrackedEmoteNotFoundException();
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
trackedEmoteService.disableEmoteTracking(event.getGuild());
|
trackedEmoteService.disableEmoteTracking(event.getGuild());
|
||||||
}
|
}
|
||||||
@@ -80,6 +72,12 @@ public class DisableEmoteTracking extends AbstractConditionableCommand {
|
|||||||
.thenApply(interactionHook -> CommandResult.fromIgnored());
|
.thenApply(interactionHook -> CommandResult.fromIgnored());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void disableTracking(SlashCommandInteractionEvent event, Long emoteId) {
|
||||||
|
ServerSpecificId serverEmoteId = new ServerSpecificId(event.getGuild().getIdLong(), emoteId);
|
||||||
|
TrackedEmote trackedEmote = trackedEmoteManagementService.loadByTrackedEmoteServer(serverEmoteId);
|
||||||
|
trackedEmoteManagementService.disableTrackedEmote(trackedEmote);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandConfiguration getConfiguration() {
|
public CommandConfiguration getConfiguration() {
|
||||||
List<Parameter> parameters = new ArrayList<>();
|
List<Parameter> parameters = new ArrayList<>();
|
||||||
@@ -110,7 +108,7 @@ public class DisableEmoteTracking extends AbstractConditionableCommand {
|
|||||||
.module(EmoteTrackingModuleDefinition.EMOTE_TRACKING)
|
.module(EmoteTrackingModuleDefinition.EMOTE_TRACKING)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
.slashCommandConfig(slashCommandConfig)
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.messageCommandOnly(true)
|
.slashCommandOnly(true)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
.parameters(parameters)
|
.parameters(parameters)
|
||||||
|
|||||||
@@ -4,15 +4,12 @@ import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand
|
|||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
||||||
import dev.sheldan.abstracto.core.service.ChannelService;
|
|
||||||
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
|
||||||
import dev.sheldan.abstracto.core.utils.ParseUtils;
|
import dev.sheldan.abstracto.core.utils.ParseUtils;
|
||||||
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
||||||
import dev.sheldan.abstracto.statistic.config.StatisticSlashCommandNames;
|
import dev.sheldan.abstracto.statistic.config.StatisticSlashCommandNames;
|
||||||
@@ -29,6 +26,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import net.dv8tion.jda.api.entities.emoji.CustomEmoji;
|
import net.dv8tion.jda.api.entities.emoji.CustomEmoji;
|
||||||
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
||||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -47,9 +45,6 @@ public class EmoteStat extends AbstractConditionableCommand {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private UsedEmoteService usedEmoteService;
|
private UsedEmoteService usedEmoteService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ChannelService channelService;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private TrackedEmoteManagementService trackedEmoteManagementService;
|
private TrackedEmoteManagementService trackedEmoteManagementService;
|
||||||
|
|
||||||
@@ -66,27 +61,6 @@ public class EmoteStat extends AbstractConditionableCommand {
|
|||||||
private static final String EMOTE_STAT_TRACKED_EMOTE = "trackedEmote";
|
private static final String EMOTE_STAT_TRACKED_EMOTE = "trackedEmote";
|
||||||
private static final String EMOTE_STAT_COMMAND_NAME = "emoteStat";
|
private static final String EMOTE_STAT_COMMAND_NAME = "emoteStat";
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
|
||||||
// default is 1.1.1970
|
|
||||||
Instant statsSince = Instant.EPOCH;
|
|
||||||
TrackedEmote emote = (TrackedEmote) parameters.get(0);
|
|
||||||
TrackedEmote trackedEmote = trackedEmoteManagementService.loadByTrackedEmoteServer(emote.getTrackedEmoteId());
|
|
||||||
if(parameters.size() == 2) {
|
|
||||||
// subtract the given Duration from the current point in time, if there is any
|
|
||||||
Duration duration = (Duration) parameters.get(1);
|
|
||||||
statsSince = Instant.now().minus(duration);
|
|
||||||
}
|
|
||||||
EmoteStatsResultDisplay emoteStatsModel = usedEmoteService.getEmoteStatForEmote(trackedEmote, statsSince, null);
|
|
||||||
if(emoteStatsModel.getResult().getAmount() == null) {
|
|
||||||
return FutureUtils.toSingleFutureGeneric(channelService.sendEmbedTemplateInMessageChannel(EMOTE_STATS_NO_STATS_AVAILABLE, new Object(), commandContext.getChannel()))
|
|
||||||
.thenApply(unused -> CommandResult.fromIgnored());
|
|
||||||
}
|
|
||||||
return FutureUtils.toSingleFutureGeneric(channelService.sendEmbedTemplateInMessageChannel(EMOTE_STAT_RESPONSE, emoteStatsModel, commandContext.getChannel()))
|
|
||||||
.thenApply(unused -> CommandResult.fromIgnored());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
UsedEmoteTypeParameter typeEnum;
|
UsedEmoteTypeParameter typeEnum;
|
||||||
@@ -108,19 +82,28 @@ public class EmoteStat extends AbstractConditionableCommand {
|
|||||||
Emoji emoji = slashCommandParameterService.loadEmoteFromString(emote, event.getGuild());
|
Emoji emoji = slashCommandParameterService.loadEmoteFromString(emote, event.getGuild());
|
||||||
if(emoji instanceof CustomEmoji) {
|
if(emoji instanceof CustomEmoji) {
|
||||||
Long emoteId = ((CustomEmoji) emoji).getIdLong();
|
Long emoteId = ((CustomEmoji) emoji).getIdLong();
|
||||||
TrackedEmote trackedEmote = trackedEmoteManagementService.loadByTrackedEmoteServer(new ServerSpecificId(event.getGuild().getIdLong(), emoteId));
|
return showResponse(event, emoteId, startTime, typeEnum);
|
||||||
EmoteStatsResultDisplay emoteStatsModel = usedEmoteService.getEmoteStatForEmote(trackedEmote, startTime, UsedEmoteTypeParameter.convertToUsedEmoteType(typeEnum));
|
} else if(StringUtils.isNumeric(emote)) {
|
||||||
if(emoteStatsModel.getResult().getAmount() == null) {
|
return showResponse(event, Long.parseLong(emote), startTime, typeEnum);
|
||||||
return interactionService.replyEmbed(EMOTE_STATS_NO_STATS_AVAILABLE, new Object(), event)
|
|
||||||
.thenApply(unused -> CommandResult.fromIgnored());
|
|
||||||
}
|
|
||||||
return interactionService.replyEmbed(EMOTE_STAT_RESPONSE, emoteStatsModel, event)
|
|
||||||
.thenApply(unused -> CommandResult.fromIgnored());
|
|
||||||
} else {
|
} else {
|
||||||
throw new TrackedEmoteNotFoundException();
|
throw new TrackedEmoteNotFoundException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CompletableFuture<CommandResult> showResponse(SlashCommandInteractionEvent event, Long emoteId, Instant startTime,
|
||||||
|
UsedEmoteTypeParameter typeEnum)
|
||||||
|
{
|
||||||
|
TrackedEmote trackedEmote = trackedEmoteManagementService.loadByTrackedEmoteServer(new ServerSpecificId(event.getGuild().getIdLong(), emoteId));
|
||||||
|
EmoteStatsResultDisplay emoteStatsModel = usedEmoteService.getEmoteStatForEmote(trackedEmote,
|
||||||
|
startTime, UsedEmoteTypeParameter.convertToUsedEmoteType(typeEnum));
|
||||||
|
if(emoteStatsModel.getResult().getAmount() == null) {
|
||||||
|
return interactionService.replyEmbed(EMOTE_STATS_NO_STATS_AVAILABLE, new Object(), event)
|
||||||
|
.thenApply(unused -> CommandResult.fromIgnored());
|
||||||
|
}
|
||||||
|
return interactionService.replyEmbed(EMOTE_STAT_RESPONSE, emoteStatsModel, event)
|
||||||
|
.thenApply(unused -> CommandResult.fromIgnored());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandConfiguration getConfiguration() {
|
public CommandConfiguration getConfiguration() {
|
||||||
List<Parameter> parameters = new ArrayList<>();
|
List<Parameter> parameters = new ArrayList<>();
|
||||||
@@ -176,7 +159,7 @@ public class EmoteStat extends AbstractConditionableCommand {
|
|||||||
.templated(true)
|
.templated(true)
|
||||||
.slashCommandConfig(slashCommandConfig)
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.async(true)
|
.async(true)
|
||||||
.messageCommandOnly(true)
|
.slashCommandOnly(true)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
.parameters(parameters)
|
.parameters(parameters)
|
||||||
|
|||||||
@@ -4,14 +4,13 @@ import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand
|
|||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.service.ChannelService;
|
import dev.sheldan.abstracto.core.service.PaginatorService;
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
||||||
import dev.sheldan.abstracto.core.utils.ParseUtils;
|
import dev.sheldan.abstracto.core.utils.ParseUtils;
|
||||||
@@ -24,7 +23,6 @@ import dev.sheldan.abstracto.statistic.emote.service.UsedEmoteService;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
|
||||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -47,7 +45,7 @@ public class EmoteStats extends AbstractConditionableCommand {
|
|||||||
private UsedEmoteService usedEmoteService;
|
private UsedEmoteService usedEmoteService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ChannelService channelService;
|
private PaginatorService paginatorService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ServerManagementService serverManagementService;
|
private ServerManagementService serverManagementService;
|
||||||
@@ -65,39 +63,6 @@ public class EmoteStats extends AbstractConditionableCommand {
|
|||||||
private static final String EMOTE_STATS_DURATION = "period";
|
private static final String EMOTE_STATS_DURATION = "period";
|
||||||
private static final String EMOTE_STATS_COMMAND_NAME = "emoteStats";
|
private static final String EMOTE_STATS_COMMAND_NAME = "emoteStats";
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
|
||||||
// default is 1.1.1970
|
|
||||||
Instant statsSince = Instant.EPOCH;
|
|
||||||
if(!parameters.isEmpty()) {
|
|
||||||
// subtract the given Duration from the current point in time, if there is any
|
|
||||||
Duration duration = (Duration) parameters.get(0);
|
|
||||||
statsSince = Instant.now().minus(duration);
|
|
||||||
}
|
|
||||||
AServer server = serverManagementService.loadServer(commandContext.getGuild());
|
|
||||||
EmoteStatsModel emoteStatsModel = usedEmoteService.getActiveEmoteStatsForServerSince(server, statsSince, null);
|
|
||||||
List<CompletableFuture<Message>> messagePromises = new ArrayList<>();
|
|
||||||
// only show embed if static emote stats are available
|
|
||||||
if(!emoteStatsModel.getStaticEmotes().isEmpty()) {
|
|
||||||
log.debug("Emote stats has {} static emotes since {}.", emoteStatsModel.getStaticEmotes().size(), statsSince);
|
|
||||||
messagePromises.addAll(channelService.sendEmbedTemplateInMessageChannel(EMOTE_STATS_STATIC_RESPONSE, emoteStatsModel, commandContext.getChannel()));
|
|
||||||
}
|
|
||||||
// only show embed if animated emote stats are available
|
|
||||||
if(!emoteStatsModel.getAnimatedEmotes().isEmpty()) {
|
|
||||||
log.debug("Emote stats has {} animated emotes since {}.", emoteStatsModel.getAnimatedEmotes(), statsSince);
|
|
||||||
messagePromises.addAll(channelService.sendEmbedTemplateInMessageChannel(EMOTE_STATS_ANIMATED_RESPONSE, emoteStatsModel, commandContext.getChannel()));
|
|
||||||
}
|
|
||||||
// show an embed if no emote stats are available indicating so
|
|
||||||
if(!emoteStatsModel.areStatsAvailable()) {
|
|
||||||
log.info("No emote stats available for guild {} since {}.", commandContext.getGuild().getIdLong(), statsSince);
|
|
||||||
messagePromises.addAll(channelService.sendEmbedTemplateInMessageChannel(EMOTE_STATS_NO_STATS_AVAILABLE, new Object(), commandContext.getChannel()));
|
|
||||||
}
|
|
||||||
|
|
||||||
return FutureUtils.toSingleFutureGeneric(messagePromises)
|
|
||||||
.thenApply(unused -> CommandResult.fromIgnored());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
UsedEmoteTypeParameter typeEnum;
|
UsedEmoteTypeParameter typeEnum;
|
||||||
@@ -117,22 +82,23 @@ public class EmoteStats extends AbstractConditionableCommand {
|
|||||||
}
|
}
|
||||||
AServer server = serverManagementService.loadServer(event.getGuild());
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
EmoteStatsModel emoteStatsModel = usedEmoteService.getActiveEmoteStatsForServerSince(server, startTime, UsedEmoteTypeParameter.convertToUsedEmoteType(typeEnum));
|
EmoteStatsModel emoteStatsModel = usedEmoteService.getActiveEmoteStatsForServerSince(server, startTime, UsedEmoteTypeParameter.convertToUsedEmoteType(typeEnum));
|
||||||
List<CompletableFuture<Message>> messagePromises = new ArrayList<>();
|
List<CompletableFuture<Void>> messagePromises = new ArrayList<>();
|
||||||
return event.deferReply().submit().thenCompose(interactionHook -> {
|
return event.deferReply().submit().thenCompose(interactionHook -> {
|
||||||
// only show embed if static emote stats are available
|
// only show embed if static emote stats are available
|
||||||
if(!emoteStatsModel.getStaticEmotes().isEmpty()) {
|
if(!emoteStatsModel.getStaticEmotes().isEmpty()) {
|
||||||
log.debug("Emote stats has {} static emotes since {}.", emoteStatsModel.getStaticEmotes().size(), startTime);
|
log.debug("Emote stats has {} static emotes since {}.", emoteStatsModel.getStaticEmotes().size(), startTime);
|
||||||
messagePromises.addAll(interactionService.sendMessageToInteraction(EMOTE_STATS_STATIC_RESPONSE, emoteStatsModel, interactionHook));
|
messagePromises.add(paginatorService.sendPaginatorToInteraction(EMOTE_STATS_STATIC_RESPONSE, emoteStatsModel, interactionHook));
|
||||||
}
|
}
|
||||||
// only show embed if animated emote stats are available
|
// only show embed if animated emote stats are available
|
||||||
if(!emoteStatsModel.getAnimatedEmotes().isEmpty()) {
|
if(!emoteStatsModel.getAnimatedEmotes().isEmpty()) {
|
||||||
log.debug("Emote stats has {} animated emotes since {}.", emoteStatsModel.getAnimatedEmotes(), startTime);
|
log.debug("Emote stats has {} animated emotes since {}.", emoteStatsModel.getAnimatedEmotes(), startTime);
|
||||||
messagePromises.addAll(interactionService.sendMessageToInteraction(EMOTE_STATS_ANIMATED_RESPONSE, emoteStatsModel, interactionHook));
|
messagePromises.add(paginatorService.sendPaginatorToInteraction(EMOTE_STATS_ANIMATED_RESPONSE, emoteStatsModel, interactionHook));
|
||||||
}
|
}
|
||||||
// show an embed if no emote stats are available indicating so
|
// show an embed if no emote stats are available indicating so
|
||||||
if(!emoteStatsModel.areStatsAvailable()) {
|
if(!emoteStatsModel.areStatsAvailable()) {
|
||||||
log.info("No emote stats available for guild {} since {}.", event.getGuild().getIdLong(), startTime);
|
log.info("No emote stats available for guild {} since {}.", event.getGuild().getIdLong(), startTime);
|
||||||
messagePromises.addAll(interactionService.sendMessageToInteraction(EMOTE_STATS_NO_STATS_AVAILABLE, emoteStatsModel, interactionHook));
|
return FutureUtils.toSingleFutureGeneric(interactionService.sendMessageToInteraction(EMOTE_STATS_NO_STATS_AVAILABLE, new Object(), interactionHook))
|
||||||
|
.thenApply(unused -> CommandResult.fromSuccess());
|
||||||
}
|
}
|
||||||
return FutureUtils.toSingleFutureGeneric(messagePromises)
|
return FutureUtils.toSingleFutureGeneric(messagePromises)
|
||||||
.thenApply(unused -> CommandResult.fromIgnored());
|
.thenApply(unused -> CommandResult.fromIgnored());
|
||||||
@@ -183,6 +149,7 @@ public class EmoteStats extends AbstractConditionableCommand {
|
|||||||
.messageCommandOnly(true)
|
.messageCommandOnly(true)
|
||||||
.async(true)
|
.async(true)
|
||||||
.slashCommandConfig(slashCommandConfig)
|
.slashCommandConfig(slashCommandConfig)
|
||||||
|
.slashCommandOnly(true)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
.parameters(parameters)
|
.parameters(parameters)
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand
|
|||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureMode;
|
import dev.sheldan.abstracto.core.config.FeatureMode;
|
||||||
@@ -12,7 +11,7 @@ import dev.sheldan.abstracto.core.interaction.InteractionService;
|
|||||||
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.service.ChannelService;
|
import dev.sheldan.abstracto.core.service.PaginatorService;
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
||||||
import dev.sheldan.abstracto.core.utils.ParseUtils;
|
import dev.sheldan.abstracto.core.utils.ParseUtils;
|
||||||
@@ -25,7 +24,6 @@ import dev.sheldan.abstracto.statistic.emote.model.EmoteStatsModel;
|
|||||||
import dev.sheldan.abstracto.statistic.emote.service.UsedEmoteService;
|
import dev.sheldan.abstracto.statistic.emote.service.UsedEmoteService;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
|
||||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -48,9 +46,6 @@ public class ExternalEmoteStats extends AbstractConditionableCommand {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private UsedEmoteService usedEmoteService;
|
private UsedEmoteService usedEmoteService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ChannelService channelService;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ServerManagementService serverManagementService;
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
@@ -60,6 +55,9 @@ public class ExternalEmoteStats extends AbstractConditionableCommand {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private InteractionService interactionService;
|
private InteractionService interactionService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PaginatorService paginatorService;
|
||||||
|
|
||||||
public static final String EMOTE_STATS_STATIC_EXTERNAL_RESPONSE = "externalEmoteStats_static_response";
|
public static final String EMOTE_STATS_STATIC_EXTERNAL_RESPONSE = "externalEmoteStats_static_response";
|
||||||
public static final String EMOTE_STATS_ANIMATED_EXTERNAL_RESPONSE = "externalEmoteStats_animated_response";
|
public static final String EMOTE_STATS_ANIMATED_EXTERNAL_RESPONSE = "externalEmoteStats_animated_response";
|
||||||
private static final String EXTERNAL_EMOTE_STATS_USED_EMOTE_TYPE = "type";
|
private static final String EXTERNAL_EMOTE_STATS_USED_EMOTE_TYPE = "type";
|
||||||
@@ -67,42 +65,6 @@ public class ExternalEmoteStats extends AbstractConditionableCommand {
|
|||||||
private static final String EXTERNAL_EMOTE_STATS_PERIOD = "period";
|
private static final String EXTERNAL_EMOTE_STATS_PERIOD = "period";
|
||||||
private static final String EXTERNAL_EMOTE_STATS_COMMAND_NAME = "externalEmoteStats";
|
private static final String EXTERNAL_EMOTE_STATS_COMMAND_NAME = "externalEmoteStats";
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
|
||||||
// default is 1.1.1970
|
|
||||||
Instant statsSince = Instant.EPOCH;
|
|
||||||
if(!parameters.isEmpty()) {
|
|
||||||
// subtract the given Duration parameter from the current point in time
|
|
||||||
Duration duration = (Duration) parameters.get(0);
|
|
||||||
statsSince = Instant.now().minus(duration);
|
|
||||||
}
|
|
||||||
AServer server = serverManagementService.loadServer(commandContext.getGuild());
|
|
||||||
EmoteStatsModel emoteStatsModel = usedEmoteService.getExternalEmoteStatsForServerSince(server, statsSince, null);
|
|
||||||
List<CompletableFuture<Message>> messagePromises = new ArrayList<>();
|
|
||||||
|
|
||||||
// only show embed if static emote stats are available
|
|
||||||
if(!emoteStatsModel.getStaticEmotes().isEmpty()) {
|
|
||||||
log.debug("External emote stats has {} static emotes since {}.", emoteStatsModel.getStaticEmotes().size(), statsSince);
|
|
||||||
messagePromises.addAll(channelService.sendEmbedTemplateInMessageChannel(EMOTE_STATS_STATIC_EXTERNAL_RESPONSE, emoteStatsModel, commandContext.getChannel()));
|
|
||||||
}
|
|
||||||
|
|
||||||
// only show embed if animated emote stats are available
|
|
||||||
if(!emoteStatsModel.getAnimatedEmotes().isEmpty()) {
|
|
||||||
log.debug("External emote stats has {} animated emotes since {}.", emoteStatsModel.getAnimatedEmotes(), statsSince);
|
|
||||||
messagePromises.addAll(channelService.sendEmbedTemplateInMessageChannel(EMOTE_STATS_ANIMATED_EXTERNAL_RESPONSE, emoteStatsModel, commandContext.getChannel()));
|
|
||||||
}
|
|
||||||
|
|
||||||
// show an embed if no emote stats are available indicating so
|
|
||||||
if(!emoteStatsModel.areStatsAvailable()) {
|
|
||||||
log.info("No external emote stats available for guild {} since {}.", commandContext.getGuild().getIdLong(), statsSince);
|
|
||||||
messagePromises.addAll(channelService.sendEmbedTemplateInMessageChannel(EmoteStats.EMOTE_STATS_NO_STATS_AVAILABLE, new Object(), commandContext.getChannel()));
|
|
||||||
}
|
|
||||||
|
|
||||||
return FutureUtils.toSingleFutureGeneric(messagePromises)
|
|
||||||
.thenApply(unused -> CommandResult.fromIgnored());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
UsedEmoteTypeParameter typeEnum;
|
UsedEmoteTypeParameter typeEnum;
|
||||||
@@ -123,26 +85,25 @@ public class ExternalEmoteStats extends AbstractConditionableCommand {
|
|||||||
|
|
||||||
AServer server = serverManagementService.loadServer(event.getGuild());
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
EmoteStatsModel emoteStatsModel = usedEmoteService.getExternalEmoteStatsForServerSince(server, startTime, UsedEmoteTypeParameter.convertToUsedEmoteType(typeEnum));
|
EmoteStatsModel emoteStatsModel = usedEmoteService.getExternalEmoteStatsForServerSince(server, startTime, UsedEmoteTypeParameter.convertToUsedEmoteType(typeEnum));
|
||||||
List<CompletableFuture<Message>> messagePromises = new ArrayList<>();
|
List<CompletableFuture<Void>> messagePromises = new ArrayList<>();
|
||||||
return event.deferReply().submit().thenCompose(interactionHook -> {
|
return event.deferReply().submit().thenCompose(interactionHook -> {
|
||||||
// only show embed if static emote stats are available
|
// only show embed if static emote stats are available
|
||||||
if (!emoteStatsModel.getStaticEmotes().isEmpty()) {
|
if (!emoteStatsModel.getStaticEmotes().isEmpty()) {
|
||||||
log.debug("External emote stats has {} static emotes since {}.", emoteStatsModel.getStaticEmotes().size(), startTime);
|
log.debug("External emote stats has {} static emotes since {}.", emoteStatsModel.getStaticEmotes().size(), startTime);
|
||||||
messagePromises.addAll(
|
messagePromises.add(paginatorService.sendPaginatorToInteraction(EMOTE_STATS_STATIC_EXTERNAL_RESPONSE, emoteStatsModel, interactionHook));
|
||||||
interactionService.sendMessageToInteraction(EMOTE_STATS_STATIC_EXTERNAL_RESPONSE, emoteStatsModel, interactionHook));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// only show embed if animated emote stats are available
|
// only show embed if animated emote stats are available
|
||||||
if (!emoteStatsModel.getAnimatedEmotes().isEmpty()) {
|
if (!emoteStatsModel.getAnimatedEmotes().isEmpty()) {
|
||||||
log.debug("External emote stats has {} animated emotes since {}.", emoteStatsModel.getAnimatedEmotes(), startTime);
|
log.debug("External emote stats has {} animated emotes since {}.", emoteStatsModel.getAnimatedEmotes(), startTime);
|
||||||
messagePromises.addAll(
|
messagePromises.add(paginatorService.sendPaginatorToInteraction(EMOTE_STATS_ANIMATED_EXTERNAL_RESPONSE, emoteStatsModel, interactionHook));
|
||||||
interactionService.sendMessageToInteraction(EMOTE_STATS_ANIMATED_EXTERNAL_RESPONSE, emoteStatsModel, interactionHook));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// show an embed if no emote stats are available indicating so
|
// show an embed if no emote stats are available indicating so
|
||||||
if (!emoteStatsModel.areStatsAvailable()) {
|
if (!emoteStatsModel.areStatsAvailable()) {
|
||||||
log.info("No external emote stats available for guild {} since {}.", event.getGuild().getIdLong(), startTime);
|
log.info("No external emote stats available for guild {} since {}.", event.getGuild().getIdLong(), startTime);
|
||||||
messagePromises.addAll(interactionService.sendMessageToInteraction(EmoteStats.EMOTE_STATS_NO_STATS_AVAILABLE, new Object(), interactionHook));
|
return FutureUtils.toSingleFutureGeneric(interactionService.sendMessageToInteraction(EmoteStats.EMOTE_STATS_NO_STATS_AVAILABLE, new Object(), interactionHook))
|
||||||
|
.thenApply(unused -> CommandResult.fromSuccess());
|
||||||
}
|
}
|
||||||
|
|
||||||
return FutureUtils.toSingleFutureGeneric(messagePromises)
|
return FutureUtils.toSingleFutureGeneric(messagePromises)
|
||||||
@@ -198,6 +159,7 @@ public class ExternalEmoteStats extends AbstractConditionableCommand {
|
|||||||
.templated(true)
|
.templated(true)
|
||||||
.messageCommandOnly(true)
|
.messageCommandOnly(true)
|
||||||
.async(true)
|
.async(true)
|
||||||
|
.slashCommandOnly(true)
|
||||||
.slashCommandConfig(slashCommandConfig)
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand
|
|||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
@@ -23,6 +22,7 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
import net.dv8tion.jda.api.entities.emoji.CustomEmoji;
|
import net.dv8tion.jda.api.entities.emoji.CustomEmoji;
|
||||||
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
||||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -55,30 +55,21 @@ public class PurgeEmoteStats extends AbstractConditionableCommand {
|
|||||||
private static final String PURGE_EMOTE_STATS_PERIOD = "period";
|
private static final String PURGE_EMOTE_STATS_PERIOD = "period";
|
||||||
private static final String PURGE_EMOTE_STATS_RESPONSE = "purgeEmoteStats_response";
|
private static final String PURGE_EMOTE_STATS_RESPONSE = "purgeEmoteStats_response";
|
||||||
|
|
||||||
@Override
|
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
|
||||||
TrackedEmote fakeTrackedEmote = (TrackedEmote) parameters.get(0);
|
|
||||||
TrackedEmote trackedEmote = trackedEmoteManagementService.loadByTrackedEmoteServer(fakeTrackedEmote.getTrackedEmoteId());
|
|
||||||
// default 1.1.1970
|
|
||||||
Instant since = Instant.EPOCH;
|
|
||||||
if(parameters.size() > 1) {
|
|
||||||
// if a Duration is given, subtract it from the current point in time
|
|
||||||
Duration parameter = (Duration) parameters.get(1);
|
|
||||||
since = Instant.now().minus(parameter);
|
|
||||||
}
|
|
||||||
usedEmoteService.purgeEmoteUsagesSince(trackedEmote, since);
|
|
||||||
return CommandResult.fromSuccess();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
String emote = slashCommandParameterService.getCommandOption(PURGE_EMOTE_STATS_TRACKED_EMOTE, event, String.class);
|
String emote = slashCommandParameterService.getCommandOption(PURGE_EMOTE_STATS_TRACKED_EMOTE, event, String.class);
|
||||||
Emoji emoji = slashCommandParameterService.loadEmoteFromString(emote, event.getGuild());
|
Emoji emoji = slashCommandParameterService.loadEmoteFromString(emote, event.getGuild());
|
||||||
if(!(emoji instanceof CustomEmoji)) {
|
if(emoji instanceof CustomEmoji) {
|
||||||
|
Long emoteId = ((CustomEmoji) emoji).getIdLong();
|
||||||
|
return createResponse(event, emoteId);
|
||||||
|
} else if(StringUtils.isNumeric(emote)) {
|
||||||
|
return createResponse(event, Long.parseLong(emote));
|
||||||
|
} else {
|
||||||
throw new TrackedEmoteNotFoundException();
|
throw new TrackedEmoteNotFoundException();
|
||||||
}
|
}
|
||||||
Long emoteId = ((CustomEmoji) emoji).getIdLong();
|
}
|
||||||
|
|
||||||
|
private CompletableFuture<CommandResult> createResponse(SlashCommandInteractionEvent event, Long emoteId) {
|
||||||
TrackedEmote trackedEmote = trackedEmoteManagementService.loadByTrackedEmoteServer(new ServerSpecificId(event.getGuild().getIdLong(), emoteId));
|
TrackedEmote trackedEmote = trackedEmoteManagementService.loadByTrackedEmoteServer(new ServerSpecificId(event.getGuild().getIdLong(), emoteId));
|
||||||
// default 1.1.1970
|
// default 1.1.1970
|
||||||
Instant since = Instant.EPOCH;
|
Instant since = Instant.EPOCH;
|
||||||
@@ -128,7 +119,7 @@ public class PurgeEmoteStats extends AbstractConditionableCommand {
|
|||||||
.name(PURGE_EMOTE_STATS_COMMAND_NAME)
|
.name(PURGE_EMOTE_STATS_COMMAND_NAME)
|
||||||
.module(EmoteTrackingModuleDefinition.EMOTE_TRACKING)
|
.module(EmoteTrackingModuleDefinition.EMOTE_TRACKING)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
.messageCommandOnly(true)
|
.slashCommandOnly(true)
|
||||||
.slashCommandConfig(slashCommandConfig)
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.requiresConfirmation(true)
|
.requiresConfirmation(true)
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand
|
|||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
@@ -37,12 +36,6 @@ public class ResetEmoteStats extends AbstractConditionableCommand {
|
|||||||
private static final String RESET_EMOTE_STATS_COMMAND_NAME = "resetEmoteStats";
|
private static final String RESET_EMOTE_STATS_COMMAND_NAME = "resetEmoteStats";
|
||||||
private static final String RESET_EMOTE_STATS_RESPONSE = "resetEmoteStats_response";
|
private static final String RESET_EMOTE_STATS_RESPONSE = "resetEmoteStats_response";
|
||||||
|
|
||||||
@Override
|
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
|
||||||
trackedEmoteService.resetEmoteStats(commandContext.getGuild());
|
|
||||||
return CommandResult.fromSuccess();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
trackedEmoteService.resetEmoteStats(event.getGuild());
|
trackedEmoteService.resetEmoteStats(event.getGuild());
|
||||||
@@ -71,6 +64,7 @@ public class ResetEmoteStats extends AbstractConditionableCommand {
|
|||||||
.messageCommandOnly(true)
|
.messageCommandOnly(true)
|
||||||
.module(EmoteTrackingModuleDefinition.EMOTE_TRACKING)
|
.module(EmoteTrackingModuleDefinition.EMOTE_TRACKING)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
|
.slashCommandOnly(true)
|
||||||
.slashCommandConfig(slashCommandConfig)
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.requiresConfirmation(true)
|
.requiresConfirmation(true)
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
|||||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
import dev.sheldan.abstracto.core.command.exception.AbstractoTemplatedException;
|
import dev.sheldan.abstracto.core.command.exception.AbstractoTemplatedException;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureMode;
|
import dev.sheldan.abstracto.core.config.FeatureMode;
|
||||||
@@ -14,7 +13,6 @@ import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
|||||||
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
import dev.sheldan.abstracto.core.models.ServerSpecificId;
|
||||||
import dev.sheldan.abstracto.core.service.ChannelService;
|
import dev.sheldan.abstracto.core.service.ChannelService;
|
||||||
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
|
||||||
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
||||||
import dev.sheldan.abstracto.statistic.config.StatisticSlashCommandNames;
|
import dev.sheldan.abstracto.statistic.config.StatisticSlashCommandNames;
|
||||||
import dev.sheldan.abstracto.statistic.emote.config.EmoteTrackingMode;
|
import dev.sheldan.abstracto.statistic.emote.config.EmoteTrackingMode;
|
||||||
@@ -25,6 +23,7 @@ import dev.sheldan.abstracto.statistic.emote.service.management.TrackedEmoteMana
|
|||||||
import net.dv8tion.jda.api.entities.emoji.CustomEmoji;
|
import net.dv8tion.jda.api.entities.emoji.CustomEmoji;
|
||||||
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
||||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -56,37 +55,29 @@ public class ShowExternalTrackedEmote extends AbstractConditionableCommand {
|
|||||||
private static final String SHOW_EXTERNAL_TRACKED_EMOTE_COMMAND_NAME = "showExternalTrackedEmote";
|
private static final String SHOW_EXTERNAL_TRACKED_EMOTE_COMMAND_NAME = "showExternalTrackedEmote";
|
||||||
private static final String SHOW_EXTERNAL_TRACKED_EMOTE_TRACKED_EMOTE = "trackedEmote";
|
private static final String SHOW_EXTERNAL_TRACKED_EMOTE_TRACKED_EMOTE = "trackedEmote";
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
|
||||||
TrackedEmote fakeTrackedEmote = (TrackedEmote) parameters.get(0);
|
|
||||||
// load the actual TrackedEmote instance
|
|
||||||
TrackedEmote trackedEmote = trackedEmoteManagementService.loadByTrackedEmoteServer(fakeTrackedEmote.getTrackedEmoteId());
|
|
||||||
// the command only works for external emotes
|
|
||||||
if(!trackedEmote.getExternal()) {
|
|
||||||
throw new AbstractoTemplatedException("Emote is not external", "showExternalTrackedEmote_emote_is_not_external");
|
|
||||||
}
|
|
||||||
return FutureUtils.toSingleFutureGeneric(channelService.sendEmbedTemplateInMessageChannel(SHOW_EXTERNAL_TRACKED_EMOTE_RESPONSE_TEMPLATE_KEY, trackedEmote, commandContext.getChannel()))
|
|
||||||
.thenApply(unused -> CommandResult.fromIgnored());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
String emote = slashCommandParameterService.getCommandOption(SHOW_EXTERNAL_TRACKED_EMOTE_TRACKED_EMOTE, event, String.class);
|
String emote = slashCommandParameterService.getCommandOption(SHOW_EXTERNAL_TRACKED_EMOTE_TRACKED_EMOTE, event, String.class);
|
||||||
Emoji emoji = slashCommandParameterService.loadEmoteFromString(emote, event.getGuild());
|
Emoji emoji = slashCommandParameterService.loadEmoteFromString(emote, event.getGuild());
|
||||||
if(emoji instanceof CustomEmoji) {
|
if(emoji instanceof CustomEmoji) {
|
||||||
Long emoteId = ((CustomEmoji) emoji).getIdLong();
|
Long emoteId = ((CustomEmoji) emoji).getIdLong();
|
||||||
TrackedEmote trackedEmote = trackedEmoteManagementService.loadByTrackedEmoteServer(new ServerSpecificId(event.getGuild().getIdLong(), emoteId));
|
return createResponse(event, emoteId);
|
||||||
if(!trackedEmote.getExternal()) {
|
} else if(StringUtils.isNumeric(emote)) {
|
||||||
throw new AbstractoTemplatedException("Emote is not external", "showExternalTrackedEmote_emote_is_not_external");
|
return createResponse(event, Long.parseLong(emote));
|
||||||
}
|
|
||||||
return interactionService.replyEmbed(SHOW_EXTERNAL_TRACKED_EMOTE_RESPONSE_TEMPLATE_KEY, trackedEmote, event)
|
|
||||||
.thenApply(unused -> CommandResult.fromIgnored());
|
|
||||||
} else {
|
} else {
|
||||||
throw new TrackedEmoteNotFoundException();
|
throw new TrackedEmoteNotFoundException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CompletableFuture<CommandResult> createResponse(SlashCommandInteractionEvent event, Long emoteId) {
|
||||||
|
TrackedEmote trackedEmote = trackedEmoteManagementService.loadByTrackedEmoteServer(new ServerSpecificId(event.getGuild().getIdLong(), emoteId));
|
||||||
|
if(!trackedEmote.getExternal()) {
|
||||||
|
throw new AbstractoTemplatedException("Emote is not external", "showExternalTrackedEmote_emote_is_not_external");
|
||||||
|
}
|
||||||
|
return interactionService.replyEmbed(SHOW_EXTERNAL_TRACKED_EMOTE_RESPONSE_TEMPLATE_KEY, trackedEmote, event)
|
||||||
|
.thenApply(unused -> CommandResult.fromIgnored());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandConfiguration getConfiguration() {
|
public CommandConfiguration getConfiguration() {
|
||||||
List<Parameter> parameters = new ArrayList<>();
|
List<Parameter> parameters = new ArrayList<>();
|
||||||
@@ -117,7 +108,7 @@ public class ShowExternalTrackedEmote extends AbstractConditionableCommand {
|
|||||||
.templated(true)
|
.templated(true)
|
||||||
.async(true)
|
.async(true)
|
||||||
.slashCommandConfig(slashCommandConfig)
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.messageCommandOnly(true)
|
.slashCommandOnly(true)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
.parameters(parameters)
|
.parameters(parameters)
|
||||||
|
|||||||
@@ -4,13 +4,11 @@ import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand
|
|||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
import dev.sheldan.abstracto.core.service.ChannelService;
|
|
||||||
import dev.sheldan.abstracto.core.service.FeatureModeService;
|
import dev.sheldan.abstracto.core.service.FeatureModeService;
|
||||||
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
||||||
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
||||||
@@ -39,9 +37,6 @@ public class ShowTrackedEmotes extends AbstractConditionableCommand {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private TrackedEmoteService trackedEmoteService;
|
private TrackedEmoteService trackedEmoteService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ChannelService channelService;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private FeatureModeService featureModeService;
|
private FeatureModeService featureModeService;
|
||||||
|
|
||||||
@@ -62,67 +57,6 @@ public class ShowTrackedEmotes extends AbstractConditionableCommand {
|
|||||||
private static final String SHOW_TRACKED_EMOTES_COMMAND_NAME = "showTrackedEmotes";
|
private static final String SHOW_TRACKED_EMOTES_COMMAND_NAME = "showTrackedEmotes";
|
||||||
private static final String SHOW_TRACKED_EMOTES_SHOW_ALL = "showAll";
|
private static final String SHOW_TRACKED_EMOTES_SHOW_ALL = "showAll";
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
|
||||||
// per default, do not show TrackedEmote for which tracking has been disabled
|
|
||||||
Boolean showTrackingDisabled = false;
|
|
||||||
if(!commandContext.getParameters().getParameters().isEmpty()) {
|
|
||||||
showTrackingDisabled = (Boolean) commandContext.getParameters().getParameters().get(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
TrackedEmoteOverview trackedEmoteOverview = trackedEmoteService.loadTrackedEmoteOverview(commandContext.getGuild(), showTrackingDisabled);
|
|
||||||
boolean noTrackedEmotesAvailable = true;
|
|
||||||
List<CompletableFuture<Message>> messagePromises = new ArrayList<>();
|
|
||||||
// only show the embed, if there are static tracked emotes
|
|
||||||
if(!trackedEmoteOverview.getStaticEmotes().isEmpty()) {
|
|
||||||
noTrackedEmotesAvailable = false;
|
|
||||||
messagePromises.addAll(channelService.sendEmbedTemplateInMessageChannel(SHOW_TRACKED_EMOTES_STATIC_RESPONSE, trackedEmoteOverview, commandContext.getChannel()));
|
|
||||||
}
|
|
||||||
|
|
||||||
// only show the embed if there are animated tracked emotes
|
|
||||||
if(!trackedEmoteOverview.getAnimatedEmotes().isEmpty()) {
|
|
||||||
noTrackedEmotesAvailable = false;
|
|
||||||
messagePromises.addAll(channelService.sendEmbedTemplateInMessageChannel(SHOW_TRACKED_EMOTES_ANIMATED_RESPONSE, trackedEmoteOverview, commandContext.getChannel()));
|
|
||||||
}
|
|
||||||
|
|
||||||
// only show the embed, if there are deleted static emotes
|
|
||||||
if(!trackedEmoteOverview.getDeletedStaticEmotes().isEmpty()) {
|
|
||||||
noTrackedEmotesAvailable = false;
|
|
||||||
messagePromises.addAll(channelService.sendEmbedTemplateInMessageChannel(SHOW_TRACKED_EMOTES_DELETED_STATIC_RESPONSE, trackedEmoteOverview, commandContext.getChannel()));
|
|
||||||
}
|
|
||||||
|
|
||||||
// only show the embed, if there are deleted animated emotes
|
|
||||||
if(!trackedEmoteOverview.getDeletedAnimatedEmotes().isEmpty()) {
|
|
||||||
noTrackedEmotesAvailable = false;
|
|
||||||
messagePromises.addAll(channelService.sendEmbedTemplateInMessageChannel(SHOW_TRACKED_EMOTES_DELETED_ANIMATED_RESPONSE, trackedEmoteOverview, commandContext.getChannel()));
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean externalTrackingEnabled = featureModeService.featureModeActive(StatisticFeatureDefinition.EMOTE_TRACKING, commandContext.getGuild().getIdLong(), EmoteTrackingMode.EXTERNAL_EMOTES);
|
|
||||||
|
|
||||||
// only show external emotes if external emotes are enabled
|
|
||||||
if(externalTrackingEnabled) {
|
|
||||||
|
|
||||||
// only show the embed if there are external static emotes
|
|
||||||
if(!trackedEmoteOverview.getExternalStaticEmotes().isEmpty()) {
|
|
||||||
noTrackedEmotesAvailable = false;
|
|
||||||
messagePromises.addAll(channelService.sendEmbedTemplateInMessageChannel(SHOW_TRACKED_EMOTES_EXTERNAL_STATIC_RESPONSE, trackedEmoteOverview, commandContext.getChannel()));
|
|
||||||
}
|
|
||||||
|
|
||||||
// only show the embed if there are external animated emotes
|
|
||||||
if(!trackedEmoteOverview.getExternalAnimatedEmotes().isEmpty()) {
|
|
||||||
noTrackedEmotesAvailable = false;
|
|
||||||
messagePromises.addAll(channelService.sendEmbedTemplateInMessageChannel(SHOW_TRACKED_EMOTES_EXTERNAL_ANIMATED_RESPONSE, trackedEmoteOverview, commandContext.getChannel()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// if there are no tracked emotes available, show an embed indicating so
|
|
||||||
if(noTrackedEmotesAvailable) {
|
|
||||||
messagePromises.addAll(channelService.sendEmbedTemplateInMessageChannel(SHOW_TRACKED_EMOTES_NO_STATS_AVAILABLE, new Object(), commandContext.getChannel()));
|
|
||||||
}
|
|
||||||
return FutureUtils.toSingleFutureGeneric(messagePromises)
|
|
||||||
.thenApply(unused -> CommandResult.fromIgnored());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
// per default, do not show TrackedEmote for which tracking has been disabled
|
// per default, do not show TrackedEmote for which tracking has been disabled
|
||||||
@@ -215,7 +149,7 @@ public class ShowTrackedEmotes extends AbstractConditionableCommand {
|
|||||||
.templated(true)
|
.templated(true)
|
||||||
.async(true)
|
.async(true)
|
||||||
.slashCommandConfig(slashCommandConfig)
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.messageCommandOnly(true)
|
.slashCommandOnly(true)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
.parameters(parameters)
|
.parameters(parameters)
|
||||||
|
|||||||
@@ -4,13 +4,10 @@ import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand
|
|||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
import dev.sheldan.abstracto.core.service.ChannelService;
|
|
||||||
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
|
||||||
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
import dev.sheldan.abstracto.statistic.config.StatisticFeatureDefinition;
|
||||||
import dev.sheldan.abstracto.statistic.config.StatisticSlashCommandNames;
|
import dev.sheldan.abstracto.statistic.config.StatisticSlashCommandNames;
|
||||||
import dev.sheldan.abstracto.statistic.emote.config.EmoteTrackingModuleDefinition;
|
import dev.sheldan.abstracto.statistic.emote.config.EmoteTrackingModuleDefinition;
|
||||||
@@ -35,23 +32,12 @@ public class SyncTrackedEmotes extends AbstractConditionableCommand {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private TrackedEmoteService trackedEmoteService;
|
private TrackedEmoteService trackedEmoteService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ChannelService channelService;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private InteractionService interactionService;
|
private InteractionService interactionService;
|
||||||
|
|
||||||
static final String SYNC_TRACKED_EMOTES_RESULT_RESPONSE = "syncTrackedEmotes_result_response";
|
static final String SYNC_TRACKED_EMOTES_RESULT_RESPONSE = "syncTrackedEmotes_result_response";
|
||||||
private static final String SYNC_TRACKED_EMOTES_COMMAND_NAME = "syncTrackedEmotes";
|
private static final String SYNC_TRACKED_EMOTES_COMMAND_NAME = "syncTrackedEmotes";
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
|
||||||
TrackedEmoteSynchronizationResult syncResult = trackedEmoteService.synchronizeTrackedEmotes(commandContext.getGuild());
|
|
||||||
// show a result of how many emotes were deleted/added
|
|
||||||
return FutureUtils.toSingleFutureGeneric(channelService.sendEmbedTemplateInMessageChannel(SYNC_TRACKED_EMOTES_RESULT_RESPONSE, syncResult, commandContext.getChannel()))
|
|
||||||
.thenApply(unused -> CommandResult.fromIgnored());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
TrackedEmoteSynchronizationResult syncResult = trackedEmoteService.synchronizeTrackedEmotes(event.getGuild());
|
TrackedEmoteSynchronizationResult syncResult = trackedEmoteService.synchronizeTrackedEmotes(event.getGuild());
|
||||||
@@ -81,7 +67,7 @@ public class SyncTrackedEmotes extends AbstractConditionableCommand {
|
|||||||
.module(EmoteTrackingModuleDefinition.EMOTE_TRACKING)
|
.module(EmoteTrackingModuleDefinition.EMOTE_TRACKING)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
.slashCommandConfig(slashCommandConfig)
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.messageCommandOnly(true)
|
.slashCommandOnly(true)
|
||||||
.async(true)
|
.async(true)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand
|
|||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
import dev.sheldan.abstracto.core.command.exception.IncorrectParameterException;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
@@ -62,30 +60,6 @@ public class TrackEmote extends AbstractConditionableCommand {
|
|||||||
|
|
||||||
private static final String TRACK_EMOTE_RESPONSE = "trackEmote_response";
|
private static final String TRACK_EMOTE_RESPONSE = "trackEmote_response";
|
||||||
|
|
||||||
@Override
|
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
|
||||||
TrackEmoteParameter emoteToTrack = (TrackEmoteParameter) commandContext.getParameters().getParameters().get(0);
|
|
||||||
Long emoteId = emoteToTrack.getTrackedEmote().getTrackedEmoteId().getId();
|
|
||||||
long serverId = commandContext.getGuild().getIdLong();
|
|
||||||
// if its already a tracked emote, just set the tracking_enabled flag to true
|
|
||||||
if(trackedEmoteManagementService.trackedEmoteExists(emoteId, serverId)) {
|
|
||||||
TrackedEmote trackedemote = trackedEmoteManagementService.loadByEmoteId(emoteId, serverId);
|
|
||||||
trackedEmoteManagementService.enableTrackedEmote(trackedemote);
|
|
||||||
} else if(emoteToTrack.getEmote() != null) {
|
|
||||||
// if its a new emote, lets see if its external
|
|
||||||
boolean external = !emoteService.emoteIsFromGuild(emoteToTrack.getEmote(), commandContext.getGuild());
|
|
||||||
if(external) {
|
|
||||||
// this throws an exception if the feature mode is not enabled
|
|
||||||
featureModeService.validateActiveFeatureMode(serverId, StatisticFeatureDefinition.EMOTE_TRACKING, EmoteTrackingMode.EXTERNAL_EMOTES);
|
|
||||||
}
|
|
||||||
trackedEmoteService.createTrackedEmote(emoteToTrack.getEmote(), commandContext.getGuild(), external);
|
|
||||||
} else {
|
|
||||||
// in case the ID was not an existing TrackedEmote, and no Emote was given, we need to fail
|
|
||||||
throw new IncorrectParameterException(this, getConfiguration().getParameters().get(0).getName());
|
|
||||||
}
|
|
||||||
return CommandResult.fromSuccess();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
String emote = slashCommandParameterService.getCommandOption(TRACK_EMOTE_EMOTE, event, String.class);
|
String emote = slashCommandParameterService.getCommandOption(TRACK_EMOTE_EMOTE, event, String.class);
|
||||||
@@ -102,8 +76,7 @@ public class TrackEmote extends AbstractConditionableCommand {
|
|||||||
} else {
|
} else {
|
||||||
// if its a new emote, lets see if its external
|
// if its a new emote, lets see if its external
|
||||||
boolean external = !emoteService.emoteIsFromGuild(customEmoji, event.getGuild());
|
boolean external = !emoteService.emoteIsFromGuild(customEmoji, event.getGuild());
|
||||||
if (external)
|
if (external) {
|
||||||
{
|
|
||||||
// this throws an exception if the feature mode is not enabled
|
// this throws an exception if the feature mode is not enabled
|
||||||
featureModeService.validateActiveFeatureMode(serverId, StatisticFeatureDefinition.EMOTE_TRACKING, EmoteTrackingMode.EXTERNAL_EMOTES);
|
featureModeService.validateActiveFeatureMode(serverId, StatisticFeatureDefinition.EMOTE_TRACKING, EmoteTrackingMode.EXTERNAL_EMOTES);
|
||||||
}
|
}
|
||||||
@@ -144,7 +117,7 @@ public class TrackEmote extends AbstractConditionableCommand {
|
|||||||
.name(TRACK_EMOTE_COMMAND_NAME)
|
.name(TRACK_EMOTE_COMMAND_NAME)
|
||||||
.module(EmoteTrackingModuleDefinition.EMOTE_TRACKING)
|
.module(EmoteTrackingModuleDefinition.EMOTE_TRACKING)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
.messageCommandOnly(true)
|
.slashCommandOnly(true)
|
||||||
.slashCommandConfig(slashCommandConfig)
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
|
|||||||
@@ -33,80 +33,102 @@ public interface UsedEmoteRepository extends JpaRepository<UsedEmote, UsedEmoteD
|
|||||||
" and type = :used_emote_type", nativeQuery = true)
|
" and type = :used_emote_type", nativeQuery = true)
|
||||||
Optional<UsedEmote> findEmoteFromServerToday(@Param("emote_id") Long emoteId, @Param("server_id") Long server_id, @Param("used_emote_type") String usedEmoteType);
|
Optional<UsedEmote> findEmoteFromServerToday(@Param("emote_id") Long emoteId, @Param("server_id") Long server_id, @Param("used_emote_type") String usedEmoteType);
|
||||||
|
|
||||||
@Query(value = "select us.emote_id as emoteId, us.server_id as serverId, sum(us.amount) as amount from used_emote us " +
|
@Query(value = "select te.id as emoteId, te.server_id as serverId, coalesce(sum(us.amount), 0) as amount " +
|
||||||
"inner join tracked_emote te " +
|
"from tracked_emote te " +
|
||||||
"on us.emote_id = te.id and us.server_id = te.server_id " +
|
"left join used_emote us " +
|
||||||
"where us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) and us.server_id = :server_id " +
|
"on us.emote_id = te.id " +
|
||||||
"group by us.emote_id, us.server_id " +
|
"and us.server_id = te.server_id " +
|
||||||
|
"and us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) " +
|
||||||
|
"where te.server_id = :server_id " +
|
||||||
|
"group by te.id, te.server_id " +
|
||||||
"order by amount desc", nativeQuery = true)
|
"order by amount desc", nativeQuery = true)
|
||||||
List<EmoteStatsResult> getEmoteStatsForServerSince(@Param("server_id") Long serverId, @Param("start_date") Instant since);
|
List<EmoteStatsResult> getEmoteStatsForServerSince(@Param("server_id") Long serverId, @Param("start_date") Instant since);
|
||||||
|
|
||||||
@Query(value = "select us.emote_id as emoteId, us.server_id as serverId, sum(us.amount) as amount from used_emote us " +
|
@Query(value = "select te.id as emoteId, te.server_id as serverId, coalesce(sum(us.amount), 0) as amount " +
|
||||||
"inner join tracked_emote te " +
|
"from tracked_emote te " +
|
||||||
"on us.emote_id = te.id and us.server_id = te.server_id " +
|
"left join used_emote us " +
|
||||||
"where us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) and us.server_id = :server_id and te.external = true " +
|
"on us.emote_id = te.id " +
|
||||||
"group by us.emote_id, us.server_id " +
|
"and us.server_id = te.server_id " +
|
||||||
|
"and us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) " +
|
||||||
|
"where us.server_id = :server_id " +
|
||||||
|
"and te.external = true " +
|
||||||
|
"group by te.id, te.server_id " +
|
||||||
"order by amount desc", nativeQuery = true)
|
"order by amount desc", nativeQuery = true)
|
||||||
List<EmoteStatsResult> getExternalEmoteStatsForServerSince(@Param("server_id") Long serverId, @Param("start_date") Instant since);
|
List<EmoteStatsResult> getExternalEmoteStatsForServerSince(@Param("server_id") Long serverId, @Param("start_date") Instant since);
|
||||||
|
|
||||||
@Query(value = "select us.emote_id as emoteId, us.server_id as serverId, sum(us.amount) as amount from used_emote us " +
|
@Query(value = "select te.id as emoteId, te.server_id as serverId, coalesce(sum(us.amount), 0) as amount " +
|
||||||
"inner join tracked_emote te " +
|
"from tracked_emote te " +
|
||||||
"on us.emote_id = te.id and us.server_id = te.server_id " +
|
"left join used_emote us " +
|
||||||
"where us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) " +
|
"on us.emote_id = te.id " +
|
||||||
"and us.server_id = :server_id " +
|
"and us.server_id = te.server_id " +
|
||||||
"and te.external = true " +
|
"and us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) " +
|
||||||
"and us.type = :used_emote_type " +
|
"and us.type = :used_emote_type " +
|
||||||
"group by us.emote_id, us.server_id " +
|
"where te.server_id = :server_id " +
|
||||||
|
"and te.external = true " +
|
||||||
|
"group by te.id, te.server_id " +
|
||||||
"order by amount desc", nativeQuery = true)
|
"order by amount desc", nativeQuery = true)
|
||||||
List<EmoteStatsResult> getExternalEmoteStatsForServerSince(@Param("server_id") Long serverId, @Param("start_date") Instant since, @Param("used_emote_type") String usedEmoteType);
|
List<EmoteStatsResult> getExternalEmoteStatsForServerSince(@Param("server_id") Long serverId, @Param("start_date") Instant since, @Param("used_emote_type") String usedEmoteType);
|
||||||
|
|
||||||
@Query(value = "select us.emote_id as emoteId, us.server_id as serverId, sum(us.amount) as amount from used_emote us " +
|
@Query(value = "select te.id as emoteId, te.server_id as serverId, coalesce(sum(us.amount), 0) as amount " +
|
||||||
"inner join tracked_emote te " +
|
"from tracked_emote te " +
|
||||||
"on us.emote_id = te.id and us.server_id = te.server_id " +
|
"left join used_emote us " +
|
||||||
"where us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) and us.server_id = :server_id and te.deleted = true " +
|
"on us.emote_id = te.id " +
|
||||||
"group by us.emote_id, us.server_id " +
|
"and us.server_id = te.server_id " +
|
||||||
|
"and us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) " +
|
||||||
|
"where te.server_id = :server_id " +
|
||||||
|
"and te.deleted = true " +
|
||||||
|
"group by te.id, te.server_id " +
|
||||||
"order by amount desc", nativeQuery = true)
|
"order by amount desc", nativeQuery = true)
|
||||||
List<EmoteStatsResult> getDeletedEmoteStatsForServerSince(@Param("server_id") Long serverId, @Param("start_date") Instant since);
|
List<EmoteStatsResult> getDeletedEmoteStatsForServerSince(@Param("server_id") Long serverId, @Param("start_date") Instant since);
|
||||||
|
|
||||||
@Query(value = "select us.emote_id as emoteId, us.server_id as serverId, sum(us.amount) as amount from used_emote us " +
|
@Query(value = "select te.id as emoteId, te.server_id as serverId, coalesce(sum(us.amount), 0) as amount " +
|
||||||
"inner join tracked_emote te " +
|
"from tracked_emote te " +
|
||||||
"on us.emote_id = te.id and us.server_id = te.server_id " +
|
"left join used_emote us " +
|
||||||
"where us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) " +
|
"on us.emote_id = te.id " +
|
||||||
"and us.server_id = :server_id " +
|
"and us.server_id = te.server_id " +
|
||||||
"and te.deleted = true " +
|
"and us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) " +
|
||||||
"and us.type = :used_emote_type " +
|
"and us.type = :used_emote_type " +
|
||||||
"group by us.emote_id, us.server_id " +
|
"where te.server_id = :server_id " +
|
||||||
|
"and te.deleted = true " +
|
||||||
|
"group by te.id, te.server_id " +
|
||||||
"order by amount desc", nativeQuery = true)
|
"order by amount desc", nativeQuery = true)
|
||||||
List<EmoteStatsResult> getDeletedEmoteStatsForServerSince(@Param("server_id") Long serverId, @Param("start_date") Instant since, @Param("used_emote_type") String usedEmoteType);
|
List<EmoteStatsResult> getDeletedEmoteStatsForServerSince(@Param("server_id") Long serverId, @Param("start_date") Instant since, @Param("used_emote_type") String usedEmoteType);
|
||||||
|
|
||||||
@Query(value = "select us.emote_id as emoteId, us.server_id as serverId, sum(us.amount) as amount from used_emote us " +
|
@Query(value = "select te.id as emoteId, te.server_id as serverId, coalesce(sum(us.amount), 0) as amount " +
|
||||||
"inner join tracked_emote te " +
|
"from tracked_emote te " +
|
||||||
"on us.emote_id = te.id and us.server_id = te.server_id " +
|
"left join used_emote us " +
|
||||||
"where us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) and us.server_id = :server_id and te.external = false and te.deleted = false " +
|
"on us.emote_id = te.id " +
|
||||||
"group by us.emote_id, us.server_id " +
|
"and us.server_id = te.server_id " +
|
||||||
|
"and us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) " +
|
||||||
|
"where te.server_id = :server_id " +
|
||||||
|
"and te.external = false " +
|
||||||
|
"and te.deleted = false " +
|
||||||
|
"group by te.id, te.server_id " +
|
||||||
"order by amount desc", nativeQuery = true)
|
"order by amount desc", nativeQuery = true)
|
||||||
List<EmoteStatsResult> getCurrentlyExistingEmoteStatsForServerSince(@Param("server_id") Long serverId, @Param("start_date") Instant since);
|
List<EmoteStatsResult> getCurrentlyExistingEmoteStatsForServerSince(@Param("server_id") Long serverId, @Param("start_date") Instant since);
|
||||||
|
|
||||||
@Query(value = "select us.emote_id as emoteId, us.server_id as serverId, sum(us.amount) as amount from used_emote us " +
|
@Query(value = "select te.id as emoteId, te.server_id as serverId, coalesce(sum(us.amount), 0) as amount " +
|
||||||
"inner join tracked_emote te " +
|
"from tracked_emote te " +
|
||||||
"on us.emote_id = te.id and us.server_id = te.server_id " +
|
"left join used_emote us " +
|
||||||
"where us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) " +
|
"on us.emote_id = te.id " +
|
||||||
"and us.server_id = :server_id " +
|
"and us.server_id = te.server_id " +
|
||||||
|
"and us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) " +
|
||||||
|
"and us.type = :used_emote_type " +
|
||||||
|
"where te.server_id = :server_id " +
|
||||||
"and te.external = false " +
|
"and te.external = false " +
|
||||||
"and te.deleted = false " +
|
"and te.deleted = false " +
|
||||||
"and us.type = :used_emote_type " +
|
"group by te.id, te.server_id " +
|
||||||
"group by us.emote_id, us.server_id " +
|
|
||||||
"order by amount desc", nativeQuery = true)
|
"order by amount desc", nativeQuery = true)
|
||||||
List<EmoteStatsResult> getCurrentlyExistingEmoteStatsForServerSince(@Param("server_id") Long serverId, @Param("start_date") Instant since, @Param("used_emote_type") String usedEmoteType);
|
List<EmoteStatsResult> getCurrentlyExistingEmoteStatsForServerSince(@Param("server_id") Long serverId, @Param("start_date") Instant since, @Param("used_emote_type") String usedEmoteType);
|
||||||
|
|
||||||
@Query(value = "select :tracked_emote_id as emoteId, :server_id as serverId, sum(us.amount) as amount " +
|
@Query(value = "select :tracked_emote_id as emoteId, :server_id as serverId, coalesce(sum(us.amount), 0) as amount " +
|
||||||
"from used_emote us " +
|
"from used_emote us " +
|
||||||
"where us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) " +
|
"where us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) " +
|
||||||
"and us.server_id = :server_id " +
|
"and us.server_id = :server_id " +
|
||||||
"and us.emote_id = :tracked_emote_id", nativeQuery = true)
|
"and us.emote_id = :tracked_emote_id", nativeQuery = true)
|
||||||
EmoteStatsResult getEmoteStatForTrackedEmote(@Param("tracked_emote_id") Long trackedEmoteId, @Param("server_id") Long serverId, @Param("start_date") Instant since);
|
EmoteStatsResult getEmoteStatForTrackedEmote(@Param("tracked_emote_id") Long trackedEmoteId, @Param("server_id") Long serverId, @Param("start_date") Instant since);
|
||||||
|
|
||||||
@Query(value = "select :tracked_emote_id as emoteId, :server_id as serverId, sum(us.amount) as amount " +
|
@Query(value = "select :tracked_emote_id as emoteId, :server_id as serverId, coalesce(sum(us.amount), 0) as amount " +
|
||||||
"from used_emote us " +
|
"from used_emote us " +
|
||||||
"where us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) " +
|
"where us.use_date >= date_trunc('day', cast(:start_date AS timestamp)) " +
|
||||||
"and us.server_id = :server_id " +
|
"and us.server_id = :server_id " +
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>statistic</artifactId>
|
<artifactId>statistic</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ public class EmoteStatsModel {
|
|||||||
private Guild guild;
|
private Guild guild;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether or not this model contains *any* stats to render.
|
* Whether this model contains *any* stats to render.
|
||||||
* @return Whether or not there are any stats to display
|
* @return Whether there are any stats to display
|
||||||
*/
|
*/
|
||||||
public boolean areStatsAvailable() {
|
public boolean areStatsAvailable() {
|
||||||
return !animatedEmotes.isEmpty() || !staticEmotes.isEmpty();
|
return !animatedEmotes.isEmpty() || !staticEmotes.isEmpty();
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>sticky-roles</artifactId>
|
<artifactId>sticky-roles</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>sticky-roles-impl</artifactId>
|
<artifactId>sticky-roles-impl</artifactId>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>sticky-roles</artifactId>
|
<artifactId>sticky-roles</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>sticky-roles-int</artifactId>
|
<artifactId>sticky-roles-int</artifactId>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>suggestion</artifactId>
|
<artifactId>suggestion</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>suggestion</artifactId>
|
<artifactId>suggestion</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>twitch</artifactId>
|
<artifactId>twitch</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>twitch</artifactId>
|
<artifactId>twitch</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>utility</artifactId>
|
<artifactId>utility</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>utility</artifactId>
|
<artifactId>utility</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>voice-channel-context</artifactId>
|
<artifactId>voice-channel-context</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>voice-channel-context</artifactId>
|
<artifactId>voice-channel-context</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>abstracto-modules</artifactId>
|
<artifactId>abstracto-modules</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>webservices</artifactId>
|
<artifactId>webservices</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.modules</groupId>
|
<groupId>dev.sheldan.abstracto.modules</groupId>
|
||||||
<artifactId>webservices</artifactId>
|
<artifactId>webservices</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto</groupId>
|
<groupId>dev.sheldan.abstracto</groupId>
|
||||||
<artifactId>abstracto-application</artifactId>
|
<artifactId>abstracto-application</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.core</groupId>
|
<groupId>dev.sheldan.abstracto.core</groupId>
|
||||||
<artifactId>core</artifactId>
|
<artifactId>core</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import dev.sheldan.abstracto.core.templating.model.EmbedFooter;
|
|||||||
import dev.sheldan.abstracto.core.templating.model.MessageToSend;
|
import dev.sheldan.abstracto.core.templating.model.MessageToSend;
|
||||||
import dev.sheldan.abstracto.core.templating.service.TemplateService;
|
import dev.sheldan.abstracto.core.templating.service.TemplateService;
|
||||||
import dev.sheldan.abstracto.core.templating.service.TemplateServiceBean;
|
import dev.sheldan.abstracto.core.templating.service.TemplateServiceBean;
|
||||||
|
import dev.sheldan.abstracto.core.utils.CompletableFutureList;
|
||||||
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
||||||
import dev.sheldan.abstracto.scheduling.model.JobParameters;
|
import dev.sheldan.abstracto.scheduling.model.JobParameters;
|
||||||
import dev.sheldan.abstracto.scheduling.service.SchedulerService;
|
import dev.sheldan.abstracto.scheduling.service.SchedulerService;
|
||||||
@@ -23,6 +24,7 @@ import lombok.Setter;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel;
|
import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel;
|
||||||
|
import net.dv8tion.jda.api.interactions.InteractionHook;
|
||||||
import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
|
import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -138,6 +140,16 @@ public class PaginatorServiceBean implements PaginatorService {
|
|||||||
.thenAccept(message -> self.setupButtonPayloads(message, setup, serverId));
|
.thenAccept(message -> self.setupButtonPayloads(message, setup, serverId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<Void> sendPaginatorToInteraction(String templateKey, Object model, InteractionHook interactionHook) {
|
||||||
|
Long serverId = interactionHook.getInteraction().getGuild().getIdLong();
|
||||||
|
PaginatorSetup setup = getPaginatorSetup(templateKey, model, interactionHook.getInteraction().getUser().getIdLong(), serverId);
|
||||||
|
CompletableFutureList<Message> futures =
|
||||||
|
new CompletableFutureList<>(interactionService.sendMessageToInteraction(setup.getMessageToSend(), interactionHook));
|
||||||
|
return futures
|
||||||
|
.getMainFuture().thenAccept(aVoid -> self.setupButtonPayloads(futures.getFutures().get(0).join(), setup, serverId));
|
||||||
|
}
|
||||||
|
|
||||||
private void setupFooters(PaginatorConfiguration configuration, Long serverId) {
|
private void setupFooters(PaginatorConfiguration configuration, Long serverId) {
|
||||||
for (int i = 0; i < configuration.getEmbedConfigs().size(); i++) {
|
for (int i = 0; i < configuration.getEmbedConfigs().size(); i++) {
|
||||||
PaginatorFooterModel paginatorModel = PaginatorFooterModel
|
PaginatorFooterModel paginatorModel = PaginatorFooterModel
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.core</groupId>
|
<groupId>dev.sheldan.abstracto.core</groupId>
|
||||||
<artifactId>core</artifactId>
|
<artifactId>core</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package dev.sheldan.abstracto.core.service;
|
|||||||
|
|
||||||
|
|
||||||
import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel;
|
import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel;
|
||||||
|
import net.dv8tion.jda.api.interactions.InteractionHook;
|
||||||
import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
|
import net.dv8tion.jda.api.interactions.callbacks.IReplyCallback;
|
||||||
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
@@ -9,4 +10,5 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
public interface PaginatorService {
|
public interface PaginatorService {
|
||||||
CompletableFuture<Void> createPaginatorFromTemplate(String templateKey, Object model, GuildMessageChannel textChannel, Long userId);
|
CompletableFuture<Void> createPaginatorFromTemplate(String templateKey, Object model, GuildMessageChannel textChannel, Long userId);
|
||||||
CompletableFuture<Void> createPaginatorFromTemplate(String templateKey, Object model, IReplyCallback callback);
|
CompletableFuture<Void> createPaginatorFromTemplate(String templateKey, Object model, IReplyCallback callback);
|
||||||
|
CompletableFuture<Void> sendPaginatorToInteraction(String templateKey, Object model, InteractionHook interactionHook);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>core</artifactId>
|
<artifactId>core</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.core</groupId>
|
<groupId>dev.sheldan.abstracto.core</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>core</artifactId>
|
<artifactId>core</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto.core</groupId>
|
<groupId>dev.sheldan.abstracto.core</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto</groupId>
|
<groupId>dev.sheldan.abstracto</groupId>
|
||||||
<artifactId>abstracto-application</artifactId>
|
<artifactId>abstracto-application</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>abstracto-application</artifactId>
|
<artifactId>abstracto-application</artifactId>
|
||||||
<groupId>dev.sheldan.abstracto</groupId>
|
<groupId>dev.sheldan.abstracto</groupId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
<groupId>dev.sheldan.abstracto</groupId>
|
<groupId>dev.sheldan.abstracto</groupId>
|
||||||
<artifactId>abstracto-application</artifactId>
|
<artifactId>abstracto-application</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
<connection>scm:git:${project.scm.url}</connection>
|
<connection>scm:git:${project.scm.url}</connection>
|
||||||
<developerConnection>scm:git:${project.scm.url}</developerConnection>
|
<developerConnection>scm:git:${project.scm.url}</developerConnection>
|
||||||
<url>https://github.com/Sheldan/abstracto.git</url>
|
<url>https://github.com/Sheldan/abstracto.git</url>
|
||||||
<tag>v1.5.58</tag>
|
<tag>HEAD</tag>
|
||||||
</scm>
|
</scm>
|
||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto</groupId>
|
<groupId>dev.sheldan.abstracto</groupId>
|
||||||
<artifactId>abstracto-application</artifactId>
|
<artifactId>abstracto-application</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>dev.sheldan.abstracto.scheduling</groupId>
|
<groupId>dev.sheldan.abstracto.scheduling</groupId>
|
||||||
<artifactId>scheduling</artifactId>
|
<artifactId>scheduling</artifactId>
|
||||||
<version>1.5.58</version>
|
<version>1.5.60-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user