mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-06-21 08:59:04 +00:00
Compare commits
452 Commits
abstracto-
...
embeds-v2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fa22009007 | ||
|
|
7b7fdf781a | ||
|
|
15d41c58ef | ||
|
|
ad863af5d6 | ||
|
|
f3dae2f6a3 | ||
|
|
9f9c0612eb | ||
|
|
db73071a71 | ||
|
|
d7125fbf25 | ||
|
|
fd3bf41406 | ||
|
|
d1abe194ec | ||
|
|
79477923c6 | ||
|
|
be9ffa3045 | ||
|
|
e29ceb9243 | ||
|
|
70acf46cfd | ||
|
|
022603ae3b | ||
|
|
264082d63d | ||
|
|
3e9d53feee | ||
|
|
6c9cb39ad6 | ||
|
|
899afa82c4 | ||
|
|
2a357cf09f | ||
|
|
1aeb3b56cb | ||
|
|
05c3f1ac01 | ||
|
|
1379cae707 | ||
|
|
ec78a0d856 | ||
|
|
33ad3bdc5d | ||
|
|
99c4c3e59c | ||
|
|
8544c0c2b1 | ||
|
|
a8c2dfe15a | ||
|
|
29fd453117 | ||
|
|
cfea95f83e | ||
|
|
8cb04e2396 | ||
|
|
f99c5351e6 | ||
|
|
210140b242 | ||
|
|
8fded5480d | ||
|
|
b74a238090 | ||
|
|
149a85cde6 | ||
|
|
6455d24711 | ||
|
|
b862ed95f2 | ||
|
|
5ba2f2a2f8 | ||
|
|
ce234f986e | ||
|
|
6472c70229 | ||
|
|
cdb6003976 | ||
|
|
54cf1a8299 | ||
|
|
1d6bb7af08 | ||
|
|
629cafc902 | ||
|
|
58632bcf9d | ||
|
|
592ac01bfa | ||
|
|
732535850b | ||
|
|
cd3378df32 | ||
|
|
87d8338d51 | ||
|
|
a371993c87 | ||
|
|
77b97507b3 | ||
|
|
e952727849 | ||
|
|
909a08d3d2 | ||
|
|
e02236145f | ||
|
|
1d810bdc07 | ||
|
|
f9334d5210 | ||
|
|
0a7e30cace | ||
|
|
d91091d149 | ||
|
|
2690b1a5d9 | ||
|
|
ed42940e29 | ||
|
|
2c3b16879e | ||
|
|
bd7fc6aa65 | ||
|
|
6dfcebb25b | ||
|
|
0eaccb4b0f | ||
|
|
4ae6a154c7 | ||
|
|
3ad8369ab3 | ||
|
|
6be1b7df04 | ||
|
|
df8eb399f7 | ||
|
|
3b7157714d | ||
|
|
ef7e5b4a46 | ||
|
|
c28286bf3f | ||
|
|
15e998e05d | ||
|
|
cdbdb395ac | ||
|
|
8819c12b81 | ||
|
|
a4e0971c27 | ||
|
|
726fc27331 | ||
|
|
a9d6a1221e | ||
|
|
84cc32e3b3 | ||
|
|
983c747bc3 | ||
|
|
a901d8a3ba | ||
|
|
fed2d24a55 | ||
|
|
aa359f60f3 | ||
|
|
353fda7770 | ||
|
|
b88ae377b1 | ||
|
|
3d915b96e7 | ||
|
|
9a1e0f330a | ||
|
|
afeef80878 | ||
|
|
453378f0b6 | ||
|
|
0e95ddf198 | ||
|
|
90816649e2 | ||
|
|
5b90d429c2 | ||
|
|
7b1774b73e | ||
|
|
618155a464 | ||
|
|
feabe6426e | ||
|
|
2dc21ce996 | ||
|
|
5643a41fd8 | ||
|
|
08d0561998 | ||
|
|
879c1b0173 | ||
|
|
d5bf70f586 | ||
|
|
4525fbc861 | ||
|
|
4671a78ff9 | ||
|
|
c4174562c6 | ||
|
|
bfaa5d6140 | ||
|
|
d2e8398fa4 | ||
|
|
c67209925a | ||
|
|
f3ac7895eb | ||
|
|
6d893e39bb | ||
|
|
94140104de | ||
|
|
6d80423244 | ||
|
|
27040e506a | ||
|
|
3bbf5a2391 | ||
|
|
11cb3b9ee1 | ||
|
|
dccf314e53 | ||
|
|
a0daeee3a1 | ||
|
|
1b7c383ced | ||
|
|
087dd266cc | ||
|
|
beda17f672 | ||
|
|
5c234295aa | ||
|
|
9cfe4bf353 | ||
|
|
75c45541c9 | ||
|
|
11ac33ad4a | ||
|
|
a37a0f87a0 | ||
|
|
69353d32db | ||
|
|
b973c4660c | ||
|
|
34692d22eb | ||
|
|
33268cded6 | ||
|
|
40d66df9b0 | ||
|
|
92508d7a1d | ||
|
|
ccbf6147e9 | ||
|
|
a3545c4af0 | ||
|
|
fa187f8817 | ||
|
|
c39b7ebeec | ||
|
|
5cbad801ff | ||
|
|
826bee1f81 | ||
|
|
99bf9a9be0 | ||
|
|
5b5e4973a7 | ||
|
|
65e956827c | ||
|
|
b258a8bc54 | ||
|
|
9864b7d875 | ||
|
|
27466b7333 | ||
|
|
bfb8969d1f | ||
|
|
0097ff801a | ||
|
|
b6a188c04d | ||
|
|
2fa1adde02 | ||
|
|
cb8b64cc01 | ||
|
|
3b3dd0dbb7 | ||
|
|
388fead2a6 | ||
|
|
336c3d0bd8 | ||
|
|
4991ad8f1c | ||
|
|
c5136a1808 | ||
|
|
446d882eec | ||
|
|
b3e207a967 | ||
|
|
5c25345cf8 | ||
|
|
a01a5055a0 | ||
|
|
234aae3783 | ||
|
|
ca45137cc6 | ||
|
|
bc3d16b40e | ||
|
|
66e212d30c | ||
|
|
b69811479f | ||
|
|
43c5d041ef | ||
|
|
dfe9792330 | ||
|
|
250df57bd0 | ||
|
|
02b8ed2b5d | ||
|
|
71c1445439 | ||
|
|
d86299cdf6 | ||
|
|
1b86fba3e0 | ||
|
|
3ee7c92cdd | ||
|
|
6c6cd130aa | ||
|
|
65a1d44069 | ||
|
|
11312a5e27 | ||
|
|
6b13958ac0 | ||
|
|
3142daafd3 | ||
|
|
4bef78f847 | ||
|
|
82be86e086 | ||
|
|
bff505ef25 | ||
|
|
533f5671c2 | ||
|
|
8c7547b485 | ||
|
|
741c194bb8 | ||
|
|
d2bdfd8dac | ||
|
|
36c67fbe20 | ||
|
|
8fd1aede2a | ||
|
|
287ae1f0b1 | ||
|
|
903361cb58 | ||
|
|
c8cf412a4a | ||
|
|
affc249012 | ||
|
|
653671ea79 | ||
|
|
7185908682 | ||
|
|
675da8d5d8 | ||
|
|
e91becee0d | ||
|
|
18732efe75 | ||
|
|
63897fd914 | ||
|
|
9b865af43b | ||
|
|
b78275734c | ||
|
|
00a6b0d1f8 | ||
|
|
13fe6f5e51 | ||
|
|
bc0c3a18d7 | ||
|
|
8f9b7eba16 | ||
|
|
48eacb2e1c | ||
|
|
2168814814 | ||
|
|
972a2829d7 | ||
|
|
dbf5d99622 | ||
|
|
f45721ba42 | ||
|
|
9034968868 | ||
|
|
bcb9bacea5 | ||
|
|
4b922da294 | ||
|
|
6d90314492 | ||
|
|
93b02d37ed | ||
|
|
c11ddd84ab | ||
|
|
518355a68a | ||
|
|
74ebeb4844 | ||
|
|
7d872c815c | ||
|
|
4ebcbeb753 | ||
|
|
53b0c91360 | ||
|
|
59575e0b49 | ||
|
|
94a18559d3 | ||
|
|
b0c90ee8e2 | ||
|
|
c20c7321ea | ||
|
|
11914d1be5 | ||
|
|
1689fcdae9 | ||
|
|
fc887d2f36 | ||
|
|
485782ff16 | ||
|
|
6460d2c5b7 | ||
|
|
e92b7320bd | ||
|
|
4af47ce086 | ||
|
|
3f2f3a9c1b | ||
|
|
fe1f03833b | ||
|
|
f2522d5a47 | ||
|
|
61450a6a00 | ||
|
|
05ea4d7dd3 | ||
|
|
71c18f8348 | ||
|
|
6030904d21 | ||
|
|
2fd636a39e | ||
|
|
a94b9293f7 | ||
|
|
3c4edf5671 | ||
|
|
f02f1eac4c | ||
|
|
373ed4cde5 | ||
|
|
5eb9a0e674 | ||
|
|
d4f07bd719 | ||
|
|
8924b75530 | ||
|
|
25bdc98944 | ||
|
|
062581fce5 | ||
|
|
be41551529 | ||
|
|
af8206c529 | ||
|
|
8efedf6f6f | ||
|
|
80aff40054 | ||
|
|
c71f5f004d | ||
|
|
350a634f50 | ||
|
|
f5de74c1e4 | ||
|
|
6e3809bfd9 | ||
|
|
8e6339a99b | ||
|
|
befef1f61d | ||
|
|
1f0bc493d9 | ||
|
|
48fa7a99dc | ||
|
|
d12497753d | ||
|
|
20a6e29f1b | ||
|
|
d2231b0934 | ||
|
|
0464afb7db | ||
|
|
c473ca74d4 | ||
|
|
a70ac5aa94 | ||
|
|
d10faf4d3d | ||
|
|
a346e1372c | ||
|
|
9a7c769e8f | ||
|
|
980ca9380c | ||
|
|
e9d14ac417 | ||
|
|
474e632fed | ||
|
|
2e5c2c26b9 | ||
|
|
a8ca9a8055 | ||
|
|
453ccf2e27 | ||
|
|
52c805f4ea | ||
|
|
4b3038078e | ||
|
|
af5f9a8361 | ||
|
|
e84b5ecbb5 | ||
|
|
1ba8219d7b | ||
|
|
60d2c669a2 | ||
|
|
3a122a72e5 | ||
|
|
d53126e5a5 | ||
|
|
208d9a28ed | ||
|
|
6643359953 | ||
|
|
bd7149d159 | ||
|
|
c0b6a19bca | ||
|
|
58eece0814 | ||
|
|
abfd2c9591 | ||
|
|
a71a448b4b | ||
|
|
4d1ce7158f | ||
|
|
9bbb9430d9 | ||
|
|
a608fba082 | ||
|
|
f97fe42e65 | ||
|
|
f12581f322 | ||
|
|
e8f630c94c | ||
|
|
14f35caede | ||
|
|
915eb8ced9 | ||
|
|
148c10f250 | ||
|
|
74e5154e29 | ||
|
|
baad696a20 | ||
|
|
b7b5dc7b6a | ||
|
|
f27f59c0b3 | ||
|
|
ccd7ace8d9 | ||
|
|
73a73dc4f2 | ||
|
|
156725afa6 | ||
|
|
b369b56823 | ||
|
|
7482bf545d | ||
|
|
9804d165ca | ||
|
|
59ddb0b27d | ||
|
|
9aea9d2b4f | ||
|
|
b042e586a7 | ||
|
|
91e2bea2fc | ||
|
|
f03bee8b1e | ||
|
|
f3144eb094 | ||
|
|
2396bf300b | ||
|
|
06ebf4c882 | ||
|
|
ff534c03ac | ||
|
|
67c76487e2 | ||
|
|
9a2f47e244 | ||
|
|
2f33d19171 | ||
|
|
f6fc02e758 | ||
|
|
007929cfa5 | ||
|
|
77e2eec3d1 | ||
|
|
74c8cf7b6b | ||
|
|
c8739b90ec | ||
|
|
d39a303207 | ||
|
|
3e326fe47e | ||
|
|
a1d460973c | ||
|
|
d2475179e6 | ||
|
|
5adc304e77 | ||
|
|
4940577383 | ||
|
|
bba0a2ace6 | ||
|
|
b7c427026d | ||
|
|
cee10de915 | ||
|
|
1786231e11 | ||
|
|
2231fdf289 | ||
|
|
a46e22b5b2 | ||
|
|
1c9b9af833 | ||
|
|
3cafc95ceb | ||
|
|
6409bbaa1d | ||
|
|
346e462185 | ||
|
|
46baa79d3e | ||
|
|
650d062808 | ||
|
|
bac9832819 | ||
|
|
efbcb5c84b | ||
|
|
fd70e6ac90 | ||
|
|
29bde70796 | ||
|
|
ecd4feabb2 | ||
|
|
abf60409f1 | ||
|
|
080733957f | ||
|
|
8a41f366ae | ||
|
|
dbf478c44c | ||
|
|
3df688571f | ||
|
|
ca530949c6 | ||
|
|
724930e5a4 | ||
|
|
2875da117a | ||
|
|
f95ba6c28f | ||
|
|
1b2e7654f9 | ||
|
|
54976ed1d4 | ||
|
|
735816f5dd | ||
|
|
a984bdb84e | ||
|
|
21add6585d | ||
|
|
99e72245f3 | ||
|
|
9d184ff560 | ||
|
|
97895f5c56 | ||
|
|
f091559c49 | ||
|
|
fa7730975e | ||
|
|
03d7b9e2e2 | ||
|
|
a0bff12263 | ||
|
|
70e708601e | ||
|
|
f01418d0de | ||
|
|
ad539adb2a | ||
|
|
3c9fec989f | ||
|
|
21db3e3ee5 | ||
|
|
5b1ad2e075 | ||
|
|
63b3f68bdb | ||
|
|
7c1537c4a7 | ||
|
|
9836998087 | ||
|
|
8a1bb4cad8 | ||
|
|
a9dadec8ef | ||
|
|
3eaffaef87 | ||
|
|
b3a943e155 | ||
|
|
06dd4af131 | ||
|
|
0d51469975 | ||
|
|
aa10c88588 | ||
|
|
db27f64832 | ||
|
|
3903039aac | ||
|
|
41f42ee110 | ||
|
|
74f54e1257 | ||
|
|
a72e48f690 | ||
|
|
a813af8b1f | ||
|
|
abee7b2732 | ||
|
|
4c71ffbb7e | ||
|
|
18050e2a8a | ||
|
|
a0d83763d4 | ||
|
|
0461c8e4ec | ||
|
|
072f32975a | ||
|
|
6810d28c50 | ||
|
|
650a9099c4 | ||
|
|
1217e03725 | ||
|
|
2e837d8738 | ||
|
|
9ddd386c6f | ||
|
|
4e1db26df7 | ||
|
|
de335a1e2a | ||
|
|
9ba0ed711e | ||
|
|
b7376bf522 | ||
|
|
0d6182c5d5 | ||
|
|
96c38763b1 | ||
|
|
97b3099156 | ||
|
|
a0b2fc9c31 | ||
|
|
2db36ef96b | ||
|
|
08b3913b04 | ||
|
|
7a7ec5654f | ||
|
|
74679c2ccc | ||
|
|
063581ba1a | ||
|
|
5c7b018b2a | ||
|
|
d315113395 | ||
|
|
ea2f62b721 | ||
|
|
1a91275a2d | ||
|
|
e76b22ca59 | ||
|
|
5a21f9642c | ||
|
|
e3dd89b0ef | ||
|
|
4fe81c0ea2 | ||
|
|
ab55f5ee07 | ||
|
|
92cec30898 | ||
|
|
3a40ccccda | ||
|
|
e6802a0851 | ||
|
|
ce90370b9c | ||
|
|
b21afce1ad | ||
|
|
58fd11a561 | ||
|
|
3e38085a25 | ||
|
|
48f62f8bdf | ||
|
|
ad92ccd181 | ||
|
|
8ab0eaedda | ||
|
|
e2a7d3b9e8 | ||
|
|
8c101793a3 | ||
|
|
4e1f9e0018 | ||
|
|
102209aaca | ||
|
|
9a64da480b | ||
|
|
11c36691ce | ||
|
|
337ef87e47 | ||
|
|
056a7fe297 | ||
|
|
82383449c0 | ||
|
|
30655dbfef | ||
|
|
a43725df39 | ||
|
|
9a0bff154b | ||
|
|
4d54b11400 | ||
|
|
9c621954c8 | ||
|
|
f24552fdf2 | ||
|
|
e643080516 | ||
|
|
b747516881 | ||
|
|
0a4238c9f5 | ||
|
|
99fe84914b | ||
|
|
f9b85feeaf | ||
|
|
51edb50eee | ||
|
|
43a78a4989 | ||
|
|
e3e0ad98ba |
2
.env
Normal file
2
.env
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
REGISTRY_PREFIX=harbor.sheldan.dev/abstracto/
|
||||||
|
VERSION=1.6.8
|
||||||
49
.github/workflows/build.yml
vendored
49
.github/workflows/build.yml
vendored
@@ -1,7 +1,7 @@
|
|||||||
# This workflow will build a Java project with Maven
|
# This workflow will build a Java project with Maven
|
||||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
|
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
|
||||||
|
|
||||||
name: Execute build and Sonar
|
name: Execute Build
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@@ -16,38 +16,25 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
- name: Set up JDK 1.8
|
- name: Set up JDK 17
|
||||||
uses: actions/setup-java@v1
|
uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
java-version: 1.8
|
distribution: 'corretto'
|
||||||
|
java-version: 17
|
||||||
|
- name: Setup node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: '21.x'
|
||||||
- name: Build with Maven
|
- name: Build with Maven
|
||||||
run: mvn -B install --file abstracto-application/pom.xml
|
run: mvn -B install --file abstracto-application/pom.xml
|
||||||
- name: Setup sonarqube
|
- name: Install node dependencies and build
|
||||||
uses: warchant/setup-sonar-scanner@v3
|
working-directory: ./ui/experience-tracking
|
||||||
- name: Run sonarqube
|
run: npm ci
|
||||||
env:
|
- name: Build ui application
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
working-directory: ./ui/experience-tracking
|
||||||
run: sonar-scanner
|
run: npm run build
|
||||||
-Dsonar.login=${{ secrets.SONAR_TOKEN }}
|
|
||||||
-Dsonar.organization=sheldan
|
|
||||||
-Dsonar.host.url=https://sonarcloud.io/
|
|
||||||
-Dsonar.projectKey=abstracto-core
|
|
||||||
-Dsonar.java.binaries=**/target/classes
|
|
||||||
-Dsonar.coverage.jacoco.xmlReportPaths=abstracto-application/coverage/target/site/jacoco-aggregate/jacoco.xml
|
|
||||||
-Dsonar.coverage.exclusions=**/*Test.java
|
|
||||||
- uses: actions/setup-ruby@v1
|
|
||||||
- name: Send Webhook Notification
|
|
||||||
if: always()
|
|
||||||
env:
|
|
||||||
JOB_STATUS: ${{ job.status }}
|
|
||||||
WEBHOOK_URL: ${{ secrets.WEBHOOK_URL }}
|
|
||||||
HOOK_OS_NAME: ${{ runner.os }}
|
|
||||||
WORKFLOW_NAME: ${{ github.workflow }}
|
|
||||||
run: |
|
|
||||||
git clone https://github.com/DiscordHooks/github-actions-discord-webhook.git webhook
|
|
||||||
bash webhook/send.sh $JOB_STATUS $WEBHOOK_URL
|
|
||||||
shell: bash
|
|
||||||
|
|||||||
50
.github/workflows/release.yml
vendored
50
.github/workflows/release.yml
vendored
@@ -1,50 +0,0 @@
|
|||||||
name: Publish package to GitHub Packages and deploy documentation to GitHub pages
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types: [created]
|
|
||||||
jobs:
|
|
||||||
publish:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: Set up Java for publishing to GitHub Packages
|
|
||||||
uses: actions/setup-java@v1
|
|
||||||
with:
|
|
||||||
java-version: 1.8
|
|
||||||
- name: Load current version
|
|
||||||
id: version
|
|
||||||
run: echo "version=$(mvn --file abstracto-application/pom.xml -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive exec:exec)" >> $GITHUB_ENV
|
|
||||||
- name: Publish to GitHub Packages
|
|
||||||
run: mvn --file abstracto-application/pom.xml -B deploy -P documentation,javadoc -Dmaven.wagon.http.pool=false -DskipTests=true
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
- name: Deploy documentation to GitHub pages
|
|
||||||
uses: JamesIves/github-pages-deploy-action@4.1.0
|
|
||||||
with:
|
|
||||||
repository-name: Sheldan/abstracto-docs
|
|
||||||
target-folder: docs/${{ env.version }}
|
|
||||||
branch: master
|
|
||||||
ssh-key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
|
|
||||||
folder: abstracto-application/documentation/target/generated-docs
|
|
||||||
- name: Deploy documentation to GitHub pages latest
|
|
||||||
uses: JamesIves/github-pages-deploy-action@4.1.0
|
|
||||||
with:
|
|
||||||
repository-name: Sheldan/abstracto-docs
|
|
||||||
target-folder: docs/current
|
|
||||||
branch: master
|
|
||||||
ssh-key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
|
|
||||||
folder: abstracto-application/documentation/target/generated-docs
|
|
||||||
- name: Login to GitHub Packages Docker Registry
|
|
||||||
uses: docker/login-action@v1
|
|
||||||
with:
|
|
||||||
registry: docker.pkg.github.com
|
|
||||||
username: ${{ github.repository_owner }}
|
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
- name: Push deployment container
|
|
||||||
working-directory: ./abstracto-application/installer/src/main/docker/deployment
|
|
||||||
run: docker-compose build && docker-compose push
|
|
||||||
env:
|
|
||||||
REGISTRY_PREFIX: docker.pkg.github.com/sheldan/abstracto/
|
|
||||||
VERSION: ${{ env.version }}
|
|
||||||
78
.github/workflows/release_manual.yml
vendored
Normal file
78
.github/workflows/release_manual.yml
vendored
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
name: Publishes a new version of abstracto
|
||||||
|
on: workflow_dispatch
|
||||||
|
permissions:
|
||||||
|
packages: write
|
||||||
|
contents: write
|
||||||
|
jobs:
|
||||||
|
publish:
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: master
|
||||||
|
- name: Set up JDK
|
||||||
|
uses: actions/setup-java@v3
|
||||||
|
with:
|
||||||
|
distribution: 'corretto'
|
||||||
|
java-version: 17
|
||||||
|
- name: Setup node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: '21.x'
|
||||||
|
- name: Load current version
|
||||||
|
id: version
|
||||||
|
working-directory: ./abstracto-application
|
||||||
|
run: echo "version=$(mvn -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive exec:exec | cut -d- -f1)" >> $GITHUB_ENV
|
||||||
|
- name: Create a Release
|
||||||
|
uses: elgohr/Github-Release-Action@v5
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
title: Release of version ${{ env.version }}
|
||||||
|
- name: Release maven packages
|
||||||
|
uses: qcastel/github-actions-maven-release@v1.12.43
|
||||||
|
env:
|
||||||
|
JAVA_HOME: /usr/lib/jvm/java-17-openjdk/
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
maven-project-folder: "abstracto-application/"
|
||||||
|
git-release-bot-name: "release-bot"
|
||||||
|
git-release-bot-email: "release-bot@sheldan.dev"
|
||||||
|
release-branch-name: master
|
||||||
|
maven-args: "-Dmaven.javadoc.skip=true -s settings.xml -DskipTests"
|
||||||
|
access-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- name: Install node dependencies and build
|
||||||
|
working-directory: ./ui/experience-tracking
|
||||||
|
run: npm ci
|
||||||
|
- name: Build ui application
|
||||||
|
working-directory: ./ui/experience-tracking
|
||||||
|
run: npm run build
|
||||||
|
- name: Copy built UI
|
||||||
|
run: cp -R ui/experience-tracking/build/* python/components/experience-tracking/resources/templates/experience/leaderboards/
|
||||||
|
- name: Login to Harbor
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
registry: harbor.sheldan.dev
|
||||||
|
username: ${{ secrets.HARBOR_USERNAME }}
|
||||||
|
password: ${{ secrets.HARBOR_TOKEN }}
|
||||||
|
- name: Update .env version
|
||||||
|
run:
|
||||||
|
sed -i '2s/.*/VERSION=${{ env.version }}/' .env
|
||||||
|
- name: Load env file
|
||||||
|
id: dotenv
|
||||||
|
uses: falti/dotenv-action@v1.0.4
|
||||||
|
with:
|
||||||
|
path: .env
|
||||||
|
- name: Build and push Docker containers
|
||||||
|
run: docker compose build && docker compose push
|
||||||
|
env:
|
||||||
|
REGISTRY_PREFIX: ${{ steps.dotenv.outputs.registry_prefix }}
|
||||||
|
VERSION: ${{ steps.dotenv.outputs.version }}
|
||||||
|
- name: Fix file permissions
|
||||||
|
run:
|
||||||
|
sudo chmod -R ugo+rwX . # https://github.com/actions/checkout/issues/164
|
||||||
|
- name: Commit updated versions
|
||||||
|
uses: EndBug/add-and-commit@v9
|
||||||
|
with:
|
||||||
|
author_name: "release-bot"
|
||||||
|
author_email: "release-bot@sheldan.dev"
|
||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -14,9 +14,7 @@ target/
|
|||||||
|
|
||||||
# Package Files #
|
# Package Files #
|
||||||
*.jar
|
*.jar
|
||||||
*.war
|
|
||||||
*.nar
|
*.nar
|
||||||
*.ear
|
|
||||||
*.zip
|
*.zip
|
||||||
*.tar.gz
|
*.tar.gz
|
||||||
*.rar
|
*.rar
|
||||||
|
|||||||
2
LICENSE
2
LICENSE
@@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2022 Sheldan
|
Copyright (c) 2025 Sheldan
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
17
README.md
17
README.md
@@ -1,8 +1,6 @@
|
|||||||
# Abstracto
|
# Abstracto
|
||||||
|
|
||||||

|

|
||||||
[](https://sonarcloud.io/dashboard?id=abstracto-core)
|
|
||||||
[](https://sonarcloud.io/dashboard?id=abstracto-core)
|
|
||||||
[](https://github.com/Sheldan/abstracto/blob/master/LICENSE)
|
[](https://github.com/Sheldan/abstracto/blob/master/LICENSE)
|
||||||
|
|
||||||
|
|
||||||
@@ -10,29 +8,26 @@ Abstracto represents a framework to be used as a basis for a Discord bot. It use
|
|||||||
and provides an extensive tool set to create new commands and a wide range of commands out of the box.
|
and provides an extensive tool set to create new commands and a wide range of commands out of the box.
|
||||||
|
|
||||||
This repository does not provide the full functionality in order to start a discord bot, because it requires a Main class.
|
This repository does not provide the full functionality in order to start a discord bot, because it requires a Main class.
|
||||||
An example implementation of this bot can be seen [here](https://github.com/Sheldan/Crimson). This repository contains the required configuration in order to run a bot and example customizations.
|
|
||||||
|
|
||||||
|
|
||||||
## Technologies
|
## Technologies
|
||||||
* [JDA](https://github.com/DV8FromTheWorld/JDA/) The Discord API Wrapper in the version 4.3.0_315
|
* [JDA](https://github.com/DV8FromTheWorld/JDA/) The Discord API Wrapper in the version 5.4.0
|
||||||
* [Spring boot](https://github.com/spring-projects/spring-boot) is used as a framework to create standalone application in Java with Java EE methods. (including Dependency injection and more)
|
* [Spring boot](https://github.com/spring-projects/spring-boot) is used as a framework to create standalone application in Java with Java EE methods. (including dependency injection and more)
|
||||||
* [Hibernate](https://github.com/hibernate/hibernate-orm) is used as a reference implementation of JPA.
|
* [Hibernate](https://github.com/hibernate/hibernate-orm) is used as a reference implementation of JPA.
|
||||||
* [Freemarker](https://github.com/apache/freemarker) is used as a templating engine. This is used to provide internationalization for user facing text and enable dynamic embed configuration.
|
* [Freemarker](https://github.com/apache/freemarker) is used as a templating engine. This is used to provide internationalization for user facing text and enable dynamic embed configuration.
|
||||||
* [Ehcache](https://github.com/ehcache/ehcache3) is used as a caching implementation.
|
* [Ehcache](https://github.com/ehcache/ehcache3) is used as a caching implementation.
|
||||||
* [Lombok](https://github.com/rzwitserloot/lombok) is used as a framework in order to speed up creation of container classes and builders.
|
* [Lombok](https://github.com/rzwitserloot/lombok) is used as a framework in order to speed up creation of container classes and builders.
|
||||||
* [Quartz](https://github.com/quartz-scheduler/quartz) is used as a scheduling framework in order to provide functionalities which either require a delayed or cronjob behaviour.
|
* [Quartz](https://github.com/quartz-scheduler/quartz) is used as a scheduling framework in order to provide functionalities which either require a scheduled or cronjob behaviour.
|
||||||
* [Docker](https://github.com/docker) is used to package the application into a container and [Docker Compose](https://github.com/docker/compose) is used to connect the required containers together.
|
* [Docker](https://github.com/docker) is used to package the application into an image and [Docker Compose](https://github.com/docker/compose) is used to build the images
|
||||||
* [Liquibase](https://github.com/liquibase/liquibase) is used to manage changes to the database
|
* [Liquibase](https://github.com/liquibase/liquibase) is used to manage changes to the database
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
A detailed documentation of the pure form of Abstracto including the terminology and commands in HTML form is available [here](https://sheldan.github.io/abstracto-docs/current). The PDF is available [here](https://sheldan.github.io/abstracto-docs/current/documentation.pdf)
|
A detailed documentation of the pure form of Abstracto including the terminology and commands in HTML form is available [here](https://sheldan.github.io/abstracto-docs/current). The PDF is available [here](https://sheldan.github.io/abstracto-docs/current/documentation.pdf)
|
||||||
If you want to view the documentation to an earlier released version you need to append the desired version to the URL. The current version will be available aforementioned URL, but it is not right now, because Abstracto has not been released yet.
|
If you want to view the documentation to an earlier released version you need to append the desired version to the URL. The current version will be available aforementioned URL, but it is not right now, because Abstracto has not been released yet.
|
||||||
|
|
||||||
## Customization documentation
|
|
||||||
TBD when Abstracto is released, as the current version is still being adapted, because of findings from the example customization in Crimson.
|
|
||||||
|
|
||||||
## Issues
|
## Issues
|
||||||
If you find any issue, feel free to create a GitHub issue.
|
If you find any issue, feel free to create a GitHub issue.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
This project is licensed under the MIT license.
|
This project is licensed under the MIT license.
|
||||||
|
|||||||
@@ -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.4.0</version>
|
<version>1.6.9-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import dev.sheldan.abstracto.core.listener.DefaultListenerResult;
|
|||||||
import dev.sheldan.abstracto.core.listener.async.jda.AsyncMessageReceivedListener;
|
import dev.sheldan.abstracto.core.listener.async.jda.AsyncMessageReceivedListener;
|
||||||
import dev.sheldan.abstracto.core.models.listener.MessageReceivedModel;
|
import dev.sheldan.abstracto.core.models.listener.MessageReceivedModel;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.dv8tion.jda.api.entities.ChannelType;
|
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
|
import net.dv8tion.jda.api.entities.channel.ChannelType;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<include file="tables/tables.xml" relativeToChangelogFile="true"/>
|
<include file="tables/tables.xml" relativeToChangelogFile="true"/>
|
||||||
<include file="seedData/data.xml" relativeToChangelogFile="true"/>
|
<include file="seedData/data.xml" relativeToChangelogFile="true"/>
|
||||||
</databaseChangeLog>
|
</databaseChangeLog>
|
||||||
@@ -1,10 +1,6 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<include file="feature.xml" relativeToChangelogFile="true"/>
|
<include file="feature.xml" relativeToChangelogFile="true"/>
|
||||||
</databaseChangeLog>
|
</databaseChangeLog>
|
||||||
@@ -1,11 +1,7 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<changeSet author="Sheldan" id="anti_raid-feature-insertion">
|
<changeSet author="Sheldan" id="anti_raid-feature-insertion">
|
||||||
<insert tableName="feature">
|
<insert tableName="feature">
|
||||||
<column name="key" value="antiRaid"/>
|
<column name="key" value="antiRaid"/>
|
||||||
|
|||||||
@@ -1,9 +1,5 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
</databaseChangeLog>
|
</databaseChangeLog>
|
||||||
@@ -1,10 +1,6 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<include file="1.3.3/collection.xml" relativeToChangelogFile="true"/>
|
<include file="1.3.3/collection.xml" relativeToChangelogFile="true"/>
|
||||||
</databaseChangeLog>
|
</databaseChangeLog>
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -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.4.0</version>
|
<version>1.6.9-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.4.0</version>
|
<version>1.6.9-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.4.0</version>
|
<version>1.6.9-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,26 @@
|
|||||||
package dev.sheldan.abstracto.assignableroles.command;
|
package dev.sheldan.abstracto.assignableroles.command;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRolePlaceSlashCommandName;
|
||||||
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.service.management.AssignableRolePlaceManagementService;
|
||||||
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
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.slash.SlashCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
|
||||||
|
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;
|
||||||
|
|
||||||
@@ -24,31 +34,78 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
@Component
|
@Component
|
||||||
public class ActivateAssignableRolePlace extends AbstractConditionableCommand {
|
public class ActivateAssignableRolePlace extends AbstractConditionableCommand {
|
||||||
|
|
||||||
|
private static final String ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER = "name";
|
||||||
|
private static final String ACTIVATE_ASSIGNABLE_ROLE_PLACE_RESPONSE = "activateAssignableRolePlace_response";
|
||||||
@Autowired
|
@Autowired
|
||||||
private AssignableRolePlaceService service;
|
private AssignableRolePlaceService service;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ServerManagementService serverManagementService;
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandParameterService slashCommandParameterService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private InteractionService interactionService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandAutoCompleteService slashCommandAutoCompleteService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AssignableRolePlaceManagementService assignableRolePlaceManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
String assignableRolePlaceName = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER, event, String.class);
|
||||||
String name = (String) parameters.get(0);
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
AServer server = serverManagementService.loadServer(commandContext.getGuild());
|
return service.activateAssignableRolePlace(server, assignableRolePlaceName)
|
||||||
return service.activateAssignableRolePlace(server, name)
|
.thenAccept(unused -> interactionService.replyEmbed(ACTIVATE_ASSIGNABLE_ROLE_PLACE_RESPONSE, new Object(), event))
|
||||||
.thenApply(unused -> CommandResult.fromSuccess());
|
.thenApply(unused -> CommandResult.fromSuccess());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> performAutoComplete(CommandAutoCompleteInteractionEvent event) {
|
||||||
|
if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)) {
|
||||||
|
String input = event.getFocusedOption().getValue();
|
||||||
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
|
return assignableRolePlaceManagementService.getAssignableRolePlacesWithNamesContaining(input, server)
|
||||||
|
.stream().map(assignableRolePlace -> assignableRolePlace.getKey().toLowerCase())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandConfiguration getConfiguration() {
|
public CommandConfiguration getConfiguration() {
|
||||||
Parameter placeName = Parameter.builder().name("name").type(String.class).templated(true).build();
|
Parameter placeName = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)
|
||||||
|
.type(String.class)
|
||||||
|
.supportsAutoComplete(true)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||||
|
.builder()
|
||||||
|
.enabled(true)
|
||||||
|
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
|
||||||
|
.rootCommandName(AssignableRolePlaceSlashCommandName.ASSIGNABLE_ROLE_PLACE)
|
||||||
|
.groupName("place")
|
||||||
|
.commandName("activate")
|
||||||
|
.build();
|
||||||
|
|
||||||
List<Parameter> parameters = Arrays.asList(placeName);
|
List<Parameter> parameters = Arrays.asList(placeName);
|
||||||
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
|
HelpInfo helpInfo = HelpInfo
|
||||||
|
.builder()
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
return CommandConfiguration.builder()
|
return CommandConfiguration.builder()
|
||||||
.name("activateAssignableRolePlace")
|
.name("activateAssignableRolePlace")
|
||||||
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
.async(true)
|
.async(true)
|
||||||
|
.slashCommandConfig(slashCommandConfig)
|
||||||
|
.slashCommandOnly(true)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
.parameters(parameters)
|
.parameters(parameters)
|
||||||
|
|||||||
@@ -1,16 +1,30 @@
|
|||||||
package dev.sheldan.abstracto.assignableroles.command;
|
package dev.sheldan.abstracto.assignableroles.command;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRolePlaceSlashCommandName;
|
||||||
import dev.sheldan.abstracto.assignableroles.model.condition.AssignableRoleConditionType;
|
import dev.sheldan.abstracto.assignableroles.model.condition.AssignableRoleConditionType;
|
||||||
import dev.sheldan.abstracto.assignableroles.service.AssignableRoleConditionService;
|
import dev.sheldan.abstracto.assignableroles.service.AssignableRoleConditionService;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.service.management.AssignableRolePlaceManagementService;
|
||||||
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
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.CommandParameterKey;
|
||||||
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.slash.SlashCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import net.dv8tion.jda.api.entities.Role;
|
import net.dv8tion.jda.api.entities.Role;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
|
||||||
|
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;
|
||||||
|
|
||||||
@@ -20,32 +34,103 @@ import java.util.List;
|
|||||||
@Component
|
@Component
|
||||||
public class AddAssignableRoleCondition extends AbstractConditionableCommand {
|
public class AddAssignableRoleCondition extends AbstractConditionableCommand {
|
||||||
|
|
||||||
|
private static final String ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER = "name";
|
||||||
|
private static final String ASSIGNABLE_ROLE_PARAMETER = "role";
|
||||||
|
private static final String CONDITION_KEY_PARAMETER = "conditionKey";
|
||||||
|
private static final String CONDITION_PARAMETER_PARAMETER = "conditionParameter";
|
||||||
|
private static final String ADD_ASSIGNABLE_ROLE_CONDITION_RESPONSE = "addAssignableRoleCondition_response";
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private AssignableRoleConditionService assignableRoleConditionService;
|
private AssignableRoleConditionService assignableRoleConditionService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private InteractionService interactionService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandParameterService slashCommandParameterService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandAutoCompleteService slashCommandAutoCompleteService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AssignableRolePlaceManagementService assignableRolePlaceManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
String assignableRolePlaceName = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER, event, String.class);
|
||||||
String name = (String) parameters.get(0);
|
Role role = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PARAMETER, event, Role.class);
|
||||||
Role role = (Role) parameters.get(1);
|
String configKeyString = slashCommandParameterService.getCommandOption(CONDITION_KEY_PARAMETER, event, String.class);
|
||||||
AssignableRoleConditionType configKey = (AssignableRoleConditionType) parameters.get(2);
|
AssignableRoleConditionType configKey = CommandParameterKey.getEnumFromKey(AssignableRoleConditionType.class, configKeyString);
|
||||||
String parameterValue = (String) parameters.get(3);
|
String parameterValue = slashCommandParameterService.getCommandOption(CONDITION_PARAMETER_PARAMETER, event, String.class);
|
||||||
assignableRoleConditionService.createAssignableRoleCondition(name, role, configKey, parameterValue);
|
assignableRoleConditionService.createAssignableRoleCondition(assignableRolePlaceName, role, configKey, parameterValue);
|
||||||
return CommandResult.fromSuccess();
|
return interactionService.replyEmbed(ADD_ASSIGNABLE_ROLE_CONDITION_RESPONSE, event)
|
||||||
|
.thenApply(interactionHook -> CommandResult.fromSuccess());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> performAutoComplete(CommandAutoCompleteInteractionEvent event) {
|
||||||
|
if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)) {
|
||||||
|
String input = event.getFocusedOption().getValue();
|
||||||
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
|
return assignableRolePlaceManagementService.getAssignableRolePlacesWithNamesContaining(input, server)
|
||||||
|
.stream().map(assignableRolePlace -> assignableRolePlace.getKey().toLowerCase())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandConfiguration getConfiguration() {
|
public CommandConfiguration getConfiguration() {
|
||||||
Parameter placeName = Parameter.builder().name("name").type(String.class).templated(true).build();
|
Parameter placeName = Parameter
|
||||||
Parameter role = Parameter.builder().name("role").type(Role.class).templated(true).build();
|
.builder()
|
||||||
Parameter conditionKey = Parameter.builder().name("conditionKey").type(AssignableRoleConditionType.class).templated(true).build();
|
.name(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)
|
||||||
Parameter conditionValue = Parameter.builder().name("conditionParameter").type(String.class).templated(true).build();
|
.type(String.class)
|
||||||
|
.supportsAutoComplete(true)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
Parameter role = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(ASSIGNABLE_ROLE_PARAMETER)
|
||||||
|
.type(Role.class)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
Parameter conditionKey = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(CONDITION_KEY_PARAMETER)
|
||||||
|
.type(AssignableRoleConditionType.class)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Parameter conditionValue = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(CONDITION_PARAMETER_PARAMETER)
|
||||||
|
.type(String.class)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
List<Parameter> parameters = Arrays.asList(placeName, role, conditionKey, conditionValue);
|
List<Parameter> parameters = Arrays.asList(placeName, role, conditionKey, conditionValue);
|
||||||
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
|
HelpInfo helpInfo = HelpInfo
|
||||||
|
.builder()
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||||
|
.builder()
|
||||||
|
.enabled(true)
|
||||||
|
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
|
||||||
|
.rootCommandName(AssignableRolePlaceSlashCommandName.ASSIGNABLE_ROLE_PLACE)
|
||||||
|
.groupName("role")
|
||||||
|
.commandName("addcondition")
|
||||||
|
.build();
|
||||||
|
|
||||||
return CommandConfiguration.builder()
|
return CommandConfiguration.builder()
|
||||||
.name("addAssignableRoleCondition")
|
.name("addAssignableRoleCondition")
|
||||||
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
|
.slashCommandOnly(true)
|
||||||
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
.parameters(parameters)
|
.parameters(parameters)
|
||||||
|
|||||||
@@ -0,0 +1,170 @@
|
|||||||
|
package dev.sheldan.abstracto.assignableroles.command;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRolePlaceSlashCommandName;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.exception.AssignableRoleNotUsableException;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.service.management.AssignableRolePlaceManagementService;
|
||||||
|
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AEmote;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
import dev.sheldan.abstracto.core.service.RoleService;
|
||||||
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import net.dv8tion.jda.api.entities.Role;
|
||||||
|
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Command used to add an {@link dev.sheldan.abstracto.assignableroles.model.database.AssignableRole assignableRole}
|
||||||
|
* to an {@link dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlace place}
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class AddRoleToAssignableRolePlace extends AbstractConditionableCommand {
|
||||||
|
|
||||||
|
private static final String ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER = "name";
|
||||||
|
private static final String ASSIGNABLE_ROLE_PARAMETER = "role";
|
||||||
|
private static final String DISPLAY_TEXT_PARAMETER = "displayText";
|
||||||
|
private static final String EMOTE_PARAMETER = "emote";
|
||||||
|
|
||||||
|
private static final String ADD_ROLE_TO_ASSIGNABLE_ROLE_POST_RESPONSE = "addRoleToAssignableRolePlace_response";
|
||||||
|
@Autowired
|
||||||
|
private AssignableRolePlaceService service;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RoleService roleService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private InteractionService interactionService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandParameterService slashCommandParameterService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandAutoCompleteService slashCommandAutoCompleteService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AssignableRolePlaceManagementService assignableRolePlaceManagementService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
|
String assignableRolePlaceName = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER, event, String.class);
|
||||||
|
Role role = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PARAMETER, event, Role.class);
|
||||||
|
String displayText;
|
||||||
|
if(slashCommandParameterService.hasCommandOption(DISPLAY_TEXT_PARAMETER, event)) {
|
||||||
|
displayText = slashCommandParameterService.getCommandOption(DISPLAY_TEXT_PARAMETER, event, String.class);
|
||||||
|
} else {
|
||||||
|
displayText = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Emoji emoji;
|
||||||
|
if(slashCommandParameterService.hasCommandOption(EMOTE_PARAMETER, event)) {
|
||||||
|
String emoteText = slashCommandParameterService.getCommandOption(EMOTE_PARAMETER, event, String.class);
|
||||||
|
emoji = slashCommandParameterService.loadEmoteFromString(emoteText, event.getGuild());
|
||||||
|
} else {
|
||||||
|
emoji = null;
|
||||||
|
}
|
||||||
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
|
// already used check via role and assignable role place name
|
||||||
|
if(!roleService.canBotInteractWithRole(role)) {
|
||||||
|
throw new AssignableRoleNotUsableException(role);
|
||||||
|
}
|
||||||
|
return service.addRoleToAssignableRolePlace(server, assignableRolePlaceName, role, emoji, displayText)
|
||||||
|
.thenAccept(unused -> interactionService.replyEmbed(ADD_ROLE_TO_ASSIGNABLE_ROLE_POST_RESPONSE, event))
|
||||||
|
.thenApply(aVoid -> CommandResult.fromSuccess());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> performAutoComplete(CommandAutoCompleteInteractionEvent event) {
|
||||||
|
if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)) {
|
||||||
|
String input = event.getFocusedOption().getValue();
|
||||||
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
|
return assignableRolePlaceManagementService.getAssignableRolePlacesWithNamesContaining(input, server)
|
||||||
|
.stream().map(assignableRolePlace -> assignableRolePlace.getKey().toLowerCase())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommandConfiguration getConfiguration() {
|
||||||
|
Parameter placeName = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)
|
||||||
|
.type(String.class)
|
||||||
|
.supportsAutoComplete(true)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
Parameter role = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(ASSIGNABLE_ROLE_PARAMETER)
|
||||||
|
.type(Role.class)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
Parameter rolePostName = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(DISPLAY_TEXT_PARAMETER)
|
||||||
|
.type(String.class)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
Parameter emote = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(EMOTE_PARAMETER)
|
||||||
|
.type(AEmote.class)
|
||||||
|
.optional(true)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
List<Parameter> parameters = Arrays.asList(placeName, role, rolePostName, emote);
|
||||||
|
HelpInfo helpInfo = HelpInfo
|
||||||
|
.builder()
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||||
|
.builder()
|
||||||
|
.enabled(true)
|
||||||
|
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
|
||||||
|
.rootCommandName(AssignableRolePlaceSlashCommandName.ASSIGNABLE_ROLE_PLACE)
|
||||||
|
.groupName("role")
|
||||||
|
.commandName("add")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
return CommandConfiguration.builder()
|
||||||
|
.name("addRoleToAssignableRolePlace")
|
||||||
|
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
||||||
|
.templated(true)
|
||||||
|
.causesReaction(true)
|
||||||
|
.slashCommandConfig(slashCommandConfig)
|
||||||
|
.async(true)
|
||||||
|
.supportsEmbedException(true)
|
||||||
|
.parameters(parameters)
|
||||||
|
.help(helpInfo)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FeatureDefinition getFeature() {
|
||||||
|
return AssignableRoleFeatureDefinition.ASSIGNABLE_ROLES;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
package dev.sheldan.abstracto.assignableroles.command;
|
|
||||||
|
|
||||||
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
|
||||||
import dev.sheldan.abstracto.assignableroles.exception.AssignableRoleNotUsableException;
|
|
||||||
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
|
||||||
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
|
||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
|
||||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
|
||||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
|
||||||
import dev.sheldan.abstracto.core.models.FullEmote;
|
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
|
||||||
import dev.sheldan.abstracto.core.service.RoleService;
|
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
|
||||||
import net.dv8tion.jda.api.entities.Role;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Command used to add an {@link dev.sheldan.abstracto.assignableroles.model.database.AssignableRole assignableRole}
|
|
||||||
* to an {@link dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlace place}
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class AddRoleToAssignableRolePost extends AbstractConditionableCommand {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private AssignableRolePlaceService service;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private RoleService roleService;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ServerManagementService serverManagementService;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
|
||||||
String name = (String) parameters.get(0);
|
|
||||||
Role role = (Role) parameters.get(1);
|
|
||||||
String description = null;
|
|
||||||
if (parameters.size() > 2) {
|
|
||||||
description = (String) parameters.get(2);
|
|
||||||
}
|
|
||||||
FullEmote emote = null;
|
|
||||||
if(parameters.size() > 3) {
|
|
||||||
emote = (FullEmote) parameters.get(3);
|
|
||||||
}
|
|
||||||
AServer server = serverManagementService.loadServer(commandContext.getGuild());
|
|
||||||
// already used check via role and assignable role place name
|
|
||||||
if(!roleService.canBotInteractWithRole(role)) {
|
|
||||||
throw new AssignableRoleNotUsableException(role);
|
|
||||||
}
|
|
||||||
return service.addRoleToAssignableRolePlace(server, name, role, emote, description)
|
|
||||||
.thenApply(aVoid -> CommandResult.fromSuccess());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CommandConfiguration getConfiguration() {
|
|
||||||
Parameter placeName = Parameter.builder().name("name").type(String.class).templated(true).build();
|
|
||||||
Parameter role = Parameter.builder().name("role").type(Role.class).templated(true).build();
|
|
||||||
Parameter rolePostName = Parameter.builder().name("displayText").type(String.class).templated(true).build();
|
|
||||||
Parameter emote = Parameter.builder().name("emote").type(FullEmote.class).optional(true).templated(true).build();
|
|
||||||
List<Parameter> parameters = Arrays.asList(placeName, role, rolePostName, emote);
|
|
||||||
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
|
|
||||||
return CommandConfiguration.builder()
|
|
||||||
.name("addRoleToAssignableRolePlace")
|
|
||||||
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
|
||||||
.templated(true)
|
|
||||||
.causesReaction(true)
|
|
||||||
.async(true)
|
|
||||||
.supportsEmbedException(true)
|
|
||||||
.parameters(parameters)
|
|
||||||
.help(helpInfo)
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public FeatureDefinition getFeature() {
|
|
||||||
return AssignableRoleFeatureDefinition.ASSIGNABLE_ROLES;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -2,17 +2,28 @@ package dev.sheldan.abstracto.assignableroles.command;
|
|||||||
|
|
||||||
import dev.sheldan.abstracto.assignableroles.config.AssignableRolePlaceParameterKey;
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRolePlaceParameterKey;
|
||||||
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRolePlaceSlashCommandName;
|
||||||
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.service.management.AssignableRolePlaceManagementService;
|
||||||
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
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.CommandParameterKey;
|
||||||
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.slash.SlashCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
|
||||||
|
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;
|
||||||
|
|
||||||
@@ -27,36 +38,96 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class ChangeAssignableRolePlaceConfig extends AbstractConditionableCommand {
|
public class ChangeAssignableRolePlaceConfig extends AbstractConditionableCommand {
|
||||||
|
|
||||||
|
private static final String ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER = "name";
|
||||||
|
private static final String CONFIGURATION_KEY_PARAMETER = "key";
|
||||||
|
private static final String CONFIGURATION_VALUE_PARAMETER = "value";
|
||||||
|
private static final String CHANGE_ASSIGNABLE_ROLE_PLACE_CONFIG_RESPONSE = "changeAssignableRolePlaceConfig_response";
|
||||||
@Autowired
|
@Autowired
|
||||||
private AssignableRolePlaceService service;
|
private AssignableRolePlaceService service;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ServerManagementService serverManagementService;
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private InteractionService interactionService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandParameterService slashCommandParameterService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandAutoCompleteService slashCommandAutoCompleteService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AssignableRolePlaceManagementService assignableRolePlaceManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
String assignableRolePlaceName = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER, event, String.class);
|
||||||
String name = (String) parameters.get(0);
|
String assignableRolePlaceParameterKeyString = slashCommandParameterService.getCommandOption(CONFIGURATION_KEY_PARAMETER, event, String.class);
|
||||||
AssignableRolePlaceParameterKey configKey = (AssignableRolePlaceParameterKey) parameters.get(1);
|
AssignableRolePlaceParameterKey enumFromKey =
|
||||||
String parameterValue = (String) parameters.get(2);
|
CommandParameterKey.getEnumFromKey(AssignableRolePlaceParameterKey.class, assignableRolePlaceParameterKeyString);
|
||||||
AServer server = serverManagementService.loadServer(commandContext.getGuild());
|
String parameterValue = slashCommandParameterService.getCommandOption(CONFIGURATION_VALUE_PARAMETER, event, String.class);
|
||||||
return service.changeConfiguration(server, name, configKey, parameterValue)
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
.thenApply(aVoid -> CommandResult.fromSuccess());
|
return service.changeConfiguration(server, assignableRolePlaceName, enumFromKey, parameterValue)
|
||||||
|
.thenAccept(unused -> interactionService.replyEmbed(CHANGE_ASSIGNABLE_ROLE_PLACE_CONFIG_RESPONSE, event))
|
||||||
|
.thenApply(aVoid -> CommandResult.fromSuccess());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> performAutoComplete(CommandAutoCompleteInteractionEvent event) {
|
||||||
|
if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)) {
|
||||||
|
String input = event.getFocusedOption().getValue();
|
||||||
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
|
return assignableRolePlaceManagementService.getAssignableRolePlacesWithNamesContaining(input, server)
|
||||||
|
.stream().map(assignableRolePlace -> assignableRolePlace.getKey().toLowerCase())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandConfiguration getConfiguration() {
|
public CommandConfiguration getConfiguration() {
|
||||||
Parameter assignableRolePlaceName = Parameter.builder().name("name").type(String.class).templated(true).build();
|
Parameter assignableRolePlaceName = Parameter
|
||||||
Parameter parameterKey = Parameter.builder().name("key").type(AssignableRolePlaceParameterKey.class).templated(true).build();
|
.builder()
|
||||||
Parameter parameterValue = Parameter.builder().name("value").type(String.class).templated(true).build();
|
.name(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)
|
||||||
|
.type(String.class)
|
||||||
|
.supportsAutoComplete(true)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
Parameter parameterKey = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(CONFIGURATION_KEY_PARAMETER)
|
||||||
|
.type(AssignableRolePlaceParameterKey.class)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
Parameter parameterValue = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(CONFIGURATION_VALUE_PARAMETER)
|
||||||
|
.type(String.class)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
|
||||||
|
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||||
|
.builder()
|
||||||
|
.enabled(true)
|
||||||
|
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
|
||||||
|
.rootCommandName(AssignableRolePlaceSlashCommandName.ASSIGNABLE_ROLE_PLACE)
|
||||||
|
.groupName("place")
|
||||||
|
.commandName("changeconfig")
|
||||||
|
.build();
|
||||||
|
|
||||||
List<Parameter> parameters = Arrays.asList(assignableRolePlaceName, parameterKey, parameterValue);
|
List<Parameter> parameters = Arrays.asList(assignableRolePlaceName, parameterKey, parameterValue);
|
||||||
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
|
HelpInfo helpInfo = HelpInfo
|
||||||
|
.builder()
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
return CommandConfiguration.builder()
|
return CommandConfiguration.builder()
|
||||||
.name("changeAssignableRolePlaceConfig")
|
.name("changeAssignableRolePlaceConfig")
|
||||||
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
|
.slashCommandConfig(slashCommandConfig)
|
||||||
|
.slashCommandOnly(true)
|
||||||
.async(true)
|
.async(true)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
|
|||||||
@@ -0,0 +1,140 @@
|
|||||||
|
package dev.sheldan.abstracto.assignableroles.command;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRolePlaceSlashCommandName;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlace;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlaceType;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
||||||
|
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.ParameterValidator;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.validator.MaxStringLengthValidator;
|
||||||
|
import dev.sheldan.abstracto.core.command.execution.CommandParameterKey;
|
||||||
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||||
|
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
|
||||||
|
import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class CreateAssignableRolePlace extends AbstractConditionableCommand {
|
||||||
|
|
||||||
|
private static final String ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER = "name";
|
||||||
|
private static final String ASSIGNABLE_ROLE_PLACE_CHANNEL_PARAMETER = "channel";
|
||||||
|
private static final String ASSIGNABLE_ROLE_PLACE_TYPE_PARAMETER = "type";
|
||||||
|
private static final String ASSIGNABLE_ROLE_PLACE_TEXT_PARAMETER = "text";
|
||||||
|
private static final String CREATE_ASSIGNABLE_ROLE_PLACE_RESPONSE_TEMPLATE = "createAssignableRolePlace_response";
|
||||||
|
@Autowired
|
||||||
|
private AssignableRolePlaceService service;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ChannelManagementService channelManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandParameterService slashCommandParameterService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private InteractionService interactionService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
|
String assignableRolePlaceName = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER, event, String.class);
|
||||||
|
GuildChannel channel = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PLACE_CHANNEL_PARAMETER, event, TextChannel.class, GuildChannel.class);
|
||||||
|
if(!channel.getGuild().equals(event.getGuild())) {
|
||||||
|
throw new EntityGuildMismatchException();
|
||||||
|
}
|
||||||
|
String text = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PLACE_TEXT_PARAMETER, event, String.class);
|
||||||
|
AssignableRolePlaceType type;
|
||||||
|
if(slashCommandParameterService.hasCommandOption(ASSIGNABLE_ROLE_PLACE_TYPE_PARAMETER, event)) {
|
||||||
|
String typeString = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PLACE_TYPE_PARAMETER, event, String.class);
|
||||||
|
type = CommandParameterKey.getEnumFromKey(AssignableRolePlaceType.class, typeString);
|
||||||
|
} else {
|
||||||
|
type = AssignableRolePlaceType.DEFAULT;
|
||||||
|
}
|
||||||
|
AChannel chosenChannel = channelManagementService.loadChannel(channel.getIdLong());
|
||||||
|
service.createAssignableRolePlace(assignableRolePlaceName, chosenChannel, text, type);
|
||||||
|
return interactionService.replyEmbed(CREATE_ASSIGNABLE_ROLE_PLACE_RESPONSE_TEMPLATE, event)
|
||||||
|
.thenApply(interactionHook -> CommandResult.fromSuccess());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommandConfiguration getConfiguration() {
|
||||||
|
List<ParameterValidator> rolePlaceNameValidator = Arrays.asList(MaxStringLengthValidator.max(AssignableRolePlace.ASSIGNABLE_PLACE_NAME_LIMIT));
|
||||||
|
Parameter rolePostName = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)
|
||||||
|
.validators(rolePlaceNameValidator)
|
||||||
|
.type(String.class)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
Parameter channel = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(ASSIGNABLE_ROLE_PLACE_CHANNEL_PARAMETER)
|
||||||
|
.type(TextChannel.class)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
Parameter type = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(ASSIGNABLE_ROLE_PLACE_TYPE_PARAMETER)
|
||||||
|
.type(AssignableRolePlaceType.class)
|
||||||
|
.templated(true)
|
||||||
|
.optional(true)
|
||||||
|
.build();
|
||||||
|
List<ParameterValidator> rolePlaceDescriptionValidator = Arrays.asList(MaxStringLengthValidator.max(AssignableRolePlace.ASSIGNABLE_PLACE_NAME_LIMIT));
|
||||||
|
Parameter text = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(ASSIGNABLE_ROLE_PLACE_TEXT_PARAMETER)
|
||||||
|
.validators(rolePlaceDescriptionValidator)
|
||||||
|
.type(String.class)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||||
|
.builder()
|
||||||
|
.enabled(true)
|
||||||
|
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
|
||||||
|
.rootCommandName(AssignableRolePlaceSlashCommandName.ASSIGNABLE_ROLE_PLACE)
|
||||||
|
.groupName("place")
|
||||||
|
.commandName("create")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
List<String> aliases = Arrays.asList("crRPl", "crAssRoPl");
|
||||||
|
List<Parameter> parameters = Arrays.asList(rolePostName, channel, text, type);
|
||||||
|
HelpInfo helpInfo = HelpInfo
|
||||||
|
.builder()
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
return CommandConfiguration.builder()
|
||||||
|
.name("createAssignableRolePlace")
|
||||||
|
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
||||||
|
.templated(true)
|
||||||
|
.supportsEmbedException(true)
|
||||||
|
.causesReaction(true)
|
||||||
|
.slashCommandConfig(slashCommandConfig)
|
||||||
|
.slashCommandOnly(true)
|
||||||
|
.parameters(parameters)
|
||||||
|
.aliases(aliases)
|
||||||
|
.help(helpInfo)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FeatureDefinition getFeature() {
|
||||||
|
return AssignableRoleFeatureDefinition.ASSIGNABLE_ROLES;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
package dev.sheldan.abstracto.assignableroles.command;
|
|
||||||
|
|
||||||
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
|
||||||
import dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlace;
|
|
||||||
import dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlaceType;
|
|
||||||
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
|
||||||
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
|
||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
|
||||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
|
||||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
|
||||||
import dev.sheldan.abstracto.core.command.config.ParameterValidator;
|
|
||||||
import dev.sheldan.abstracto.core.command.config.validator.MaxStringLengthValidator;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
|
||||||
import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException;
|
|
||||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
|
||||||
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
|
||||||
import net.dv8tion.jda.api.entities.TextChannel;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Component
|
|
||||||
public class CreateAssignableRolePost extends AbstractConditionableCommand {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private AssignableRolePlaceService service;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ChannelManagementService channelManagementService;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ServerManagementService serverManagementService;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
|
||||||
String name = (String) parameters.get(0);
|
|
||||||
TextChannel channel = (TextChannel) parameters.get(1);
|
|
||||||
String text = (String) parameters.get(2);
|
|
||||||
AssignableRolePlaceType type = AssignableRolePlaceType.DEFAULT;
|
|
||||||
if(parameters.size() > 3) {
|
|
||||||
type = (AssignableRolePlaceType) parameters.get(3);
|
|
||||||
}
|
|
||||||
if(!channel.getGuild().equals(commandContext.getGuild())) {
|
|
||||||
throw new EntityGuildMismatchException();
|
|
||||||
}
|
|
||||||
AChannel chosenChannel = channelManagementService.loadChannel(channel.getIdLong());
|
|
||||||
service.createAssignableRolePlace(name, chosenChannel, text, type);
|
|
||||||
return CommandResult.fromSuccess();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CommandConfiguration getConfiguration() {
|
|
||||||
List<ParameterValidator> rolePlaceNameValidator = Arrays.asList(MaxStringLengthValidator.max(AssignableRolePlace.ASSIGNABLE_PLACE_NAME_LIMIT));
|
|
||||||
Parameter rolePostName = Parameter.builder().name("name").validators(rolePlaceNameValidator).type(String.class).templated(true).build();
|
|
||||||
Parameter channel = Parameter.builder().name("channel").type(TextChannel.class).templated(true).build();
|
|
||||||
Parameter type = Parameter.builder().name("type").type(AssignableRolePlaceType.class).templated(true).optional(true).build();
|
|
||||||
List<ParameterValidator> rolePlaceDescriptionValidator = Arrays.asList(MaxStringLengthValidator.max(AssignableRolePlace.ASSIGNABLE_PLACE_NAME_LIMIT));
|
|
||||||
Parameter text = Parameter.builder().name("text").validators(rolePlaceDescriptionValidator).type(String.class).templated(true).build();
|
|
||||||
List<String> aliases = Arrays.asList("crRPl", "crAssRoPl");
|
|
||||||
List<Parameter> parameters = Arrays.asList(rolePostName, channel, text, type);
|
|
||||||
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
|
|
||||||
return CommandConfiguration.builder()
|
|
||||||
.name("createAssignableRolePlace")
|
|
||||||
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
|
||||||
.templated(true)
|
|
||||||
.supportsEmbedException(true)
|
|
||||||
.causesReaction(true)
|
|
||||||
.parameters(parameters)
|
|
||||||
.aliases(aliases)
|
|
||||||
.help(helpInfo)
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public FeatureDefinition getFeature() {
|
|
||||||
return AssignableRoleFeatureDefinition.ASSIGNABLE_ROLES;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,16 +1,26 @@
|
|||||||
package dev.sheldan.abstracto.assignableroles.command;
|
package dev.sheldan.abstracto.assignableroles.command;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRolePlaceSlashCommandName;
|
||||||
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.service.management.AssignableRolePlaceManagementService;
|
||||||
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
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.slash.SlashCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
|
||||||
|
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;
|
||||||
|
|
||||||
@@ -24,31 +34,78 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
@Component
|
@Component
|
||||||
public class DeactivateAssignableRolePlace extends AbstractConditionableCommand {
|
public class DeactivateAssignableRolePlace extends AbstractConditionableCommand {
|
||||||
|
|
||||||
|
private static final String ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER = "name";
|
||||||
|
private static final String DEACTIVATE_ASSIGNABLE_ROLE_PLACE_RESPONSE_TEMPLATE = "deactivateAssignableRolePlace_response";
|
||||||
@Autowired
|
@Autowired
|
||||||
private AssignableRolePlaceService service;
|
private AssignableRolePlaceService service;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ServerManagementService serverManagementService;
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private InteractionService interactionService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandParameterService slashCommandParameterService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandAutoCompleteService slashCommandAutoCompleteService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AssignableRolePlaceManagementService assignableRolePlaceManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
String assignableRolePlaceName = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER, event, String.class);
|
||||||
String name = (String) parameters.get(0);
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
AServer server = serverManagementService.loadServer(commandContext.getGuild());
|
return service.deactivateAssignableRolePlace(server, assignableRolePlaceName)
|
||||||
return service.deactivateAssignableRolePlace(server, name)
|
.thenAccept(unused -> interactionService.replyEmbed(DEACTIVATE_ASSIGNABLE_ROLE_PLACE_RESPONSE_TEMPLATE, event))
|
||||||
.thenApply(unused -> CommandResult.fromSuccess());
|
.thenApply(unused -> CommandResult.fromSuccess());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> performAutoComplete(CommandAutoCompleteInteractionEvent event) {
|
||||||
|
if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)) {
|
||||||
|
String input = event.getFocusedOption().getValue();
|
||||||
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
|
return assignableRolePlaceManagementService.getAssignableRolePlacesWithNamesContaining(input, server)
|
||||||
|
.stream().map(assignableRolePlace -> assignableRolePlace.getKey().toLowerCase())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandConfiguration getConfiguration() {
|
public CommandConfiguration getConfiguration() {
|
||||||
Parameter rolePostName = Parameter.builder().name("name").type(String.class).templated(true).build();
|
Parameter rolePostName = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)
|
||||||
|
.type(String.class)
|
||||||
|
.supportsAutoComplete(true)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
List<Parameter> parameters = Arrays.asList(rolePostName);
|
List<Parameter> parameters = Arrays.asList(rolePostName);
|
||||||
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
|
HelpInfo helpInfo = HelpInfo
|
||||||
|
.builder()
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||||
|
.builder()
|
||||||
|
.enabled(true)
|
||||||
|
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
|
||||||
|
.rootCommandName(AssignableRolePlaceSlashCommandName.ASSIGNABLE_ROLE_PLACE)
|
||||||
|
.groupName("place")
|
||||||
|
.commandName("deactivate")
|
||||||
|
.build();
|
||||||
|
|
||||||
return CommandConfiguration.builder()
|
return CommandConfiguration.builder()
|
||||||
.name("deactivateAssignableRolePlace")
|
.name("deactivateAssignableRolePlace")
|
||||||
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
.async(true)
|
.async(true)
|
||||||
|
.slashCommandOnly(true)
|
||||||
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
.parameters(parameters)
|
.parameters(parameters)
|
||||||
|
|||||||
@@ -1,16 +1,26 @@
|
|||||||
package dev.sheldan.abstracto.assignableroles.command;
|
package dev.sheldan.abstracto.assignableroles.command;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRolePlaceSlashCommandName;
|
||||||
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.service.management.AssignableRolePlaceManagementService;
|
||||||
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
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.SlashCommandPrivilegeLevels;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
|
||||||
|
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.management.ServerManagementService;
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
|
||||||
|
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;
|
||||||
|
|
||||||
@@ -24,32 +34,80 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
@Component
|
@Component
|
||||||
public class DeleteAssignableRolePlace extends AbstractConditionableCommand {
|
public class DeleteAssignableRolePlace extends AbstractConditionableCommand {
|
||||||
|
|
||||||
|
private static final String ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER = "name";
|
||||||
|
private static final String DELETE_ASSIGNABLE_ROLE_PLACE_RESPONSE_TEMPLATE = "deleteAssignableRolePlace_response";
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private AssignableRolePlaceService service;
|
private AssignableRolePlaceService service;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ServerManagementService serverManagementService;
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandService slashCommandService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandParameterService slashCommandParameterService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandAutoCompleteService slashCommandAutoCompleteService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AssignableRolePlaceManagementService assignableRolePlaceManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
String assignableRolePlaceName = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER, event, String.class);
|
||||||
String name = (String) parameters.get(0);
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
AServer server = serverManagementService.loadServer(commandContext.getGuild());
|
return service.deleteAssignableRolePlace(server, assignableRolePlaceName)
|
||||||
return service.deleteAssignableRolePlace(server, name)
|
.thenAccept(unused -> slashCommandService.completeConfirmableCommand(event, DELETE_ASSIGNABLE_ROLE_PLACE_RESPONSE_TEMPLATE))
|
||||||
.thenApply(aVoid -> CommandResult.fromSuccess());
|
.thenApply(unused -> CommandResult.fromSuccess());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> performAutoComplete(CommandAutoCompleteInteractionEvent event) {
|
||||||
|
if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)) {
|
||||||
|
String input = event.getFocusedOption().getValue();
|
||||||
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
|
return assignableRolePlaceManagementService.getAssignableRolePlacesWithNamesContaining(input, server)
|
||||||
|
.stream().map(assignableRolePlace -> assignableRolePlace.getKey().toLowerCase())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandConfiguration getConfiguration() {
|
public CommandConfiguration getConfiguration() {
|
||||||
Parameter rolePostName = Parameter.builder().name("name").type(String.class).templated(true).build();
|
Parameter rolePostName = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)
|
||||||
|
.type(String.class)
|
||||||
|
.supportsAutoComplete(true)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
List<Parameter> parameters = Arrays.asList(rolePostName);
|
List<Parameter> parameters = Arrays.asList(rolePostName);
|
||||||
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
|
|
||||||
|
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||||
|
.builder()
|
||||||
|
.enabled(true)
|
||||||
|
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
|
||||||
|
.rootCommandName(AssignableRolePlaceSlashCommandName.ASSIGNABLE_ROLE_PLACE)
|
||||||
|
.groupName("place")
|
||||||
|
.commandName("delete")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
HelpInfo helpInfo = HelpInfo
|
||||||
|
.builder()
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
return CommandConfiguration.builder()
|
return CommandConfiguration.builder()
|
||||||
.name("deleteAssignableRolePlace")
|
.name("deleteAssignableRolePlace")
|
||||||
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
.async(true)
|
.async(true)
|
||||||
|
.slashCommandOnly(true)
|
||||||
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.requiresConfirmation(true)
|
.requiresConfirmation(true)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.parameters(parameters)
|
.parameters(parameters)
|
||||||
|
|||||||
@@ -1,69 +0,0 @@
|
|||||||
package dev.sheldan.abstracto.assignableroles.command;
|
|
||||||
|
|
||||||
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
|
||||||
import dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlace;
|
|
||||||
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
|
||||||
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
|
||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
|
||||||
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
|
||||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
|
||||||
import dev.sheldan.abstracto.core.command.config.ParameterValidator;
|
|
||||||
import dev.sheldan.abstracto.core.command.config.validator.MaxStringLengthValidator;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
|
||||||
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Command used to change the text of an {@link AssignableRolePlace place}
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class EditAssignableRolePlaceText extends AbstractConditionableCommand {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private AssignableRolePlaceService service;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ServerManagementService serverManagementService;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
|
||||||
String name = (String) parameters.get(0);
|
|
||||||
String newText = (String) parameters.get(1);
|
|
||||||
AServer server = serverManagementService.loadServer(commandContext.getGuild());
|
|
||||||
return service.changeTextAsync(server, name, newText)
|
|
||||||
.thenApply(aVoid -> CommandResult.fromSuccess());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CommandConfiguration getConfiguration() {
|
|
||||||
List<ParameterValidator> rolePlaceNameValidator = Arrays.asList(MaxStringLengthValidator.max(AssignableRolePlace.ASSIGNABLE_PLACE_NAME_LIMIT));
|
|
||||||
Parameter rolePostName = Parameter.builder().name("name").validators(rolePlaceNameValidator).type(String.class).templated(true).build();
|
|
||||||
Parameter newText = Parameter.builder().name("newText").type(String.class).templated(true).build();
|
|
||||||
List<Parameter> parameters = Arrays.asList(rolePostName, newText);
|
|
||||||
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
|
|
||||||
return CommandConfiguration.builder()
|
|
||||||
.name("editAssignableRolePlaceText")
|
|
||||||
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
|
||||||
.templated(true)
|
|
||||||
.async(true)
|
|
||||||
.supportsEmbedException(true)
|
|
||||||
.causesReaction(true)
|
|
||||||
.parameters(parameters)
|
|
||||||
.help(helpInfo)
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public FeatureDefinition getFeature() {
|
|
||||||
return AssignableRoleFeatureDefinition.ASSIGNABLE_ROLES;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
package dev.sheldan.abstracto.assignableroles.command;
|
package dev.sheldan.abstracto.assignableroles.command;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRolePlaceSlashCommandName;
|
||||||
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.service.management.AssignableRolePlaceManagementService;
|
||||||
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
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;
|
||||||
@@ -10,9 +12,20 @@ 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.exception.EntityGuildMismatchException;
|
import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
import net.dv8tion.jda.api.entities.TextChannel;
|
import java.util.ArrayList;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
|
||||||
|
import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
|
||||||
|
import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
|
||||||
|
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;
|
||||||
|
|
||||||
@@ -27,12 +40,27 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
@Component
|
@Component
|
||||||
public class MoveAssignableRolePlace extends AbstractConditionableCommand {
|
public class MoveAssignableRolePlace extends AbstractConditionableCommand {
|
||||||
|
|
||||||
|
private static final String ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER = "name";
|
||||||
|
private static final String NEW_CHANNEL_PARAMETER = "channel";
|
||||||
|
private static final String MOVE_ASSIGNABLE_ROLE_PLACE_RESPONSE_TEMPLATE = "moveAssignableRolePlace_response";
|
||||||
@Autowired
|
@Autowired
|
||||||
private AssignableRolePlaceService placeManagementService;
|
private AssignableRolePlaceService placeManagementService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ServerManagementService serverManagementService;
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private InteractionService interactionService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandParameterService slashCommandParameterService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandAutoCompleteService slashCommandAutoCompleteService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AssignableRolePlaceManagementService assignableRolePlaceManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
List<Object> parameters = commandContext.getParameters().getParameters();
|
||||||
@@ -46,18 +74,69 @@ public class MoveAssignableRolePlace extends AbstractConditionableCommand {
|
|||||||
.thenApply(unused -> CommandResult.fromSuccess());
|
.thenApply(unused -> CommandResult.fromSuccess());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
|
String assignableRolePlaceName = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER, event, String.class);
|
||||||
|
GuildChannel channel = slashCommandParameterService.getCommandOption(NEW_CHANNEL_PARAMETER, event, TextChannel.class, GuildChannel.class);
|
||||||
|
if(!channel.getGuild().equals(event.getGuild()) && !(channel instanceof GuildMessageChannel)) {
|
||||||
|
throw new EntityGuildMismatchException();
|
||||||
|
}
|
||||||
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
|
return placeManagementService.moveAssignableRolePlace(server, assignableRolePlaceName, (GuildMessageChannel) channel)
|
||||||
|
.thenAccept(unused -> interactionService.replyEmbed(MOVE_ASSIGNABLE_ROLE_PLACE_RESPONSE_TEMPLATE, event))
|
||||||
|
.thenApply(unused -> CommandResult.fromSuccess());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> performAutoComplete(CommandAutoCompleteInteractionEvent event) {
|
||||||
|
if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)) {
|
||||||
|
String input = event.getFocusedOption().getValue();
|
||||||
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
|
return assignableRolePlaceManagementService.getAssignableRolePlacesWithNamesContaining(input, server)
|
||||||
|
.stream().map(assignableRolePlace -> assignableRolePlace.getKey().toLowerCase())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandConfiguration getConfiguration() {
|
public CommandConfiguration getConfiguration() {
|
||||||
Parameter rolePostName = Parameter.builder().name("name").type(String.class).templated(true).build();
|
Parameter rolePostName = Parameter
|
||||||
Parameter channel = Parameter.builder().name("channel").type(TextChannel.class).templated(true).build();
|
.builder()
|
||||||
|
.name(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)
|
||||||
|
.type(String.class)
|
||||||
|
.supportsAutoComplete(true)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
Parameter channel = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(NEW_CHANNEL_PARAMETER)
|
||||||
|
.type(TextChannel.class)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
List<Parameter> parameters = Arrays.asList(rolePostName, channel);
|
List<Parameter> parameters = Arrays.asList(rolePostName, channel);
|
||||||
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
|
HelpInfo helpInfo = HelpInfo
|
||||||
|
.builder()
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||||
|
.builder()
|
||||||
|
.enabled(true)
|
||||||
|
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
|
||||||
|
.rootCommandName(AssignableRolePlaceSlashCommandName.ASSIGNABLE_ROLE_PLACE)
|
||||||
|
.groupName("place")
|
||||||
|
.commandName("move")
|
||||||
|
.build();
|
||||||
|
|
||||||
return CommandConfiguration.builder()
|
return CommandConfiguration.builder()
|
||||||
.name("moveAssignableRolePlace")
|
.name("moveAssignableRolePlace")
|
||||||
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
|
.slashCommandOnly(true)
|
||||||
.async(true)
|
.async(true)
|
||||||
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.parameters(parameters)
|
.parameters(parameters)
|
||||||
.help(helpInfo)
|
.help(helpInfo)
|
||||||
|
|||||||
@@ -1,16 +1,30 @@
|
|||||||
package dev.sheldan.abstracto.assignableroles.command;
|
package dev.sheldan.abstracto.assignableroles.command;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRolePlaceSlashCommandName;
|
||||||
import dev.sheldan.abstracto.assignableroles.model.condition.AssignableRoleConditionType;
|
import dev.sheldan.abstracto.assignableroles.model.condition.AssignableRoleConditionType;
|
||||||
import dev.sheldan.abstracto.assignableroles.service.AssignableRoleConditionService;
|
import dev.sheldan.abstracto.assignableroles.service.AssignableRoleConditionService;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.service.management.AssignableRolePlaceManagementService;
|
||||||
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
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.CommandParameterKey;
|
||||||
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.slash.SlashCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import net.dv8tion.jda.api.entities.Role;
|
import net.dv8tion.jda.api.entities.Role;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
|
||||||
|
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;
|
||||||
|
|
||||||
@@ -20,30 +34,96 @@ import java.util.List;
|
|||||||
@Component
|
@Component
|
||||||
public class RemoveAssignableRoleCondition extends AbstractConditionableCommand {
|
public class RemoveAssignableRoleCondition extends AbstractConditionableCommand {
|
||||||
|
|
||||||
|
private static final String ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER = "name";
|
||||||
|
private static final String ASSIGNABLE_ROLE_PARAMETER = "role";
|
||||||
|
private static final String CONDITION_KEY_PARAMETER = "conditionKey";
|
||||||
|
|
||||||
|
private static final String REMOVE_ASSIGNABLE_ROLE_CONDITION_RESPONSE_TEMPLATE = "removeAssignableRoleCondition_response";
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private AssignableRoleConditionService assignableRoleConditionService;
|
private AssignableRoleConditionService assignableRoleConditionService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private InteractionService interactionService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandParameterService slashCommandParameterService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandAutoCompleteService slashCommandAutoCompleteService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AssignableRolePlaceManagementService assignableRolePlaceManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
String assignableRolePlaceName = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER, event, String.class);
|
||||||
String name = (String) parameters.get(0);
|
Role assignableRole = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PARAMETER, event, Role.class);
|
||||||
Role role = (Role) parameters.get(1);
|
String conditionKeyString = slashCommandParameterService.getCommandOption(CONDITION_KEY_PARAMETER, event, String.class);
|
||||||
AssignableRoleConditionType configKey = (AssignableRoleConditionType) parameters.get(2);
|
|
||||||
assignableRoleConditionService.deleteAssignableRoleCondition(name, role, configKey);
|
AssignableRoleConditionType assignableRoleConditionType = CommandParameterKey.getEnumFromKey(AssignableRoleConditionType.class, conditionKeyString);
|
||||||
return CommandResult.fromSuccess();
|
assignableRoleConditionService.deleteAssignableRoleCondition(assignableRolePlaceName, assignableRole, assignableRoleConditionType);
|
||||||
|
return interactionService.replyEmbed(REMOVE_ASSIGNABLE_ROLE_CONDITION_RESPONSE_TEMPLATE, event)
|
||||||
|
.thenApply(interactionHook -> CommandResult.fromSuccess());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> performAutoComplete(CommandAutoCompleteInteractionEvent event) {
|
||||||
|
if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)) {
|
||||||
|
String input = event.getFocusedOption().getValue();
|
||||||
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
|
return assignableRolePlaceManagementService.getAssignableRolePlacesWithNamesContaining(input, server)
|
||||||
|
.stream().map(assignableRolePlace -> assignableRolePlace.getKey().toLowerCase())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandConfiguration getConfiguration() {
|
public CommandConfiguration getConfiguration() {
|
||||||
Parameter placeName = Parameter.builder().name("name").type(String.class).templated(true).build();
|
Parameter placeName = Parameter
|
||||||
Parameter role = Parameter.builder().name("role").type(Role.class).templated(true).build();
|
.builder()
|
||||||
Parameter conditionKey = Parameter.builder().name("conditionKey").type(AssignableRoleConditionType.class).templated(true).build();
|
.name(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)
|
||||||
|
.type(String.class)
|
||||||
|
.supportsAutoComplete(true)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
Parameter role = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(ASSIGNABLE_ROLE_PARAMETER)
|
||||||
|
.type(Role.class)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
Parameter conditionKey = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(CONDITION_KEY_PARAMETER)
|
||||||
|
.type(AssignableRoleConditionType.class)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
List<Parameter> parameters = Arrays.asList(placeName, role, conditionKey);
|
List<Parameter> parameters = Arrays.asList(placeName, role, conditionKey);
|
||||||
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
|
HelpInfo helpInfo = HelpInfo
|
||||||
|
.builder()
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||||
|
.builder()
|
||||||
|
.enabled(true)
|
||||||
|
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
|
||||||
|
.rootCommandName(AssignableRolePlaceSlashCommandName.ASSIGNABLE_ROLE_PLACE)
|
||||||
|
.groupName("role")
|
||||||
|
.commandName("removecondition")
|
||||||
|
.build();
|
||||||
|
|
||||||
return CommandConfiguration.builder()
|
return CommandConfiguration.builder()
|
||||||
.name("removeAssignableRoleCondition")
|
.name("removeAssignableRoleCondition")
|
||||||
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
|
.slashCommandOnly(true)
|
||||||
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
.parameters(parameters)
|
.parameters(parameters)
|
||||||
|
|||||||
@@ -1,17 +1,31 @@
|
|||||||
package dev.sheldan.abstracto.assignableroles.command;
|
package dev.sheldan.abstracto.assignableroles.command;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRolePlaceSlashCommandName;
|
||||||
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.service.management.AssignableRolePlaceManagementService;
|
||||||
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
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.exception.SlashCommandParameterMissingException;
|
||||||
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.slash.SlashCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import net.dv8tion.jda.api.entities.Role;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
|
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -26,34 +40,99 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
@Component
|
@Component
|
||||||
public class RemoveRoleFromAssignableRolePlace extends AbstractConditionableCommand {
|
public class RemoveRoleFromAssignableRolePlace extends AbstractConditionableCommand {
|
||||||
|
|
||||||
|
private static final String ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER = "name";
|
||||||
|
private static final String ASSIGNABLE_ROLE_PARAMETER = "role";
|
||||||
|
private static final String REMOVE_ROLE_FROM_ASSIGNABLE_ROLE_PLACE_RESPONSE = "removeRoleFromAssignableRolePlace_response";
|
||||||
@Autowired
|
@Autowired
|
||||||
private AssignableRolePlaceService service;
|
private AssignableRolePlaceService service;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ServerManagementService serverManagementService;
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private InteractionService interactionService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandParameterService slashCommandParameterService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RoleManagementService roleManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandAutoCompleteService slashCommandAutoCompleteService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AssignableRolePlaceManagementService assignableRolePlaceManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
String assignableRolePlaceName = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER, event, String.class);
|
||||||
String name = (String) parameters.get(0);
|
ARole actualRole;
|
||||||
ARole role = (ARole) parameters.get(1);
|
if(slashCommandParameterService.hasCommandOptionWithFullType(ASSIGNABLE_ROLE_PARAMETER, event, OptionType.ROLE)) {
|
||||||
AServer server = serverManagementService.loadServer(commandContext.getGuild());
|
Role role = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PARAMETER, event, ARole.class, Role.class);
|
||||||
return service.removeRoleFromAssignableRolePlace(server, name, role)
|
actualRole = roleManagementService.findRole(role.getIdLong());
|
||||||
.thenApply(aVoid -> CommandResult.fromSuccess());
|
} else if(slashCommandParameterService.hasCommandOptionWithFullType(ASSIGNABLE_ROLE_PARAMETER, event, OptionType.STRING)) {
|
||||||
|
String roleId = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PARAMETER, event, ARole.class, String.class);
|
||||||
|
actualRole = roleManagementService.findRole(Long.parseLong(roleId));
|
||||||
|
} else {
|
||||||
|
throw new SlashCommandParameterMissingException(ASSIGNABLE_ROLE_PARAMETER);
|
||||||
|
}
|
||||||
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
|
return service.removeRoleFromAssignableRolePlace(server, assignableRolePlaceName, actualRole)
|
||||||
|
.thenAccept(unused -> interactionService.replyEmbed(REMOVE_ROLE_FROM_ASSIGNABLE_ROLE_PLACE_RESPONSE, event))
|
||||||
|
.thenApply(unused -> CommandResult.fromSuccess());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> performAutoComplete(CommandAutoCompleteInteractionEvent event) {
|
||||||
|
if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)) {
|
||||||
|
String input = event.getFocusedOption().getValue();
|
||||||
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
|
return assignableRolePlaceManagementService.getAssignableRolePlacesWithNamesContaining(input, server)
|
||||||
|
.stream().map(assignableRolePlace -> assignableRolePlace.getKey().toLowerCase())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandConfiguration getConfiguration() {
|
public CommandConfiguration getConfiguration() {
|
||||||
Parameter rolePostName = Parameter.builder().name("name").type(String.class).templated(true).build();
|
Parameter rolePostName = Parameter
|
||||||
Parameter role = Parameter.builder().name("role").type(ARole.class).templated(true).build();
|
.builder()
|
||||||
|
.name(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)
|
||||||
|
.type(String.class)
|
||||||
|
.supportsAutoComplete(true)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
Parameter role = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(ASSIGNABLE_ROLE_PARAMETER)
|
||||||
|
.type(ARole.class)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
List<Parameter> parameters = Arrays.asList(rolePostName, role);
|
List<Parameter> parameters = Arrays.asList(rolePostName, role);
|
||||||
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
|
HelpInfo helpInfo = HelpInfo
|
||||||
|
.builder()
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||||
|
.builder()
|
||||||
|
.enabled(true)
|
||||||
|
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
|
||||||
|
.rootCommandName(AssignableRolePlaceSlashCommandName.ASSIGNABLE_ROLE_PLACE)
|
||||||
|
.groupName("role")
|
||||||
|
.commandName("remove")
|
||||||
|
.build();
|
||||||
|
|
||||||
return CommandConfiguration.builder()
|
return CommandConfiguration.builder()
|
||||||
.name("removeRoleFromAssignableRolePlace")
|
.name("removeRoleFromAssignableRolePlace")
|
||||||
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
.async(true)
|
.async(true)
|
||||||
|
.slashCommandConfig(slashCommandConfig)
|
||||||
|
.slashCommandOnly(true)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.parameters(parameters)
|
.parameters(parameters)
|
||||||
.help(helpInfo)
|
.help(helpInfo)
|
||||||
|
|||||||
@@ -1,18 +1,27 @@
|
|||||||
package dev.sheldan.abstracto.assignableroles.command;
|
package dev.sheldan.abstracto.assignableroles.command;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRolePlaceSlashCommandName;
|
||||||
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.service.management.AssignableRolePlaceManagementService;
|
||||||
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
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.slash.SlashCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
import dev.sheldan.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.management.ServerManagementService;
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
|
||||||
|
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;
|
||||||
|
|
||||||
@@ -28,34 +37,78 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
public class SetupAssignableRolePlace extends AbstractConditionableCommand {
|
public class SetupAssignableRolePlace extends AbstractConditionableCommand {
|
||||||
|
|
||||||
|
private static final String ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER = "name";
|
||||||
|
private static final String SETUP_ASSIGNABLE_ROLE_PLACE_RESPONSE_TEMPLATE = "setupAssignableRolePlace_response";
|
||||||
@Autowired
|
@Autowired
|
||||||
private AssignableRolePlaceService service;
|
private AssignableRolePlaceService service;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ChannelService channelService;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ServerManagementService serverManagementService;
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private InteractionService interactionService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandParameterService slashCommandParameterService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandAutoCompleteService slashCommandAutoCompleteService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AssignableRolePlaceManagementService assignableRolePlaceManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
String assignableRolePlaceName = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER, event, String.class);
|
||||||
String name = (String) parameters.get(0);
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
AServer server = serverManagementService.loadServer(commandContext.getGuild());
|
return service.setupAssignableRolePlace(server, assignableRolePlaceName)
|
||||||
return service.setupAssignableRolePlace(server, name)
|
.thenAccept(unused -> interactionService.replyEmbed(SETUP_ASSIGNABLE_ROLE_PLACE_RESPONSE_TEMPLATE, event))
|
||||||
.thenApply(aVoid -> CommandResult.fromSuccess());
|
.thenApply(unused -> CommandResult.fromSuccess());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> performAutoComplete(CommandAutoCompleteInteractionEvent event) {
|
||||||
|
if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)) {
|
||||||
|
String input = event.getFocusedOption().getValue();
|
||||||
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
|
return assignableRolePlaceManagementService.getAssignableRolePlacesWithNamesContaining(input, server)
|
||||||
|
.stream().map(assignableRolePlace -> assignableRolePlace.getKey().toLowerCase())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandConfiguration getConfiguration() {
|
public CommandConfiguration getConfiguration() {
|
||||||
Parameter rolePostName = Parameter.builder().name("name").type(String.class).templated(true).build();
|
Parameter rolePostName = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)
|
||||||
|
.type(String.class)
|
||||||
|
.supportsAutoComplete(true)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
List<Parameter> parameters = Arrays.asList(rolePostName);
|
List<Parameter> parameters = Arrays.asList(rolePostName);
|
||||||
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
|
HelpInfo helpInfo = HelpInfo
|
||||||
|
.builder()
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||||
|
.builder()
|
||||||
|
.enabled(true)
|
||||||
|
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
|
||||||
|
.rootCommandName(AssignableRolePlaceSlashCommandName.ASSIGNABLE_ROLE_PLACE)
|
||||||
|
.groupName("place")
|
||||||
|
.commandName("setup")
|
||||||
|
.build();
|
||||||
|
|
||||||
return CommandConfiguration.builder()
|
return CommandConfiguration.builder()
|
||||||
.name("setupAssignableRolePlace")
|
.name("setupAssignableRolePlace")
|
||||||
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
.async(true)
|
.async(true)
|
||||||
|
.slashCommandOnly(true)
|
||||||
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
.parameters(parameters)
|
.parameters(parameters)
|
||||||
|
|||||||
@@ -1,18 +1,20 @@
|
|||||||
package dev.sheldan.abstracto.assignableroles.command;
|
package dev.sheldan.abstracto.assignableroles.command;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRolePlaceSlashCommandName;
|
||||||
import dev.sheldan.abstracto.assignableroles.model.template.AssignableRolePlaceConfig;
|
import dev.sheldan.abstracto.assignableroles.model.template.AssignableRolePlaceConfig;
|
||||||
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
||||||
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
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.service.ChannelService;
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
|
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;
|
||||||
|
|
||||||
@@ -30,33 +32,53 @@ public class ShowAssignableRolePlaceConfig extends AbstractConditionableCommand
|
|||||||
private AssignableRolePlaceService service;
|
private AssignableRolePlaceService service;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ServerManagementService serverManagementService;
|
private InteractionService interactionService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ChannelService channelService;
|
private SlashCommandParameterService slashCommandParameterService;
|
||||||
|
|
||||||
public static final String ASSIGNABLE_ROLES_CONFIG_POST_TEMPLATE_KEY = "assignable_roles_config_post";
|
private static final String ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER = "name";
|
||||||
|
private static final String ASSIGNABLE_ROLES_CONFIG_POST_TEMPLATE_KEY = "assignable_roles_config_post";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
List<Object> parameters = commandContext.getParameters().getParameters();
|
String assignableRolePlaceName = slashCommandParameterService.getCommandOption(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER, event, String.class);
|
||||||
String name = (String) parameters.get(0);
|
AssignableRolePlaceConfig config = service.getAssignableRolePlaceConfig(event.getGuild(), assignableRolePlaceName);
|
||||||
AssignableRolePlaceConfig config = service.getAssignableRolePlaceConfig(commandContext.getGuild(), name);
|
return interactionService.replyEmbed(ASSIGNABLE_ROLES_CONFIG_POST_TEMPLATE_KEY, config, event)
|
||||||
return FutureUtils.toSingleFutureGeneric(channelService.sendEmbedTemplateInTextChannelList(ASSIGNABLE_ROLES_CONFIG_POST_TEMPLATE_KEY, config, commandContext.getChannel()))
|
.thenApply(interactionHook -> CommandResult.fromSuccess());
|
||||||
.thenApply(unused -> CommandResult.fromSuccess());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandConfiguration getConfiguration() {
|
public CommandConfiguration getConfiguration() {
|
||||||
Parameter rolePostName = Parameter.builder().name("name").type(String.class).templated(true).build();
|
Parameter rolePostName = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(ASSIGNABLE_ROLE_PLACE_NAME_PARAMETER)
|
||||||
|
.type(String.class)
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
List<Parameter> parameters = Arrays.asList(rolePostName);
|
List<Parameter> parameters = Arrays.asList(rolePostName);
|
||||||
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
|
HelpInfo helpInfo = HelpInfo
|
||||||
|
.builder()
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||||
|
.builder()
|
||||||
|
.enabled(true)
|
||||||
|
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
|
||||||
|
.rootCommandName(AssignableRolePlaceSlashCommandName.ASSIGNABLE_ROLE_PLACE)
|
||||||
|
.groupName("place")
|
||||||
|
.commandName("showconfig")
|
||||||
|
.build();
|
||||||
|
|
||||||
return CommandConfiguration.builder()
|
return CommandConfiguration.builder()
|
||||||
.name("showAssignableRolePlaceConfig")
|
.name("showAssignableRolePlaceConfig")
|
||||||
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
.async(true)
|
.async(true)
|
||||||
.causesReaction(false)
|
.causesReaction(false)
|
||||||
|
.slashCommandOnly(true)
|
||||||
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.parameters(parameters)
|
.parameters(parameters)
|
||||||
.help(helpInfo)
|
.help(helpInfo)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package dev.sheldan.abstracto.assignableroles.command;
|
package dev.sheldan.abstracto.assignableroles.command;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRoleFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.assignableroles.config.AssignableRolePlaceSlashCommandName;
|
||||||
import dev.sheldan.abstracto.assignableroles.model.template.AssignablePlaceOverview;
|
import dev.sheldan.abstracto.assignableroles.model.template.AssignablePlaceOverview;
|
||||||
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
import dev.sheldan.abstracto.assignableroles.service.AssignableRolePlaceService;
|
||||||
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
||||||
@@ -9,10 +10,13 @@ import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
|||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
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.slash.SlashCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
|
||||||
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.ChannelService;
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
|
||||||
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
||||||
|
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;
|
||||||
|
|
||||||
@@ -28,28 +32,50 @@ public class ShowAssignableRolePlaces extends AbstractConditionableCommand {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private AssignableRolePlaceService service;
|
private AssignableRolePlaceService service;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ServerManagementService serverManagementService;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ChannelService channelService;
|
private ChannelService channelService;
|
||||||
|
|
||||||
public static final String ASSIGNABLE_ROLE_PLACES_OVERVIEW_TEMPLATE_KEY = "assignable_role_places_overview";
|
@Autowired
|
||||||
|
private InteractionService interactionService;
|
||||||
|
|
||||||
|
private static final String ASSIGNABLE_ROLE_PLACES_OVERVIEW_TEMPLATE_KEY = "assignable_role_places_overview";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
public CompletableFuture<CommandResult> executeAsync(CommandContext commandContext) {
|
||||||
AssignablePlaceOverview model = service.getAssignableRolePlaceOverview(commandContext.getGuild());
|
AssignablePlaceOverview model = service.getAssignableRolePlaceOverview(commandContext.getGuild());
|
||||||
return FutureUtils.toSingleFutureGeneric(channelService.sendEmbedTemplateInTextChannelList(ASSIGNABLE_ROLE_PLACES_OVERVIEW_TEMPLATE_KEY, model, commandContext.getChannel()))
|
return FutureUtils.toSingleFutureGeneric(channelService.sendEmbedTemplateInMessageChannel(ASSIGNABLE_ROLE_PLACES_OVERVIEW_TEMPLATE_KEY, model, commandContext.getChannel()))
|
||||||
.thenApply(unused -> CommandResult.fromSuccess());
|
.thenApply(unused -> CommandResult.fromSuccess());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
|
AssignablePlaceOverview model = service.getAssignableRolePlaceOverview(event.getGuild());
|
||||||
|
return interactionService.replyEmbed(ASSIGNABLE_ROLE_PLACES_OVERVIEW_TEMPLATE_KEY, model, event)
|
||||||
|
.thenApply(interactionHook -> CommandResult.fromSuccess());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandConfiguration getConfiguration() {
|
public CommandConfiguration getConfiguration() {
|
||||||
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
|
HelpInfo helpInfo = HelpInfo
|
||||||
|
.builder()
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||||
|
.builder()
|
||||||
|
.enabled(true)
|
||||||
|
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
|
||||||
|
.rootCommandName(AssignableRolePlaceSlashCommandName.ASSIGNABLE_ROLE_PLACE)
|
||||||
|
.groupName("place")
|
||||||
|
.commandName("show")
|
||||||
|
.build();
|
||||||
|
|
||||||
return CommandConfiguration.builder()
|
return CommandConfiguration.builder()
|
||||||
.name("showAssignableRolePlaces")
|
.name("showAssignableRolePlaces")
|
||||||
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
.module(AssignableRoleModuleDefinition.ASSIGNABLE_ROLES)
|
||||||
.templated(true)
|
.templated(true)
|
||||||
|
.slashCommandOnly(true)
|
||||||
|
.slashCommandConfig(slashCommandConfig)
|
||||||
.async(true)
|
.async(true)
|
||||||
.supportsEmbedException(true)
|
.supportsEmbedException(true)
|
||||||
.help(helpInfo)
|
.help(helpInfo)
|
||||||
|
|||||||
@@ -37,5 +37,6 @@ public interface AssignableRolePlaceRepository extends JpaRepository<AssignableR
|
|||||||
* @return A list of {@link AssignableRolePlace places} which were found in the given {@link AServer server}
|
* @return A list of {@link AssignableRolePlace places} which were found in the given {@link AServer server}
|
||||||
*/
|
*/
|
||||||
List<AssignableRolePlace> findByServer(AServer server);
|
List<AssignableRolePlace> findByServer(AServer server);
|
||||||
|
List<AssignableRolePlace> findByKeyContainingIgnoreCaseAndServer(String name, AServer server);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import dev.sheldan.abstracto.core.exception.EmoteNotUsableException;
|
|||||||
import dev.sheldan.abstracto.core.interaction.ComponentPayloadManagementService;
|
import dev.sheldan.abstracto.core.interaction.ComponentPayloadManagementService;
|
||||||
import dev.sheldan.abstracto.core.interaction.ComponentPayloadService;
|
import dev.sheldan.abstracto.core.interaction.ComponentPayloadService;
|
||||||
import dev.sheldan.abstracto.core.interaction.ComponentService;
|
import dev.sheldan.abstracto.core.interaction.ComponentService;
|
||||||
import dev.sheldan.abstracto.core.models.FullEmote;
|
|
||||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
@@ -27,7 +26,12 @@ 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 lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.dv8tion.jda.api.entities.*;
|
import net.dv8tion.jda.api.entities.*;
|
||||||
import net.dv8tion.jda.api.interactions.components.buttons.ButtonStyle;
|
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
|
||||||
|
import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
|
||||||
|
import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel;
|
||||||
|
import net.dv8tion.jda.api.entities.emoji.CustomEmoji;
|
||||||
|
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
||||||
|
import net.dv8tion.jda.api.components.buttons.ButtonStyle;
|
||||||
import org.apache.commons.lang3.BooleanUtils;
|
import org.apache.commons.lang3.BooleanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -102,7 +106,7 @@ public class AssignableRolePlaceServiceBean implements AssignableRolePlaceServic
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public CompletableFuture<Void> addRoleToAssignableRolePlace(AServer server, String placeName, Role role, FullEmote fakeEmote, String description) {
|
public CompletableFuture<Void> addRoleToAssignableRolePlace(AServer server, String placeName, Role role, Emoji emoji, String description) {
|
||||||
AssignableRolePlace assignableRolePlace = rolePlaceManagementService.findByServerAndKey(server, placeName);
|
AssignableRolePlace assignableRolePlace = rolePlaceManagementService.findByServerAndKey(server, placeName);
|
||||||
if (assignableRolePlace.getAssignableRoles().size() > MAX_ASSIGNABLE_ROLES_PER_POST) {
|
if (assignableRolePlace.getAssignableRoles().size() > MAX_ASSIGNABLE_ROLES_PER_POST) {
|
||||||
log.info("Assignable role place {} has already {} roles. Not possible to add more.", assignableRolePlace.getId(), assignableRolePlace.getAssignableRoles().size());
|
log.info("Assignable role place {} has already {} roles. Not possible to add more.", assignableRolePlace.getId(), assignableRolePlace.getAssignableRoles().size());
|
||||||
@@ -113,26 +117,26 @@ public class AssignableRolePlaceServiceBean implements AssignableRolePlaceServic
|
|||||||
}
|
}
|
||||||
Long placeId = assignableRolePlace.getId();
|
Long placeId = assignableRolePlace.getId();
|
||||||
Long serverId = server.getId();
|
Long serverId = server.getId();
|
||||||
if (fakeEmote != null && fakeEmote.getEmote() != null) {
|
if (emoji instanceof CustomEmoji customEmoji) {
|
||||||
// it only may be unusable if its a custom emote
|
// it only may be unusable if its a custom emote
|
||||||
log.debug("Using custom emote {} to create assignable role {} for assignable role place {} in server {}.",
|
log.debug("Using custom emote {} to create assignable role {} for assignable role place {} in server {}.",
|
||||||
fakeEmote.getEmote().getId(), role.getId(), placeId, serverId);
|
customEmoji.getId(), role.getId(), placeId, serverId);
|
||||||
if (!emoteService.isEmoteUsableByBot(fakeEmote.getEmote()) && fakeEmote.getEmote().isAvailable()) {
|
if (!emoteService.isEmoteUsableByBot(customEmoji)) {
|
||||||
throw new EmoteNotUsableException(fakeEmote.getEmote());
|
throw new EmoteNotUsableException(customEmoji);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Optional<GuildMessageChannel> channelOptional = channelService.getMessageChannelFromServerOptional(server.getId(), assignableRolePlace.getChannel().getId());
|
Optional<GuildMessageChannel> channelOptional = channelService.getMessageChannelFromServerOptional(server.getId(), assignableRolePlace.getChannel().getId());
|
||||||
if (channelOptional.isPresent()) {
|
if (channelOptional.isPresent()) {
|
||||||
GuildMessageChannel textChannel = channelOptional.get();
|
GuildMessageChannel textChannel = channelOptional.get();
|
||||||
String buttonId = componentService.generateComponentId();
|
String buttonId = componentService.generateComponentId();
|
||||||
String emoteMarkdown = fakeEmote != null ? fakeEmote.getEmoteRepr() : null;
|
String emoteMarkdown = emoji != null ? emoji.getFormatted() : null;
|
||||||
if (assignableRolePlace.getMessageId() != null) {
|
if (assignableRolePlace.getMessageId() != null) {
|
||||||
log.debug("Assignable role place {} has already message post with ID {} - updating.", assignableRolePlace.getId(), assignableRolePlace.getMessageId());
|
log.debug("Assignable role place {} has already message post with ID {} - updating.", assignableRolePlace.getId(), assignableRolePlace.getMessageId());
|
||||||
return componentService.addButtonToMessage(assignableRolePlace.getMessageId(), textChannel, buttonId, description, emoteMarkdown, ButtonStyle.SECONDARY)
|
return componentService.addButtonToMessage(assignableRolePlace.getMessageId(), textChannel, buttonId, description, emoteMarkdown, ButtonStyle.SECONDARY)
|
||||||
.thenAccept(message -> self.persistAssignableRoleAddition(placeId, role, description, fakeEmote, buttonId));
|
.thenAccept(message -> self.persistAssignableRoleAddition(placeId, role, description, emoji, buttonId));
|
||||||
} else {
|
} else {
|
||||||
log.info("Assignable role place {} is not yet setup - only adding role to the database.", assignableRolePlace.getId());
|
log.info("Assignable role place {} is not yet setup - only adding role to the database.", assignableRolePlace.getId());
|
||||||
self.persistAssignableRoleAddition(placeId, role, description, fakeEmote, buttonId);
|
self.persistAssignableRoleAddition(placeId, role, description, emoji, buttonId);
|
||||||
return CompletableFuture.completedFuture(null);
|
return CompletableFuture.completedFuture(null);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -141,11 +145,11 @@ public class AssignableRolePlaceServiceBean implements AssignableRolePlaceServic
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public void persistAssignableRoleAddition(Long placeId, Role role, String description, FullEmote fakeEmote, String componentId) {
|
public void persistAssignableRoleAddition(Long placeId, Role role, String description, Emoji emoji, String componentId) {
|
||||||
AssignableRolePlace place = assignableRolePlaceManagementServiceBean.findByPlaceId(placeId);
|
AssignableRolePlace place = assignableRolePlaceManagementServiceBean.findByPlaceId(placeId);
|
||||||
log.info("Adding role {} to assignable role place {} with component ID {}.", role.getId(), place.getId(), componentId);
|
log.info("Adding role {} to assignable role place {} with component ID {}.", role.getId(), place.getId(), componentId);
|
||||||
ComponentPayload payload = persistButtonCallback(place, componentId, role.getIdLong());
|
ComponentPayload payload = persistButtonCallback(place, componentId, role.getIdLong());
|
||||||
assignableRoleManagementServiceBean.addRoleToPlace(fakeEmote, role, description, place, payload);
|
assignableRoleManagementServiceBean.addRoleToPlace(emoji, role, description, place, payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -351,7 +355,7 @@ public class AssignableRolePlaceServiceBean implements AssignableRolePlaceServic
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<Void> moveAssignableRolePlace(AServer server, String name, TextChannel newChannel) {
|
public CompletableFuture<Void> moveAssignableRolePlace(AServer server, String name, GuildMessageChannel newChannel) {
|
||||||
AssignableRolePlace place = rolePlaceManagementService.findByServerAndKey(server, name);
|
AssignableRolePlace place = rolePlaceManagementService.findByServerAndKey(server, name);
|
||||||
log.info("Moving assignable role place {} from channel {} to channel {} in guild {}.",
|
log.info("Moving assignable role place {} from channel {} to channel {} in guild {}.",
|
||||||
place.getId(), place.getChannel().getId(), newChannel.getId(), newChannel.getGuild().getIdLong());
|
place.getId(), place.getChannel().getId(), newChannel.getId(), newChannel.getGuild().getIdLong());
|
||||||
@@ -379,7 +383,7 @@ public class AssignableRolePlaceServiceBean implements AssignableRolePlaceServic
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public void updateAssignableRolePlaceChannel(String name, TextChannel textChannel) {
|
public void updateAssignableRolePlaceChannel(String name, GuildChannel textChannel) {
|
||||||
AChannel channel = channelManagementService.loadChannel(textChannel.getIdLong());
|
AChannel channel = channelManagementService.loadChannel(textChannel.getIdLong());
|
||||||
log.info("Setting assignable role place to channel {}.", textChannel.getIdLong());
|
log.info("Setting assignable role place to channel {}.", textChannel.getIdLong());
|
||||||
rolePlaceManagementService.moveAssignableRolePlace(name, channel);
|
rolePlaceManagementService.moveAssignableRolePlace(name, channel);
|
||||||
@@ -398,7 +402,10 @@ public class AssignableRolePlaceServiceBean implements AssignableRolePlaceServic
|
|||||||
public void deleteAssignableRolePlaceInDatabase(Long placeId) {
|
public void deleteAssignableRolePlaceInDatabase(Long placeId) {
|
||||||
AssignableRolePlace place = rolePlaceManagementService.findByPlaceId(placeId);
|
AssignableRolePlace place = rolePlaceManagementService.findByPlaceId(placeId);
|
||||||
place.getAssignableRoles()
|
place.getAssignableRoles()
|
||||||
.forEach(assignableRole -> componentPayloadManagementService.deletePayload(assignableRole.getComponentPayload()));
|
.forEach(assignableRole -> {
|
||||||
|
assignedRoleUserManagementServiceBean.removeAssignedRoleFromUsers(assignableRole);
|
||||||
|
componentPayloadManagementService.deletePayload(assignableRole.getComponentPayload());
|
||||||
|
});
|
||||||
rolePlaceManagementService.deleteAssignablePlace(place);
|
rolePlaceManagementService.deleteAssignablePlace(place);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -412,13 +419,15 @@ public class AssignableRolePlaceServiceBean implements AssignableRolePlaceServic
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<Void> changeConfiguration(AServer server, String name, AssignableRolePlaceParameterKey keyToChange, String newValue) {
|
public CompletableFuture<Void> changeConfiguration(AServer server, String name, AssignableRolePlaceParameterKey keyToChange, String newValue) {
|
||||||
Boolean booleanValue = BooleanUtils.toBooleanObject(newValue);
|
|
||||||
if (booleanValue == null) {
|
|
||||||
throw new CommandParameterKeyValueWrongTypeException(Arrays.asList("yes", "no", "true", "false", "on", "off"));
|
|
||||||
}
|
|
||||||
if (keyToChange == AssignableRolePlaceParameterKey.UNIQUE) {
|
if (keyToChange == AssignableRolePlaceParameterKey.UNIQUE) {
|
||||||
|
Boolean booleanValue = BooleanUtils.toBooleanObject(newValue);
|
||||||
|
if (booleanValue == null) {
|
||||||
|
throw new CommandParameterKeyValueWrongTypeException(Arrays.asList("yes", "no", "true", "false", "on", "off"));
|
||||||
|
}
|
||||||
setAssignablePlaceUniqueTo(server, name, booleanValue);
|
setAssignablePlaceUniqueTo(server, name, booleanValue);
|
||||||
return CompletableFuture.completedFuture(null);
|
return CompletableFuture.completedFuture(null);
|
||||||
|
} else if(keyToChange == AssignableRolePlaceParameterKey.TEXT) {
|
||||||
|
return changeTextAsync(server, name, newValue);
|
||||||
}
|
}
|
||||||
throw new AssignableRolePlaceIllegalConfigurationException();
|
throw new AssignableRolePlaceIllegalConfigurationException();
|
||||||
}
|
}
|
||||||
@@ -516,7 +525,7 @@ public class AssignableRolePlaceServiceBean implements AssignableRolePlaceServic
|
|||||||
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public CompletableFuture<Void> setupAssignableRolePlaceInChannel(Long serverId, Long assignablePlaceId, TextChannel textChannel) {
|
public CompletableFuture<Void> setupAssignableRolePlaceInChannel(Long serverId, Long assignablePlaceId, GuildMessageChannel textChannel) {
|
||||||
AssignableRolePlace assignableRolePlace = rolePlaceManagementService.findByPlaceId(assignablePlaceId);
|
AssignableRolePlace assignableRolePlace = rolePlaceManagementService.findByPlaceId(assignablePlaceId);
|
||||||
log.info("Sending assignable role place posts for place {} in channel {} in server {}.", assignableRolePlace.getId(), textChannel.getId(), serverId);
|
log.info("Sending assignable role place posts for place {} in channel {} in server {}.", assignableRolePlace.getId(), textChannel.getId(), serverId);
|
||||||
return sendAssignablePostMessage(assignableRolePlace, textChannel);
|
return sendAssignablePostMessage(assignableRolePlace, textChannel);
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlaceT
|
|||||||
import dev.sheldan.abstracto.assignableroles.model.database.AssignedRoleUser;
|
import dev.sheldan.abstracto.assignableroles.model.database.AssignedRoleUser;
|
||||||
import dev.sheldan.abstracto.assignableroles.repository.AssignableRoleRepository;
|
import dev.sheldan.abstracto.assignableroles.repository.AssignableRoleRepository;
|
||||||
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||||
import dev.sheldan.abstracto.core.models.FullEmote;
|
|
||||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||||
import dev.sheldan.abstracto.core.models.database.ComponentPayload;
|
import dev.sheldan.abstracto.core.models.database.ComponentPayload;
|
||||||
import dev.sheldan.abstracto.core.service.EmoteService;
|
import dev.sheldan.abstracto.core.service.EmoteService;
|
||||||
@@ -14,6 +13,7 @@ import dev.sheldan.abstracto.core.service.management.EmoteManagementService;
|
|||||||
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
|
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.dv8tion.jda.api.entities.Role;
|
import net.dv8tion.jda.api.entities.Role;
|
||||||
|
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -39,12 +39,12 @@ public class AssignableRoleManagementServiceBean implements AssignableRoleManage
|
|||||||
private EmoteService emoteService;
|
private EmoteService emoteService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AssignableRole addRoleToPlace(FullEmote emote, Role role, String description, AssignableRolePlace place, ComponentPayload componentPayload) {
|
public AssignableRole addRoleToPlace(Emoji emoji, Role role, String description, AssignableRolePlace place, ComponentPayload componentPayload) {
|
||||||
ARole arole = roleManagementService.findRole(role.getIdLong());
|
ARole arole = roleManagementService.findRole(role.getIdLong());
|
||||||
AssignableRole roleToAdd = AssignableRole
|
AssignableRole roleToAdd = AssignableRole
|
||||||
.builder()
|
.builder()
|
||||||
.assignablePlace(place)
|
.assignablePlace(place)
|
||||||
.emoteMarkdown(emote != null ? emote.getEmoteRepr() : null)
|
.emoteMarkdown(emoji != null ? emoji.getFormatted() : null)
|
||||||
.role(arole)
|
.role(arole)
|
||||||
.componentPayload(componentPayload)
|
.componentPayload(componentPayload)
|
||||||
.server(place.getServer())
|
.server(place.getServer())
|
||||||
|
|||||||
@@ -86,4 +86,8 @@ public class AssignableRolePlaceManagementServiceBean implements AssignableRoleP
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AssignableRolePlace> getAssignableRolePlacesWithNamesContaining(String name, AServer server) {
|
||||||
|
return repository.findByKeyContainingIgnoreCaseAndServer(name, server);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ public class AssignedRoleUserManagementServiceBean implements AssignedRoleUserMa
|
|||||||
@Override
|
@Override
|
||||||
public void removeAssignedRoleFromUsers(AssignableRole assignableRole, List<AssignedRoleUser> users) {
|
public void removeAssignedRoleFromUsers(AssignableRole assignableRole, List<AssignedRoleUser> users) {
|
||||||
log.info("Clearing all assignable role {} for {} users.", assignableRole.getId(), users.size());
|
log.info("Clearing all assignable role {} for {} users.", assignableRole.getId(), users.size());
|
||||||
assignableRole.getAssignedUsers().removeAll(users);
|
|
||||||
users.forEach(roleUser -> roleUser.getRoles().remove(assignableRole));
|
users.forEach(roleUser -> roleUser.getRoles().remove(assignableRole));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<property name="assignableRoleModule" value="(SELECT id FROM module WHERE name = 'assignableRoles')"/>
|
<property name="assignableRoleModule" value="(SELECT id FROM module WHERE name = 'assignableRoles')"/>
|
||||||
<property name="assignableRoleFeature" value="(SELECT id FROM feature WHERE key = 'assignableRole')"/>
|
<property name="assignableRoleFeature" value="(SELECT id FROM feature WHERE key = 'assignableRole')"/>
|
||||||
<changeSet author="Sheldan" id="assignable_roles-commands">
|
<changeSet author="Sheldan" id="assignable_roles-commands">
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<include file="feature.xml" relativeToChangelogFile="true"/>
|
<include file="feature.xml" relativeToChangelogFile="true"/>
|
||||||
<include file="module.xml" relativeToChangelogFile="true"/>
|
<include file="module.xml" relativeToChangelogFile="true"/>
|
||||||
<include file="command.xml" relativeToChangelogFile="true"/>
|
<include file="command.xml" relativeToChangelogFile="true"/>
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<changeSet author="Sheldan" id="assignable_role-feature-insertion">
|
<changeSet author="Sheldan" id="assignable_role-feature-insertion">
|
||||||
<insert tableName="feature">
|
<insert tableName="feature">
|
||||||
<column name="key" value="assignableRole"/>
|
<column name="key" value="assignableRole"/>
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<changeSet author="Sheldan" id="assignable_role-module-insertion">
|
<changeSet author="Sheldan" id="assignable_role-module-insertion">
|
||||||
<insert tableName="module">
|
<insert tableName="module">
|
||||||
<column name="name" value="assignableRoles"/>
|
<column name="name" value="assignableRoles"/>
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<changeSet author="Sheldan" id="assignable_role-table">
|
<changeSet author="Sheldan" id="assignable_role-table">
|
||||||
<createTable tableName="assignable_role">
|
<createTable tableName="assignable_role">
|
||||||
<column autoIncrement="true" name="id" type="BIGINT">
|
<column autoIncrement="true" name="id" type="BIGINT">
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<changeSet author="Sheldan" id="assignable_role_condition-table">
|
<changeSet author="Sheldan" id="assignable_role_condition-table">
|
||||||
<createTable tableName="assignable_role_condition">
|
<createTable tableName="assignable_role_condition">
|
||||||
<column autoIncrement="true" name="id" type="BIGINT">
|
<column autoIncrement="true" name="id" type="BIGINT">
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<changeSet author="Sheldan" id="assignable_role_place-table">
|
<changeSet author="Sheldan" id="assignable_role_place-table">
|
||||||
<createTable tableName="assignable_role_place">
|
<createTable tableName="assignable_role_place">
|
||||||
<column autoIncrement="true" name="id" type="BIGINT">
|
<column autoIncrement="true" name="id" type="BIGINT">
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<changeSet author="Sheldan" id="assigned_role_user-table">
|
<changeSet author="Sheldan" id="assigned_role_user-table">
|
||||||
<createTable tableName="assigned_role_user">
|
<createTable tableName="assigned_role_user">
|
||||||
<column name="id" type="BIGINT">
|
<column name="id" type="BIGINT">
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<include file="assignable_role_place.xml" relativeToChangelogFile="true"/>
|
<include file="assignable_role_place.xml" relativeToChangelogFile="true"/>
|
||||||
<include file="assignable_role.xml" relativeToChangelogFile="true"/>
|
<include file="assignable_role.xml" relativeToChangelogFile="true"/>
|
||||||
<include file="assignable_role_condition.xml" relativeToChangelogFile="true"/>
|
<include file="assignable_role_condition.xml" relativeToChangelogFile="true"/>
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<include file="assignableRoles-tables/tables.xml" relativeToChangelogFile="true"/>
|
<include file="assignableRoles-tables/tables.xml" relativeToChangelogFile="true"/>
|
||||||
<include file="assignableRoles-seedData/data.xml" relativeToChangelogFile="true"/>
|
<include file="assignableRoles-seedData/data.xml" relativeToChangelogFile="true"/>
|
||||||
</databaseChangeLog>
|
</databaseChangeLog>
|
||||||
@@ -1,10 +1,6 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<include file="tables/tables.xml" relativeToChangelogFile="true"/>
|
<include file="tables/tables.xml" relativeToChangelogFile="true"/>
|
||||||
</databaseChangeLog>
|
</databaseChangeLog>
|
||||||
@@ -1,11 +1,7 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<changeSet author="Sheldan" id="assignable_role_place-add_type">
|
<changeSet author="Sheldan" id="assignable_role_place-add_type">
|
||||||
<addColumn tableName="assignable_role_place">
|
<addColumn tableName="assignable_role_place">
|
||||||
<column name="type" type="VARCHAR2(128)" defaultValue="DEFAULT"/>
|
<column name="type" type="VARCHAR2(128)" defaultValue="DEFAULT"/>
|
||||||
|
|||||||
@@ -1,10 +1,6 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<include file="assignable_role_place.xml" relativeToChangelogFile="true"/>
|
<include file="assignable_role_place.xml" relativeToChangelogFile="true"/>
|
||||||
</databaseChangeLog>
|
</databaseChangeLog>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
|
<include file="delete/delete.xml" relativeToChangelogFile="true"/>
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
|
<property name="editAssignableRolePlaceTextCommandId" value="(SELECT id FROM command WHERE name = 'editAssignableRolePlaceText')"/>
|
||||||
|
<changeSet author="Sheldan" id="delete-editAssignableRolePlaceText_command">
|
||||||
|
<sql >
|
||||||
|
delete from ${database.defaultSchemaName}.command_in_server_allowed_role
|
||||||
|
where command_in_server_id
|
||||||
|
in
|
||||||
|
(select
|
||||||
|
command_in_server_id
|
||||||
|
from ${database.defaultSchemaName}.command_in_server
|
||||||
|
where command_id = (SELECT id FROM ${database.defaultSchemaName}.command WHERE name = 'editAssignableRolePlaceText'));
|
||||||
|
delete from ${database.defaultSchemaName}.command_in_server_alias
|
||||||
|
where command_in_server_id
|
||||||
|
in
|
||||||
|
(select command_in_server_id
|
||||||
|
from ${database.defaultSchemaName}.command_in_server
|
||||||
|
where command_id =
|
||||||
|
(SELECT id FROM ${database.defaultSchemaName}.command WHERE name = 'editAssignableRolePlaceText'))
|
||||||
|
</sql>
|
||||||
|
<delete tableName="command_in_server">
|
||||||
|
<where>command_id=${editAssignableRolePlaceTextCommandId}</where>
|
||||||
|
</delete>
|
||||||
|
<delete tableName="command">
|
||||||
|
<where>id=${editAssignableRolePlaceTextCommandId}</where>
|
||||||
|
</delete>
|
||||||
|
</changeSet>
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
|
<include file="command.xml" relativeToChangelogFile="true"/>
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -1,11 +1,8 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<include file="1.0-assignableRoles/collection.xml" relativeToChangelogFile="true"/>
|
<include file="1.0-assignableRoles/collection.xml" relativeToChangelogFile="true"/>
|
||||||
<include file="1.3.4/collection.xml" relativeToChangelogFile="true"/>
|
<include file="1.3.4/collection.xml" relativeToChangelogFile="true"/>
|
||||||
|
<include file="1.6.4/collection.xml" relativeToChangelogFile="true"/>
|
||||||
</databaseChangeLog>
|
</databaseChangeLog>
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -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.4.0</version>
|
<version>1.6.9-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>assignable-roles-int</artifactId>
|
<artifactId>assignable-roles-int</artifactId>
|
||||||
|
|||||||
@@ -5,5 +5,5 @@ import lombok.Getter;
|
|||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
public enum AssignableRolePlaceParameterKey implements CommandParameterKey {
|
public enum AssignableRolePlaceParameterKey implements CommandParameterKey {
|
||||||
UNIQUE
|
UNIQUE, TEXT
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package dev.sheldan.abstracto.assignableroles.config;
|
||||||
|
|
||||||
|
public class AssignableRolePlaceSlashCommandName {
|
||||||
|
public static final String ASSIGNABLE_ROLE_PLACE = "assignablerole";
|
||||||
|
}
|
||||||
@@ -9,7 +9,7 @@ import net.dv8tion.jda.api.entities.Role;
|
|||||||
/**
|
/**
|
||||||
* Exception thrown in case the {@link dev.sheldan.abstracto.assignableroles.model.database.AssignableRole} has already been
|
* Exception thrown in case the {@link dev.sheldan.abstracto.assignableroles.model.database.AssignableRole} has already been
|
||||||
* defined for an {@link dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlace}. This is identified
|
* defined for an {@link dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlace}. This is identified
|
||||||
* via the {@link net.dv8tion.jda.api.entities.Emote} which is used to react.
|
* via the emote which is used to react.
|
||||||
*/
|
*/
|
||||||
public class AssignableRoleAlreadyDefinedException extends AbstractoRunTimeException implements Templatable {
|
public class AssignableRoleAlreadyDefinedException extends AbstractoRunTimeException implements Templatable {
|
||||||
private final AssignableRoleAlreadyDefinedExceptionModel model;
|
private final AssignableRoleAlreadyDefinedExceptionModel model;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import dev.sheldan.abstracto.core.templating.Templatable;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Exception thrown in case the {@link dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlace place}
|
* Exception thrown in case the {@link dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlace place}
|
||||||
* identified by {@link dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlace#key}
|
* identified by {@link dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlace} key
|
||||||
*/
|
*/
|
||||||
public class AssignableRolePlaceAlreadyExistsException extends AbstractoRunTimeException implements Templatable {
|
public class AssignableRolePlaceAlreadyExistsException extends AbstractoRunTimeException implements Templatable {
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import dev.sheldan.abstracto.core.models.database.AServer;
|
|||||||
import dev.sheldan.abstracto.core.models.database.ComponentPayload;
|
import dev.sheldan.abstracto.core.models.database.ComponentPayload;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import jakarta.persistence.*;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -74,7 +74,7 @@ public class AssignableRole implements Serializable {
|
|||||||
private String description;
|
private String description;
|
||||||
|
|
||||||
@OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
@OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
||||||
@JoinColumn(name = "component_id", nullable = false)
|
@JoinColumn(name = "component_id")
|
||||||
private ComponentPayload componentPayload;
|
private ComponentPayload componentPayload;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package dev.sheldan.abstracto.assignableroles.model.database;
|
|||||||
import dev.sheldan.abstracto.assignableroles.model.condition.AssignableRoleConditionType;
|
import dev.sheldan.abstracto.assignableroles.model.condition.AssignableRoleConditionType;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import jakarta.persistence.*;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name = "assignable_role_condition")
|
@Table(name = "assignable_role_condition")
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import dev.sheldan.abstracto.core.models.database.AChannel;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import jakarta.persistence.*;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package dev.sheldan.abstracto.assignableroles.model.database;
|
|||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import jakarta.persistence.*;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|||||||
@@ -5,20 +5,20 @@ import dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlace;
|
|||||||
import dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlaceType;
|
import dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlaceType;
|
||||||
import dev.sheldan.abstracto.assignableroles.model.template.AssignablePlaceOverview;
|
import dev.sheldan.abstracto.assignableroles.model.template.AssignablePlaceOverview;
|
||||||
import dev.sheldan.abstracto.assignableroles.model.template.AssignableRolePlaceConfig;
|
import dev.sheldan.abstracto.assignableroles.model.template.AssignableRolePlaceConfig;
|
||||||
import dev.sheldan.abstracto.core.models.FullEmote;
|
|
||||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import net.dv8tion.jda.api.entities.Guild;
|
import net.dv8tion.jda.api.entities.Guild;
|
||||||
import net.dv8tion.jda.api.entities.Role;
|
import net.dv8tion.jda.api.entities.Role;
|
||||||
import net.dv8tion.jda.api.entities.TextChannel;
|
|
||||||
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel;
|
||||||
|
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
||||||
|
|
||||||
public interface AssignableRolePlaceService {
|
public interface AssignableRolePlaceService {
|
||||||
void createAssignableRolePlace(String name, AChannel channel, String text, AssignableRolePlaceType type);
|
void createAssignableRolePlace(String name, AChannel channel, String text, AssignableRolePlaceType type);
|
||||||
|
|
||||||
CompletableFuture<Void> addRoleToAssignableRolePlace(AServer server, String placeName, Role role, FullEmote emote, String description);
|
CompletableFuture<Void> addRoleToAssignableRolePlace(AServer server, String placeName, Role role, Emoji emoji, String description);
|
||||||
|
|
||||||
CompletableFuture<Void> removeRoleFromAssignableRolePlace(AServer server, String placeName, ARole role);
|
CompletableFuture<Void> removeRoleFromAssignableRolePlace(AServer server, String placeName, ARole role);
|
||||||
|
|
||||||
@@ -48,7 +48,7 @@ public interface AssignableRolePlaceService {
|
|||||||
|
|
||||||
AssignableRolePlaceConfig getAssignableRolePlaceConfig(Guild guild, String name);
|
AssignableRolePlaceConfig getAssignableRolePlaceConfig(Guild guild, String name);
|
||||||
|
|
||||||
CompletableFuture<Void> moveAssignableRolePlace(AServer server, String name, TextChannel newChannel);
|
CompletableFuture<Void> moveAssignableRolePlace(AServer server, String name, GuildMessageChannel newChannel);
|
||||||
|
|
||||||
CompletableFuture<Void> deleteAssignableRolePlace(AServer server, String name);
|
CompletableFuture<Void> deleteAssignableRolePlace(AServer server, String name);
|
||||||
|
|
||||||
|
|||||||
@@ -4,14 +4,14 @@ import dev.sheldan.abstracto.assignableroles.model.database.AssignableRole;
|
|||||||
import dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlace;
|
import dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlace;
|
||||||
import dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlaceType;
|
import dev.sheldan.abstracto.assignableroles.model.database.AssignableRolePlaceType;
|
||||||
import dev.sheldan.abstracto.assignableroles.model.database.AssignedRoleUser;
|
import dev.sheldan.abstracto.assignableroles.model.database.AssignedRoleUser;
|
||||||
import dev.sheldan.abstracto.core.models.FullEmote;
|
|
||||||
import dev.sheldan.abstracto.core.models.database.ComponentPayload;
|
import dev.sheldan.abstracto.core.models.database.ComponentPayload;
|
||||||
import net.dv8tion.jda.api.entities.Role;
|
import net.dv8tion.jda.api.entities.Role;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import net.dv8tion.jda.api.entities.emoji.Emoji;
|
||||||
|
|
||||||
public interface AssignableRoleManagementService {
|
public interface AssignableRoleManagementService {
|
||||||
AssignableRole addRoleToPlace(FullEmote emote, Role role, String description, AssignableRolePlace place, ComponentPayload componentPayload);
|
AssignableRole addRoleToPlace(Emoji emoji, Role role, String description, AssignableRolePlace place, ComponentPayload componentPayload);
|
||||||
|
|
||||||
AssignableRole getByAssignableRoleId(Long assignableRoleId);
|
AssignableRole getByAssignableRoleId(Long assignableRoleId);
|
||||||
void deleteAssignableRole(AssignableRole assignableRole);
|
void deleteAssignableRole(AssignableRole assignableRole);
|
||||||
|
|||||||
@@ -28,4 +28,6 @@ public interface AssignableRolePlaceManagementService {
|
|||||||
|
|
||||||
List<AssignableRolePlace> findAllByServer(AServer server);
|
List<AssignableRolePlace> findAllByServer(AServer server);
|
||||||
|
|
||||||
|
List<AssignableRolePlace> getAssignableRolePlacesWithNamesContaining(String name, AServer server);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.4.0</version>
|
<version>1.6.9-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.4.0</version>
|
<version>1.6.9-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,109 @@
|
|||||||
|
package dev.sheldan.abstracto.customcommand.command;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.command.UtilityModuleDefinition;
|
||||||
|
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.UserCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
|
import dev.sheldan.abstracto.core.utils.ContextUtils;
|
||||||
|
import dev.sheldan.abstracto.customcommand.config.CustomCommandFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.customcommand.config.CustomCommandSlashCommandNames;
|
||||||
|
import dev.sheldan.abstracto.customcommand.service.management.CustomCommandService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class CreateCustomCommand extends AbstractConditionableCommand {
|
||||||
|
|
||||||
|
private static final String CREATE_CUSTOM_COMMAND_COMMAND = "createCustomCommand";
|
||||||
|
private static final String CUSTOM_COMMAND_NAME_PARAMETER = "commandName";
|
||||||
|
private static final String CUSTOM_COMMAND_CONTENT_PARAMETER = "response";
|
||||||
|
private static final String CREATE_CUSTOM_COMMAND_RESPONSE_TEMPLATE_KEY = "createCustomCommand_response";
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandParameterService slashCommandParameterService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CustomCommandService customCommandService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private InteractionService interactionService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
|
String name = slashCommandParameterService.getCommandOption(CUSTOM_COMMAND_NAME_PARAMETER, event, String.class);
|
||||||
|
String content = slashCommandParameterService.getCommandOption(CUSTOM_COMMAND_CONTENT_PARAMETER, event, String.class);
|
||||||
|
if(ContextUtils.isUserCommand(event)) {
|
||||||
|
customCommandService.createUserCustomCommand(name, content, event.getUser());
|
||||||
|
} else {
|
||||||
|
customCommandService.createCustomCommand(name, content, event.getMember());
|
||||||
|
}
|
||||||
|
return interactionService.replyEmbed(CREATE_CUSTOM_COMMAND_RESPONSE_TEMPLATE_KEY, event)
|
||||||
|
.thenApply(interactionHook -> CommandResult.fromSuccess());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FeatureDefinition getFeature() {
|
||||||
|
return CustomCommandFeatureDefinition.CUSTOM_COMMAND;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommandConfiguration getConfiguration() {
|
||||||
|
Parameter commandNameParameter = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(CUSTOM_COMMAND_NAME_PARAMETER)
|
||||||
|
.templated(true)
|
||||||
|
.type(String.class)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Parameter commandContentParameter = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(CUSTOM_COMMAND_CONTENT_PARAMETER)
|
||||||
|
.templated(true)
|
||||||
|
.type(String.class)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
List<Parameter> parameters = Arrays.asList(commandNameParameter, commandContentParameter);
|
||||||
|
HelpInfo helpInfo = HelpInfo
|
||||||
|
.builder()
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||||
|
.builder()
|
||||||
|
.enabled(true)
|
||||||
|
.userInstallable(true)
|
||||||
|
.userCommandConfig(UserCommandConfig.all())
|
||||||
|
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
|
||||||
|
.rootCommandName(CustomCommandSlashCommandNames.CUSTOM_COMMAND)
|
||||||
|
.commandName("create")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
return CommandConfiguration.builder()
|
||||||
|
.name(CREATE_CUSTOM_COMMAND_COMMAND)
|
||||||
|
.module(UtilityModuleDefinition.UTILITY)
|
||||||
|
.templated(true)
|
||||||
|
.async(true)
|
||||||
|
.slashCommandOnly(true)
|
||||||
|
.slashCommandConfig(slashCommandConfig)
|
||||||
|
.causesReaction(true)
|
||||||
|
.supportsEmbedException(true)
|
||||||
|
.parameters(parameters)
|
||||||
|
.help(helpInfo)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,11 +5,14 @@ import dev.sheldan.abstracto.core.command.execution.UnParsedCommandParameter;
|
|||||||
import dev.sheldan.abstracto.core.command.service.CommandRegistry;
|
import dev.sheldan.abstracto.core.command.service.CommandRegistry;
|
||||||
import dev.sheldan.abstracto.core.config.ListenerPriority;
|
import dev.sheldan.abstracto.core.config.ListenerPriority;
|
||||||
import dev.sheldan.abstracto.core.service.ChannelService;
|
import dev.sheldan.abstracto.core.service.ChannelService;
|
||||||
|
import dev.sheldan.abstracto.core.service.FeatureFlagService;
|
||||||
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.customcommand.config.CustomCommandFeatureConfig;
|
||||||
import dev.sheldan.abstracto.customcommand.model.command.CustomCommandResponseModel;
|
import dev.sheldan.abstracto.customcommand.model.command.CustomCommandResponseModel;
|
||||||
import dev.sheldan.abstracto.customcommand.model.database.CustomCommand;
|
import dev.sheldan.abstracto.customcommand.model.database.CustomCommand;
|
||||||
import dev.sheldan.abstracto.customcommand.service.management.CustomCommandManagementService;
|
import dev.sheldan.abstracto.customcommand.service.management.CustomCommandManagementService;
|
||||||
|
import net.dv8tion.jda.api.entities.Guild;
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@@ -35,9 +38,23 @@ public class CustomCommandAlternative implements CommandAlternative {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private TemplateService templateService;
|
private TemplateService templateService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private FeatureFlagService featureFlagService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CustomCommandFeatureConfig customCommandFeatureConfig;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean matches(UnParsedCommandParameter parameter) {
|
public boolean shouldExecute(UnParsedCommandParameter parameter, Guild guild, Message message) {
|
||||||
return true;
|
boolean featureEnabled = featureFlagService.isFeatureEnabled(customCommandFeatureConfig, guild.getIdLong());
|
||||||
|
if(featureEnabled) {
|
||||||
|
String contentStripped = message.getContentRaw();
|
||||||
|
List<String> parameters = Arrays.asList(contentStripped.split(" "));
|
||||||
|
String commandName = commandRegistry.getCommandName(parameters.get(0), message.getGuild().getIdLong());
|
||||||
|
Optional<CustomCommand> customCommandOptional = customCommandManagementService.getCustomCommandByName(commandName, message.getGuild().getIdLong());
|
||||||
|
return customCommandOptional.isPresent();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -0,0 +1,140 @@
|
|||||||
|
package dev.sheldan.abstracto.customcommand.command;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.command.UtilityModuleDefinition;
|
||||||
|
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.UserCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandPrivilegeLevels;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AUser;
|
||||||
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
|
import dev.sheldan.abstracto.core.service.management.UserManagementService;
|
||||||
|
import dev.sheldan.abstracto.core.utils.ContextUtils;
|
||||||
|
import dev.sheldan.abstracto.customcommand.config.CustomCommandFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.customcommand.config.CustomCommandSlashCommandNames;
|
||||||
|
import dev.sheldan.abstracto.customcommand.service.management.CustomCommandManagementService;
|
||||||
|
import dev.sheldan.abstracto.customcommand.service.management.CustomCommandService;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class DeleteCustomCommand extends AbstractConditionableCommand {
|
||||||
|
|
||||||
|
private static final String DELETE_CUSTOM_COMMAND_COMMAND = "deleteCustomCommand";
|
||||||
|
private static final String DELETE_CUSTOM_COMMAND_RESPONSE_TEMPLATE_KEY = "deleteCustomCommand_response";
|
||||||
|
private static final String CUSTOM_COMMAND_NAME_PARAMETER = "commandName";
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandParameterService slashCommandParameterService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CustomCommandService customCommandService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CustomCommandManagementService customCommandManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private InteractionService interactionService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandAutoCompleteService slashCommandAutoCompleteService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserManagementService userManagementService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
|
String name = slashCommandParameterService.getCommandOption(CUSTOM_COMMAND_NAME_PARAMETER, event, String.class);
|
||||||
|
if(ContextUtils.isUserCommand(event)) {
|
||||||
|
customCommandService.deleteUserCustomCommand(name, event.getUser());
|
||||||
|
} else {
|
||||||
|
customCommandService.deleteCustomCommand(name, event.getGuild());
|
||||||
|
}
|
||||||
|
return interactionService.replyEmbed(DELETE_CUSTOM_COMMAND_RESPONSE_TEMPLATE_KEY, event)
|
||||||
|
.thenApply(interactionHook -> CommandResult.fromSuccess());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> performAutoComplete(CommandAutoCompleteInteractionEvent event) {
|
||||||
|
if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), CUSTOM_COMMAND_NAME_PARAMETER)) {
|
||||||
|
String input = event.getFocusedOption().getValue();
|
||||||
|
if(ContextUtils.isUserCommand(event)) {
|
||||||
|
AUser user = userManagementService.loadUser(event.getUser().getIdLong());
|
||||||
|
return customCommandManagementService.getUserCustomCommandsContaining(input, user)
|
||||||
|
.stream().map(customCommand -> customCommand.getName().toLowerCase())
|
||||||
|
.toList();
|
||||||
|
} else {
|
||||||
|
AServer server = serverManagementService.loadServer(event.getGuild());
|
||||||
|
return customCommandManagementService.getCustomCommandsContaining(input, server)
|
||||||
|
.stream().map(customCommand -> customCommand.getName().toLowerCase())
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommandConfiguration getConfiguration() {
|
||||||
|
Parameter commandNameParameter = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(CUSTOM_COMMAND_NAME_PARAMETER)
|
||||||
|
.templated(true)
|
||||||
|
.supportsAutoComplete(true)
|
||||||
|
.type(String.class)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
List<Parameter> parameters = Arrays.asList(commandNameParameter);
|
||||||
|
HelpInfo helpInfo = HelpInfo
|
||||||
|
.builder()
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||||
|
.builder()
|
||||||
|
.enabled(true)
|
||||||
|
.userInstallable(true)
|
||||||
|
.userCommandConfig(UserCommandConfig.all())
|
||||||
|
.defaultPrivilege(SlashCommandPrivilegeLevels.INVITER)
|
||||||
|
.rootCommandName(CustomCommandSlashCommandNames.CUSTOM_COMMAND)
|
||||||
|
.commandName("delete")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
return CommandConfiguration.builder()
|
||||||
|
.name(DELETE_CUSTOM_COMMAND_COMMAND)
|
||||||
|
.module(UtilityModuleDefinition.UTILITY)
|
||||||
|
.templated(true)
|
||||||
|
.async(true)
|
||||||
|
.slashCommandConfig(slashCommandConfig)
|
||||||
|
.causesReaction(true)
|
||||||
|
.slashCommandOnly(true)
|
||||||
|
.supportsEmbedException(true)
|
||||||
|
.parameters(parameters)
|
||||||
|
.help(helpInfo)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FeatureDefinition getFeature() {
|
||||||
|
return CustomCommandFeatureDefinition.CUSTOM_COMMAND;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,131 @@
|
|||||||
|
package dev.sheldan.abstracto.customcommand.command;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.command.UtilityModuleDefinition;
|
||||||
|
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.UserCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandAutoCompleteService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.parameter.SlashCommandParameterService;
|
||||||
|
import dev.sheldan.abstracto.core.utils.ContextUtils;
|
||||||
|
import dev.sheldan.abstracto.customcommand.config.CustomCommandFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.customcommand.config.CustomCommandSlashCommandNames;
|
||||||
|
import dev.sheldan.abstracto.customcommand.model.command.CustomCommandResponseModel;
|
||||||
|
import dev.sheldan.abstracto.customcommand.model.database.CustomCommand;
|
||||||
|
import dev.sheldan.abstracto.customcommand.service.management.CustomCommandService;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class GetCustomCommand extends AbstractConditionableCommand {
|
||||||
|
|
||||||
|
private static final String GET_CUSTOM_COMMAND_COMMAND = "getCustomCommand";
|
||||||
|
private static final String CUSTOM_COMMAND_NAME_PARAMETER = "commandName";
|
||||||
|
private static final String GET_CUSTOM_COMMAND_RESPONSE_TEMPLATE_KEY = "getCustomCommand_response";
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandParameterService slashCommandParameterService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private InteractionService interactionService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CustomCommandService customCommandService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SlashCommandAutoCompleteService slashCommandAutoCompleteService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
|
String name = slashCommandParameterService.getCommandOption(CUSTOM_COMMAND_NAME_PARAMETER, event, String.class);
|
||||||
|
CustomCommand customCommand;
|
||||||
|
if(ContextUtils.isUserCommand(event)) {
|
||||||
|
customCommand = customCommandService.getUserCustomCommand(name, event.getUser());
|
||||||
|
} else {
|
||||||
|
customCommand = customCommandService.getCustomCommand(name, event.getGuild());
|
||||||
|
}
|
||||||
|
CustomCommandResponseModel model = CustomCommandResponseModel
|
||||||
|
.builder()
|
||||||
|
.additionalText(customCommand.getAdditionalMessage())
|
||||||
|
.build();
|
||||||
|
return interactionService.replyEmbed(GET_CUSTOM_COMMAND_RESPONSE_TEMPLATE_KEY, model, event)
|
||||||
|
.thenApply(interactionHook -> CommandResult.fromSuccess());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> performAutoComplete(CommandAutoCompleteInteractionEvent event) {
|
||||||
|
if(slashCommandAutoCompleteService.matchesParameter(event.getFocusedOption(), CUSTOM_COMMAND_NAME_PARAMETER)) {
|
||||||
|
String input = event.getFocusedOption().getValue();
|
||||||
|
if(ContextUtils.isNotUserCommand(event)) {
|
||||||
|
return customCommandService.getCustomCommandsContaining(input, event.getGuild())
|
||||||
|
.stream()
|
||||||
|
.map(CustomCommand::getName)
|
||||||
|
.toList();
|
||||||
|
} else {
|
||||||
|
return customCommandService.getUserCustomCommandsContaining(input, event.getUser())
|
||||||
|
.stream()
|
||||||
|
.map(CustomCommand::getName)
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FeatureDefinition getFeature() {
|
||||||
|
return CustomCommandFeatureDefinition.CUSTOM_COMMAND;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommandConfiguration getConfiguration() {
|
||||||
|
Parameter commandNameParameter = Parameter
|
||||||
|
.builder()
|
||||||
|
.name(CUSTOM_COMMAND_NAME_PARAMETER)
|
||||||
|
.templated(true)
|
||||||
|
.supportsAutoComplete(true)
|
||||||
|
.type(String.class)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
List<Parameter> parameters = Arrays.asList(commandNameParameter);
|
||||||
|
HelpInfo helpInfo = HelpInfo
|
||||||
|
.builder()
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||||
|
.builder()
|
||||||
|
.enabled(true)
|
||||||
|
.userInstallable(true)
|
||||||
|
.userCommandConfig(UserCommandConfig.all())
|
||||||
|
.rootCommandName(CustomCommandSlashCommandNames.CUSTOM_COMMAND_PUBLIC)
|
||||||
|
.userRootCommandName(CustomCommandSlashCommandNames.CUSTOM_COMMAND)
|
||||||
|
.commandName("get")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
return CommandConfiguration.builder()
|
||||||
|
.name(GET_CUSTOM_COMMAND_COMMAND)
|
||||||
|
.module(UtilityModuleDefinition.UTILITY)
|
||||||
|
.templated(true)
|
||||||
|
.async(true)
|
||||||
|
.slashCommandOnly(true)
|
||||||
|
.slashCommandConfig(slashCommandConfig)
|
||||||
|
.causesReaction(true)
|
||||||
|
.supportsEmbedException(true)
|
||||||
|
.parameters(parameters)
|
||||||
|
.help(helpInfo)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
package dev.sheldan.abstracto.customcommand.command;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.command.UtilityModuleDefinition;
|
||||||
|
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
||||||
|
import dev.sheldan.abstracto.core.command.config.UserCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
|
import dev.sheldan.abstracto.core.config.FeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.InteractionService;
|
||||||
|
import dev.sheldan.abstracto.core.interaction.slash.SlashCommandConfig;
|
||||||
|
import dev.sheldan.abstracto.core.service.PaginatorService;
|
||||||
|
import dev.sheldan.abstracto.core.utils.ContextUtils;
|
||||||
|
import dev.sheldan.abstracto.customcommand.config.CustomCommandFeatureDefinition;
|
||||||
|
import dev.sheldan.abstracto.customcommand.config.CustomCommandSlashCommandNames;
|
||||||
|
import dev.sheldan.abstracto.customcommand.model.command.ListCustomCommandsResponseModel;
|
||||||
|
import dev.sheldan.abstracto.customcommand.model.database.CustomCommand;
|
||||||
|
import dev.sheldan.abstracto.customcommand.service.management.CustomCommandService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class ListCustomCommands extends AbstractConditionableCommand {
|
||||||
|
|
||||||
|
private static final String CREATE_CUSTOM_COMMAND_COMMAND = "listCustomCommands";
|
||||||
|
private static final String LIST_CUSTOM_COMMANDS_TEMPLATE_KEY = "listCustomCommands_response";
|
||||||
|
private static final String NO_CUSTOM_COMMANDS_TEMPLATE_KEY = "listCustomCommands_no_commands_response";
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CustomCommandService customCommandService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private InteractionService interactionService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PaginatorService paginatorService;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<CommandResult> executeSlash(SlashCommandInteractionEvent event) {
|
||||||
|
List<CustomCommand> customCommands;
|
||||||
|
if(ContextUtils.isUserCommand(event)) {
|
||||||
|
customCommands = customCommandService.getUserCustomCommands(event.getUser());
|
||||||
|
} else {
|
||||||
|
customCommands = customCommandService.getCustomCommands(event.getGuild());
|
||||||
|
}
|
||||||
|
if(customCommands.isEmpty()) {
|
||||||
|
return interactionService.replyEmbed(NO_CUSTOM_COMMANDS_TEMPLATE_KEY, event)
|
||||||
|
.thenApply(interactionHook -> CommandResult.fromSuccess());
|
||||||
|
}
|
||||||
|
ListCustomCommandsResponseModel model = ListCustomCommandsResponseModel.fromCommands(customCommands);
|
||||||
|
return paginatorService.createPaginatorFromTemplate(LIST_CUSTOM_COMMANDS_TEMPLATE_KEY, model, event)
|
||||||
|
.thenApply(unused -> CommandResult.fromSuccess());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FeatureDefinition getFeature() {
|
||||||
|
return CustomCommandFeatureDefinition.CUSTOM_COMMAND;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommandConfiguration getConfiguration() {
|
||||||
|
HelpInfo helpInfo = HelpInfo
|
||||||
|
.builder()
|
||||||
|
.templated(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
SlashCommandConfig slashCommandConfig = SlashCommandConfig
|
||||||
|
.builder()
|
||||||
|
.enabled(true)
|
||||||
|
.userInstallable(true)
|
||||||
|
.userCommandConfig(UserCommandConfig.all())
|
||||||
|
.rootCommandName(CustomCommandSlashCommandNames.CUSTOM_COMMAND_PUBLIC)
|
||||||
|
.userRootCommandName(CustomCommandSlashCommandNames.CUSTOM_COMMAND)
|
||||||
|
.commandName("list")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
return CommandConfiguration.builder()
|
||||||
|
.name(CREATE_CUSTOM_COMMAND_COMMAND)
|
||||||
|
.module(UtilityModuleDefinition.UTILITY)
|
||||||
|
.templated(true)
|
||||||
|
.async(true)
|
||||||
|
.slashCommandOnly(true)
|
||||||
|
.slashCommandConfig(slashCommandConfig)
|
||||||
|
.causesReaction(true)
|
||||||
|
.supportsEmbedException(true)
|
||||||
|
.help(helpInfo)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,13 +1,25 @@
|
|||||||
package dev.sheldan.abstracto.customcommand.repository;
|
package dev.sheldan.abstracto.customcommand.repository;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AUser;
|
||||||
import dev.sheldan.abstracto.customcommand.model.database.CustomCommand;
|
import dev.sheldan.abstracto.customcommand.model.database.CustomCommand;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface CustomCommandRepository extends JpaRepository<CustomCommand, Long> {
|
public interface CustomCommandRepository extends JpaRepository<CustomCommand, Long> {
|
||||||
Optional<CustomCommand> getByNameAndServer(String name, AServer server);
|
Optional<CustomCommand> getByNameIgnoreCaseAndServer(String name, AServer server);
|
||||||
|
Optional<CustomCommand> getByNameIgnoreCaseAndCreatorUser(String name, AUser creator);
|
||||||
|
Optional<CustomCommand> getByNameIgnoreCaseAndCreatorUser_IdAndUserSpecific(String name, Long userId, Boolean userSpecific);
|
||||||
|
void deleteByNameAndServer(String name, AServer server);
|
||||||
|
void deleteByNameAndCreatorUserAndUserSpecific(String name, AUser aUser, Boolean userSpecific);
|
||||||
|
List<CustomCommand> findByServer(AServer server);
|
||||||
|
List<CustomCommand> findByCreatorUserAndUserSpecific(AUser user, Boolean userSpecific);
|
||||||
|
List<CustomCommand> findByNameStartsWithIgnoreCaseAndServer(String prefix, AServer server);
|
||||||
|
List<CustomCommand> findByNameStartsWithIgnoreCaseAndCreatorUserAndUserSpecific(String prefix, AUser aUser, Boolean userSpecific);
|
||||||
|
List<CustomCommand> findByNameContainingIgnoreCaseAndServer(String name, AServer server);
|
||||||
|
List<CustomCommand> findByNameContainingIgnoreCaseAndCreatorUserAndUserSpecific(String name, AUser user, Boolean userSpecific);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,108 @@
|
|||||||
|
package dev.sheldan.abstracto.customcommand.service;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AUser;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
|
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||||
|
import dev.sheldan.abstracto.core.service.management.UserManagementService;
|
||||||
|
import dev.sheldan.abstracto.customcommand.exception.CustomCommandExistsException;
|
||||||
|
import dev.sheldan.abstracto.customcommand.exception.CustomCommandNotFoundException;
|
||||||
|
import dev.sheldan.abstracto.customcommand.model.database.CustomCommand;
|
||||||
|
import dev.sheldan.abstracto.customcommand.service.management.CustomCommandManagementService;
|
||||||
|
import dev.sheldan.abstracto.customcommand.service.management.CustomCommandService;
|
||||||
|
import net.dv8tion.jda.api.entities.Guild;
|
||||||
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
|
import net.dv8tion.jda.api.entities.User;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class CustomCommandServiceBean implements CustomCommandService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserInServerManagementService userInServerManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CustomCommandManagementService customCommandManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ServerManagementService serverManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserManagementService userManagementService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CustomCommand createCustomCommand(String name, String content, Member creator) {
|
||||||
|
if(customCommandManagementService.getCustomCommandByName(name, creator.getGuild().getIdLong()).isPresent()) {
|
||||||
|
throw new CustomCommandExistsException();
|
||||||
|
}
|
||||||
|
AUserInAServer creatorUser = userInServerManagementService.loadOrCreateUser(creator);
|
||||||
|
return customCommandManagementService.createCustomCommand(name, content, creatorUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CustomCommand createUserCustomCommand(String name, String content, User user) {
|
||||||
|
AUser aUser = userManagementService.loadOrCreateUser(user.getIdLong());
|
||||||
|
if(customCommandManagementService.getUserCustomCommandByName(name, aUser).isPresent()) {
|
||||||
|
throw new CustomCommandExistsException();
|
||||||
|
}
|
||||||
|
return customCommandManagementService.createUserCustomCommand(name, content, aUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteCustomCommand(String name, Guild guild) {
|
||||||
|
if(customCommandManagementService.getCustomCommandByName(name, guild.getIdLong()).isEmpty()) {
|
||||||
|
throw new CustomCommandNotFoundException();
|
||||||
|
}
|
||||||
|
AServer server = serverManagementService.loadServer(guild);
|
||||||
|
customCommandManagementService.deleteCustomCommand(name, server);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteUserCustomCommand(String name, User user) {
|
||||||
|
if(customCommandManagementService.getUserCustomCommandByName(name, user.getIdLong()).isEmpty()) {
|
||||||
|
throw new CustomCommandNotFoundException();
|
||||||
|
}
|
||||||
|
AUser aUser = userManagementService.loadOrCreateUser(user.getIdLong());
|
||||||
|
customCommandManagementService.deleteCustomCommand(name, aUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CustomCommand> getCustomCommands(Guild guild) {
|
||||||
|
AServer server = serverManagementService.loadServer(guild);
|
||||||
|
return customCommandManagementService.getCustomCommands(server);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CustomCommand> getUserCustomCommands(User user) {
|
||||||
|
AUser aUser = userManagementService.loadOrCreateUser(user.getIdLong());
|
||||||
|
return customCommandManagementService.getUserCustomCommands(aUser);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CustomCommand getCustomCommand(String name, Guild guild) {
|
||||||
|
return customCommandManagementService.getCustomCommandByName(name, guild.getIdLong())
|
||||||
|
.orElseThrow(CustomCommandNotFoundException::new);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CustomCommand getUserCustomCommand(String name, User user) {
|
||||||
|
return customCommandManagementService.getUserCustomCommandByName(name, user.getIdLong())
|
||||||
|
.orElseThrow(CustomCommandNotFoundException::new);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CustomCommand> getCustomCommandsContaining(String name, Guild guild) {
|
||||||
|
AServer server = serverManagementService.loadServer(guild);
|
||||||
|
return customCommandManagementService.getCustomCommandsContaining(name, server);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CustomCommand> getUserCustomCommandsContaining(String name, User user) {
|
||||||
|
AUser aUser = userManagementService.loadOrCreateUser(user.getIdLong());
|
||||||
|
return customCommandManagementService.getUserCustomCommandsContaining(name, aUser);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +1,15 @@
|
|||||||
package dev.sheldan.abstracto.customcommand.service.management;
|
package dev.sheldan.abstracto.customcommand.service.management;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.core.models.database.AServer;
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AUser;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
||||||
import dev.sheldan.abstracto.customcommand.model.database.CustomCommand;
|
import dev.sheldan.abstracto.customcommand.model.database.CustomCommand;
|
||||||
import dev.sheldan.abstracto.customcommand.repository.CustomCommandRepository;
|
import dev.sheldan.abstracto.customcommand.repository.CustomCommandRepository;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@@ -21,6 +24,73 @@ public class CustomCommandManagementServiceBean implements CustomCommandManageme
|
|||||||
@Override
|
@Override
|
||||||
public Optional<CustomCommand> getCustomCommandByName(String name, Long serverId) {
|
public Optional<CustomCommand> getCustomCommandByName(String name, Long serverId) {
|
||||||
AServer server = serverManagementService.loadServer(serverId);
|
AServer server = serverManagementService.loadServer(serverId);
|
||||||
return repository.getByNameAndServer(name, server);
|
return repository.getByNameIgnoreCaseAndServer(name, server);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<CustomCommand> getUserCustomCommandByName(String name, AUser user) {
|
||||||
|
return repository.getByNameIgnoreCaseAndCreatorUser(name, user);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<CustomCommand> getUserCustomCommandByName(String name, Long userId) {
|
||||||
|
return repository.getByNameIgnoreCaseAndCreatorUser_IdAndUserSpecific(name, userId, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CustomCommand createCustomCommand(String name, String content, AUserInAServer creator) {
|
||||||
|
CustomCommand customCommand = CustomCommand
|
||||||
|
.builder()
|
||||||
|
.name(name)
|
||||||
|
.additionalMessage(content)
|
||||||
|
.server(creator.getServerReference())
|
||||||
|
.creator(creator)
|
||||||
|
.userSpecific(false)
|
||||||
|
.creatorUser(creator.getUserReference())
|
||||||
|
.build();
|
||||||
|
return repository.save(customCommand);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CustomCommand createUserCustomCommand(String name, String content, AUser user) {
|
||||||
|
CustomCommand customCommand = CustomCommand
|
||||||
|
.builder()
|
||||||
|
.name(name)
|
||||||
|
.additionalMessage(content)
|
||||||
|
.creatorUser(user)
|
||||||
|
.userSpecific(true)
|
||||||
|
.build();
|
||||||
|
return repository.save(customCommand);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteCustomCommand(String name, AServer server) {
|
||||||
|
repository.deleteByNameAndServer(name, server);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteCustomCommand(String name, AUser user) {
|
||||||
|
repository.deleteByNameAndCreatorUserAndUserSpecific(name, user, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CustomCommand> getCustomCommands(AServer server) {
|
||||||
|
return repository.findByServer(server);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CustomCommand> getUserCustomCommands(AUser aUser) {
|
||||||
|
return repository.findByCreatorUserAndUserSpecific(aUser, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CustomCommand> getCustomCommandsContaining(String name, AServer server) {
|
||||||
|
return repository.findByNameContainingIgnoreCaseAndServer(name, server);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CustomCommand> getUserCustomCommandsContaining(String prefix, AUser aUser) {
|
||||||
|
return repository.findByNameContainingIgnoreCaseAndCreatorUserAndUserSpecific(prefix, aUser, true);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<include file="tables/tables.xml" relativeToChangelogFile="true"/>
|
<include file="tables/tables.xml" relativeToChangelogFile="true"/>
|
||||||
<include file="seedData/data.xml" relativeToChangelogFile="true"/>
|
<include file="seedData/data.xml" relativeToChangelogFile="true"/>
|
||||||
</databaseChangeLog>
|
</databaseChangeLog>
|
||||||
@@ -1,10 +1,6 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<include file="feature.xml" relativeToChangelogFile="true"/>
|
<include file="feature.xml" relativeToChangelogFile="true"/>
|
||||||
</databaseChangeLog>
|
</databaseChangeLog>
|
||||||
@@ -1,11 +1,7 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<changeSet author="Sheldan" id="custom_command-feature-insertion">
|
<changeSet author="Sheldan" id="custom_command-feature-insertion">
|
||||||
<insert tableName="feature">
|
<insert tableName="feature">
|
||||||
<column name="key" value="customCommand"/>
|
<column name="key" value="customCommand"/>
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<changeSet author="Sheldan" id="custom_command-table">
|
<changeSet author="Sheldan" id="custom_command-table">
|
||||||
<createTable tableName="custom_command">
|
<createTable tableName="custom_command">
|
||||||
<column name="id" type="BIGINT">
|
<column name="id" type="BIGINT">
|
||||||
|
|||||||
@@ -1,10 +1,6 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<include file="custom_command.xml" relativeToChangelogFile="true"/>
|
<include file="custom_command.xml" relativeToChangelogFile="true"/>
|
||||||
</databaseChangeLog>
|
</databaseChangeLog>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
|
<include file="tables/tables.xml" relativeToChangelogFile="true"/>
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
|
<changeSet author="Sheldan" id="custom_command-add_user_installable_support">
|
||||||
|
<addColumn tableName="custom_command">
|
||||||
|
<column name="creator_id" type="BIGINT">
|
||||||
|
<constraints nullable="true"/>
|
||||||
|
</column>
|
||||||
|
<column name="user_specific" type="BOOLEAN" value="false">
|
||||||
|
<constraints nullable="false"/>
|
||||||
|
</column>
|
||||||
|
</addColumn>
|
||||||
|
<sql>
|
||||||
|
update custom_command set creator_id = (select ua.user_id from user_in_server ua where ua.user_in_server_id = creator_user_in_server_id order by ua.server_id limit 1)
|
||||||
|
</sql>
|
||||||
|
<addNotNullConstraint columnName="creator_id"
|
||||||
|
tableName="custom_command"
|
||||||
|
validate="true"/>
|
||||||
|
<sql>
|
||||||
|
ALTER TABLE custom_command ALTER COLUMN server_id DROP NOT NULL;
|
||||||
|
ALTER TABLE custom_command ALTER COLUMN creator_user_in_server_id DROP NOT NULL;
|
||||||
|
</sql>
|
||||||
|
</changeSet>
|
||||||
|
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
|
<include file="custom_command.xml" relativeToChangelogFile="true"/>
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
|
<include file="seedData/data.xml" relativeToChangelogFile="true"/>
|
||||||
|
<include file="tables/tables.xml" relativeToChangelogFile="true"/>
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
|
<property name="utilityModule" value="(SELECT id FROM module WHERE name = 'utility')"/>
|
||||||
|
<property name="customCommandFeature" value="(SELECT id FROM feature WHERE key = 'customCommand')"/>
|
||||||
|
|
||||||
|
<changeSet author="Sheldan" id="customCommand-commands">
|
||||||
|
<insert tableName="command">
|
||||||
|
<column name="name" value="createCustomCommand"/>
|
||||||
|
<column name="module_id" valueComputed="${utilityModule}"/>
|
||||||
|
<column name="feature_id" valueComputed="${customCommandFeature}"/>
|
||||||
|
</insert>
|
||||||
|
<insert tableName="command">
|
||||||
|
<column name="name" value="deleteCustomCommand"/>
|
||||||
|
<column name="module_id" valueComputed="${utilityModule}"/>
|
||||||
|
<column name="feature_id" valueComputed="${customCommandFeature}"/>
|
||||||
|
</insert>
|
||||||
|
<insert tableName="command">
|
||||||
|
<column name="name" value="getCustomCommand"/>
|
||||||
|
<column name="module_id" valueComputed="${utilityModule}"/>
|
||||||
|
<column name="feature_id" valueComputed="${customCommandFeature}"/>
|
||||||
|
</insert>
|
||||||
|
<insert tableName="command">
|
||||||
|
<column name="name" value="listCustomCommands"/>
|
||||||
|
<column name="module_id" valueComputed="${utilityModule}"/>
|
||||||
|
<column name="feature_id" valueComputed="${customCommandFeature}"/>
|
||||||
|
</insert>
|
||||||
|
</changeSet>
|
||||||
|
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
|
<include file="command.xml" relativeToChangelogFile="true"/>
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
|
<changeSet author="Sheldan" id="custom_command-add_auto_increment">
|
||||||
|
<sql>
|
||||||
|
create sequence custom_command_id_seq;
|
||||||
|
alter table custom_command alter id set default nextval('custom_command_id_seq');
|
||||||
|
</sql>
|
||||||
|
</changeSet>
|
||||||
|
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
|
<include file="custom_command.xml" relativeToChangelogFile="true"/>
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -1,10 +1,8 @@
|
|||||||
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.26.xsd" >
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
|
||||||
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
|
||||||
<include file="1.4.0/collection.xml" relativeToChangelogFile="true"/>
|
<include file="1.4.0/collection.xml" relativeToChangelogFile="true"/>
|
||||||
|
<include file="1.5.8/collection.xml" relativeToChangelogFile="true"/>
|
||||||
|
<include file="1.5.37/collection.xml" relativeToChangelogFile="true"/>
|
||||||
</databaseChangeLog>
|
</databaseChangeLog>
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -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.4.0</version>
|
<version>1.6.9-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package dev.sheldan.abstracto.customcommand.config;
|
||||||
|
|
||||||
|
public class CustomCommandSlashCommandNames {
|
||||||
|
public static final String CUSTOM_COMMAND = "cc";
|
||||||
|
public static final String CUSTOM_COMMAND_PUBLIC = "customCommands";
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package dev.sheldan.abstracto.customcommand.exception;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.exception.AbstractoTemplatableException;
|
||||||
|
|
||||||
|
public class CustomCommandExistsException extends AbstractoTemplatableException {
|
||||||
|
@Override
|
||||||
|
public String getTemplateName() {
|
||||||
|
return "custom_command_exists_exception";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getTemplateModel() {
|
||||||
|
return new Object();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package dev.sheldan.abstracto.customcommand.exception;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.exception.AbstractoTemplatableException;
|
||||||
|
|
||||||
|
public class CustomCommandNotFoundException extends AbstractoTemplatableException {
|
||||||
|
@Override
|
||||||
|
public String getTemplateName() {
|
||||||
|
return "custom_command_not_found_exception";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getTemplateModel() {
|
||||||
|
return new Object();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package dev.sheldan.abstracto.customcommand.model.command;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.models.template.display.MemberDisplay;
|
||||||
|
import dev.sheldan.abstracto.customcommand.model.database.CustomCommand;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Builder
|
||||||
|
public class ListCustomCommandModel {
|
||||||
|
private String name;
|
||||||
|
private String content;
|
||||||
|
private MemberDisplay creator;
|
||||||
|
|
||||||
|
public static ListCustomCommandModel fromCustomCommand(CustomCommand customCommand) {
|
||||||
|
MemberDisplay creatorObj;
|
||||||
|
if(customCommand.getUserSpecific()) {
|
||||||
|
creatorObj = MemberDisplay.fromAUser(customCommand.getCreatorUser());
|
||||||
|
} else {
|
||||||
|
creatorObj = MemberDisplay.fromAUserInAServer(customCommand.getCreator());
|
||||||
|
}
|
||||||
|
|
||||||
|
return ListCustomCommandModel
|
||||||
|
.builder()
|
||||||
|
.name(customCommand.getName())
|
||||||
|
.content(customCommand.getAdditionalMessage())
|
||||||
|
.creator(creatorObj)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package dev.sheldan.abstracto.customcommand.model.command;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.customcommand.model.database.CustomCommand;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Builder
|
||||||
|
@Getter
|
||||||
|
public class ListCustomCommandsResponseModel {
|
||||||
|
private List<ListCustomCommandModel> customCommands;
|
||||||
|
|
||||||
|
public static ListCustomCommandsResponseModel fromCommands(List<CustomCommand> customCommands) {
|
||||||
|
return ListCustomCommandsResponseModel
|
||||||
|
.builder()
|
||||||
|
.customCommands(customCommands
|
||||||
|
.stream()
|
||||||
|
.map(ListCustomCommandModel::fromCustomCommand)
|
||||||
|
.collect(Collectors.toList()))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user