Compare commits

...

176 Commits
2.0.0 ... 7.2.0

Author SHA1 Message Date
0e65a425c3 Update CHANGELOG.md 2023-09-26 00:57:08 +06:00
517ab1e1a4 Update libs.versions.toml 2023-09-26 00:56:20 +06:00
977cf32669 update dependencies 2023-09-26 00:21:31 +06:00
5bd1916fb5 start 7.2.0 2023-09-26 00:11:41 +06:00
8c22b418f8 Merge pull request #82 from InsanusMokrassar/7.1.0
7.1.0
2023-08-20 14:41:16 +06:00
3663f987bc update dependencies 2023-08-20 14:38:05 +06:00
93d15af80d start 7.1.0 2023-08-20 14:35:29 +06:00
27c5f379a4 Merge pull request #81 from InsanusMokrassar/7.0.0
7.0.0
2023-07-01 16:20:14 +06:00
ae7a7b84ac fill changelog 2023-07-01 16:01:25 +06:00
5b98aef237 update dependencies 2023-07-01 15:52:08 +06:00
3755972394 start 7.0.0 2023-07-01 15:50:20 +06:00
5d5312c66f Merge pull request #80 from InsanusMokrassar/6.1.0
6.1.0
2023-06-19 23:27:16 +06:00
f79fef3dae update dependencies 2023-06-19 22:53:17 +06:00
2c8dc80eae start 6.1.0 2023-06-19 22:28:52 +06:00
a2a2fe7ef4 Merge pull request #79 from InsanusMokrassar/6.0.1
6.0.1
2023-06-03 21:36:06 +06:00
34cadab809 Update CHANGELOG.md 2023-06-03 01:06:41 +06:00
784e041519 Update libs.versions.toml 2023-06-03 01:01:57 +06:00
4784f05c8e Update gradle.properties 2023-06-03 01:00:18 +06:00
e89b0a6ba2 Merge pull request #78 from InsanusMokrassar/6.0.0
6.0.0
2023-05-31 07:11:04 +06:00
b48d278446 Update CHANGELOG.md 2023-05-31 07:09:31 +06:00
072a64362d Update libs.versions.toml 2023-05-31 07:09:05 +06:00
7715f519e3 update dependencies 2023-05-28 20:54:39 +06:00
7982f27217 start 6.0.0 2023-05-28 20:53:32 +06:00
eeb3ae1dbe Merge pull request #77 from InsanusMokrassar/5.1.3
5.1.3
2023-05-20 12:43:54 +06:00
8a73fda6fa Update libs.versions.toml 2023-05-20 01:35:52 +06:00
05e94249af Update CHANGELOG.md 2023-05-20 01:35:36 +06:00
74c36c66f1 Update libs.versions.toml 2023-05-20 01:34:26 +06:00
5153f732ce start 5.1.3 2023-05-20 01:33:49 +06:00
fb23e9be79 Merge pull request #76 from InsanusMokrassar/5.1.2
5.1.2
2023-05-06 13:53:17 +06:00
292640b465 update dependencies 2023-05-06 13:32:05 +06:00
a863d91bab start 5.1.2 2023-05-06 13:31:15 +06:00
d1064bb9cd Merge pull request #75 from InsanusMokrassar/5.1.1
5.1.1
2023-05-02 10:13:37 +06:00
a9c3b937e7 Update CHANGELOG.md 2023-05-02 10:12:52 +06:00
6757354652 Update libs.versions.toml 2023-05-02 01:52:23 +06:00
c65efb6ffb Update gradle.properties 2023-05-02 01:51:11 +06:00
f9cc279854 Merge pull request #74 from InsanusMokrassar/5.1.0
5.1.0
2023-04-22 21:29:28 +06:00
b2d00cb5ae Update CHANGELOG.md 2023-04-22 21:24:18 +06:00
782721751a Update libs.versions.toml 2023-04-22 21:12:16 +06:00
01086766ba Update gradle.properties 2023-04-22 21:10:47 +06:00
bf0a6ab659 Merge pull request #73 from InsanusMokrassar/5.0.2
5.0.2
2023-04-20 00:20:43 +06:00
a3e6f8a6b5 update dependencies 2023-04-20 00:18:24 +06:00
cd9ba5dc19 start 5.0.2 2023-04-20 00:15:37 +06:00
8e0d35a80d Merge pull request #72 from InsanusMokrassar/5.0.1
5.0.1
2023-03-16 20:29:57 +06:00
a49fb60555 Update CHANGELOG.md 2023-03-16 19:56:01 +06:00
ec26179d2a Update libs.versions.toml 2023-03-16 19:55:28 +06:00
daed26cba6 Update gradle.properties 2023-03-16 19:54:56 +06:00
7c820b70ac Merge pull request #71 from InsanusMokrassar/5.0.0
5.0.0
2023-03-12 00:07:27 +06:00
edb15f11db Update CHANGELOG.md 2023-03-12 00:06:55 +06:00
18000429b0 Update libs.versions.toml 2023-03-11 23:58:27 +06:00
d975e61966 start 2023-03-11 23:56:26 +06:00
663e00cad6 Merge pull request #70 from InsanusMokrassar/4.1.0
4.1.0
2023-03-08 22:27:47 +06:00
6725193545 Update CHANGELOG.md 2023-03-08 22:26:50 +06:00
ccfd91b1ac Update libs.versions.toml 2023-03-08 17:17:36 +06:00
c8b69d641f start 4.1.0 2023-03-08 17:16:31 +06:00
7af11fc427 Merge pull request #69 from InsanusMokrassar/4.0.3
4.0.3
2023-03-02 23:48:27 +06:00
59b91fc1ff Update CHANGELOG.md 2023-03-02 22:03:01 +06:00
4293096ed2 Update libs.versions.toml 2023-03-02 22:02:22 +06:00
42dd98426c start 4.0.3 2023-03-02 22:01:45 +06:00
744520c73f Merge pull request #68 from InsanusMokrassar/4.0.2
4.0.2
2023-03-01 15:45:17 +06:00
1b8ae09866 Update CHANGELOG.md 2023-03-01 15:36:55 +06:00
3027e39665 Update libs.versions.toml 2023-03-01 15:35:32 +06:00
b77fe446f8 start 4.0.2 2023-03-01 15:34:46 +06:00
bc11d7508f Merge pull request #67 from InsanusMokrassar/4.0.1
4.0.1
2023-02-28 21:08:39 +06:00
cd9af3c216 Update CHANGELOG.md 2023-02-28 20:05:35 +06:00
c60face0e6 Update libs.versions.toml 2023-02-28 20:01:47 +06:00
334ca1a184 start 4.0.1 2023-02-28 20:00:54 +06:00
b7bb6f10a9 Merge pull request #66 from InsanusMokrassar/4.0.0
4.0.0
2023-02-28 13:56:58 +06:00
7b14343cc5 update gradle wrapper 2023-02-28 11:41:29 +06:00
62c1f87e95 Update libs.versions.toml 2023-02-27 23:49:19 +06:00
317f15bbb8 start 4.0.0 2023-02-27 23:47:53 +06:00
34c0c05715 Merge pull request #65 from InsanusMokrassar/3.5.0
3.5.0
2023-02-17 15:58:32 +06:00
d23bde75b5 update dependencies 2023-02-17 14:08:36 +06:00
46e48efe52 start 3.5.0 2023-02-17 14:07:28 +06:00
1bf59c20d4 Merge pull request #64 from InsanusMokrassar/3.4.1
3.4.1
2023-02-12 01:35:21 +06:00
3592a5907c setupBotPlugin now works synchronously 2023-02-12 01:29:45 +06:00
328a8b215c start 3.4.1 2023-02-12 01:28:35 +06:00
57ba6411e4 Merge pull request #63 from InsanusMokrassar/3.4.0
3.4.0
2023-02-06 15:27:10 +06:00
4d53d2dc63 update dependencies 2023-02-06 14:12:23 +06:00
2671794f22 start 3.4.0 2023-02-06 14:10:34 +06:00
9eff09ca68 Merge pull request #62 from InsanusMokrassar/3.3.1
3.3.1
2023-01-19 00:23:12 +06:00
7f1d972105 Update CHANGELOG.md 2023-01-19 00:22:25 +06:00
d05413a54e Update libs.versions.toml 2023-01-19 00:15:29 +06:00
2342bd9a38 Update gradle.properties 2023-01-19 00:02:22 +06:00
c9a6df5614 Merge pull request #61 from InsanusMokrassar/3.3.0
3.3.0
2023-01-01 02:28:52 +06:00
295f1ce7ab Update CHANGELOG.md 2023-01-01 02:27:56 +06:00
4ca97546b5 Update libs.versions.toml 2023-01-01 02:26:42 +06:00
166dc4b729 Update gradle.properties 2023-01-01 02:25:30 +06:00
f09929648e Merge pull request #60 from InsanusMokrassar/3.2.3
3.2.3
2022-12-28 12:41:51 +06:00
7d906e0c9c Update CHANGELOG.md 2022-12-28 09:27:55 +06:00
dc32a4eb7f Update libs.versions.toml 2022-12-28 09:27:38 +06:00
5b5f95e0ec start 3.2.3 2022-12-28 09:27:04 +06:00
a0fd9012d2 Merge pull request #59 from InsanusMokrassar/3.2.2
3.2.2
2022-12-20 09:19:12 +06:00
14910ed568 Update CHANGELOG.md 2022-12-20 09:18:51 +06:00
ccc936f821 Update libs.versions.toml 2022-12-20 09:15:56 +06:00
877e693eb3 start 3.2.2 2022-12-20 09:13:35 +06:00
9f3634f2ec Merge pull request #58 from InsanusMokrassar/3.2.1
3.2.1
2022-12-08 11:05:38 +06:00
08d905805a Update CHANGELOG.md 2022-12-08 10:47:08 +06:00
92cf2167cd Update libs.versions.toml 2022-12-08 10:46:17 +06:00
3d6a208aa8 Update gradle.properties 2022-12-08 10:45:10 +06:00
6e61f364da Merge pull request #57 from InsanusMokrassar/3.2.0
3.2.0
2022-12-05 16:31:11 +06:00
399fcb8466 update dependencies 2022-12-05 15:45:55 +06:00
477d83e31b start 3.2.0 2022-12-05 15:31:19 +06:00
e761f84023 Merge pull request #56 from InsanusMokrassar/3.1.4
3.1.4
2022-11-28 18:12:36 +06:00
caca21fac9 Update CHANGELOG.md 2022-11-28 16:30:45 +06:00
4f2934fbae Update libs.versions.toml 2022-11-28 16:29:59 +06:00
8c3c52c92b Update gradle.properties 2022-11-28 16:29:11 +06:00
779b56394a Merge pull request #55 from InsanusMokrassar/3.1.3
3.1.3
2022-11-17 13:17:49 +06:00
3b11cdc2c6 update tgbotapi 2022-11-17 13:01:08 +06:00
1a823cda6f add own repo 2022-11-17 13:00:19 +06:00
6a29264caf start 3.1.3 2022-11-17 12:59:39 +06:00
4d32de8c2f add gitea publication 2022-11-17 11:29:02 +06:00
f7cce657a8 Merge pull request #54 from InsanusMokrassar/3.1.2
3.1.2
2022-11-15 17:31:44 +06:00
a4ca827a5c Update CHANGELOG.md 2022-11-15 11:28:43 +06:00
224107e35e Update libs.versions.toml 2022-11-15 09:58:30 +06:00
9efebd027d Update gradle.properties 2022-11-15 09:57:22 +06:00
841156e8b5 Merge pull request #53 from InsanusMokrassar/3.1.1
3.1.1
2022-11-15 02:16:21 +06:00
ab4d06a44c Update CHANGELOG.md 2022-11-15 02:15:06 +06:00
0766bf7d76 Update libs.versions.toml 2022-11-15 00:17:22 +06:00
f7c7e338e2 Update gradle.properties 2022-11-15 00:15:56 +06:00
6a4fed07ee Merge pull request #52 from InsanusMokrassar/3.1.0
3.1.0
2022-11-10 20:57:02 +06:00
88f5fbfd18 Update HelloPlugin.kt 2022-11-10 20:54:34 +06:00
f644817c04 Update HelloPlugin.kt 2022-11-10 20:53:12 +06:00
8a8eb3c3b7 Update CHANGELOG.md 2022-11-10 20:28:26 +06:00
8cb68495c9 Update libs.versions.toml 2022-11-10 20:26:28 +06:00
6f2c922edf start 3.1.0 2022-11-10 20:23:23 +06:00
5895335031 Merge pull request #51 from InsanusMokrassar/3.0.0
3.0.0
2022-11-09 01:14:24 +06:00
5f25250bcc Update CHANGELOG.md 2022-11-09 01:12:55 +06:00
f0d2a6d39d Update libs.versions.toml 2022-11-09 00:47:23 +06:00
3e4dc1fdb0 Update gradle.properties 2022-11-09 00:45:08 +06:00
55012eacec Merge pull request #50 from InsanusMokrassar/2.4.1
2.4.1
2022-11-03 12:41:13 +06:00
c64314fa11 update changelog 2022-11-03 12:24:42 +06:00
f0b7ae7325 update dependencies 2022-11-03 12:17:05 +06:00
4ade949593 start 2.4.1 2022-11-03 12:14:58 +06:00
2a9342e4c7 Merge pull request #49 from InsanusMokrassar/2.4.0
2.4.0
2022-10-22 22:04:32 +06:00
7d57ceafaa update dependencies 2022-10-22 21:58:33 +06:00
823a53d5aa start 2.4.0 2022-10-22 21:53:19 +06:00
c1889ceff0 Merge pull request #48 from InsanusMokrassar/2.3.4
2.3.4
2022-10-02 01:27:59 +06:00
40c4ae128f update dependencies 2022-10-01 03:00:29 +06:00
0f59009300 start 2.3.4 2022-10-01 00:32:21 +06:00
a273f1117f Merge pull request #47 from InsanusMokrassar/2.3.3
2.3.3
2022-09-19 20:44:51 +06:00
c8bb5e1195 Update CHANGELOG.md 2022-09-19 16:08:11 +06:00
fbd98d67a9 Update libs.versions.toml 2022-09-19 16:06:00 +06:00
2350555fbb start 2.3.3 2022-09-19 16:04:44 +06:00
4130f98caa Merge pull request #46 from InsanusMokrassar/2.3.2
2.3.2
2022-09-15 20:12:43 +06:00
f8161c34a7 update dependencies 2022-09-15 20:07:23 +06:00
6fe333e437 start 2.3.2 2022-09-15 20:05:31 +06:00
5806fa1c31 Merge pull request #45 from InsanusMokrassar/2.3.1
2.3.1
2022-09-09 13:44:37 +06:00
2ff712327f Update CHANGELOG.md 2022-09-09 04:22:56 +06:00
72e8e35e3f Update libs.versions.toml 2022-09-09 04:20:09 +06:00
030f9546f2 Update gradle.properties 2022-09-09 04:18:05 +06:00
1b3c479766 Merge pull request #44 from InsanusMokrassar/2.3.0
2.3.0
2022-09-04 16:10:09 +06:00
dcfb66ef6c fixes 2022-09-04 15:57:40 +06:00
763718716d improve reconnect feature 2022-09-04 15:07:30 +06:00
dfbc7be6f2 add option waitForConnection in database config 2022-09-04 14:37:44 +06:00
ab0578b312 start 2.3.0 2022-09-04 14:31:46 +06:00
7b502e073d Merge pull request #43 from InsanusMokrassar/2.2.0
2.2.0
2022-08-27 13:47:59 +06:00
137a6c1c26 update dependencies 2022-08-27 13:45:26 +06:00
74f1ad496e start 2.2.0 2022-08-27 13:43:51 +06:00
e4a1e1f0be Merge pull request #42 from InsanusMokrassar/2.1.1
2.1.1
2022-08-20 22:30:51 +06:00
7286cf401b make it possible to get bot from DI 2022-08-20 22:10:08 +06:00
cdf94ec2eb start 2.1.1 2022-08-20 22:08:13 +06:00
5bfabfa284 Merge pull request #41 from InsanusMokrassar/2.1.0
2.1.0
2022-08-18 12:43:39 +06:00
ec2852beb0 complete with including of FSM 2022-08-18 12:42:34 +06:00
6c2cfbf06f a little upgrade of hello plugin 2022-08-18 12:27:11 +06:00
caa028b799 Update CHANGELOG.md 2022-08-17 09:55:54 +06:00
53667fa8b8 Update libs.versions.toml 2022-08-16 00:50:12 +06:00
81ca68dc06 Update CHANGELOG.md 2022-08-14 00:10:45 +06:00
6f74e6b4cb fill readme + rename fallback state handler 2022-08-13 20:37:17 +06:00
7dad3581f1 fixes/fill of docs 2022-08-13 20:30:10 +06:00
751e9aa66c remove redundant modules 2022-08-13 20:09:21 +06:00
08b797bbc2 start integration FSM oriented plagubot version 2022-08-13 18:30:33 +06:00
fa00d11a39 update gradle wrapper 2022-08-13 18:09:38 +06:00
1ba3953dfa update dependencies 2022-08-13 18:09:19 +06:00
af86a64a48 start 2.1.0 2022-08-13 18:08:00 +06:00
60fe1b5df9 Update CHANGELOG.md 2022-08-06 01:10:41 +06:00
c50b35c66b Merge pull request #39 from InsanusMokrassar/2.0.0
2.0.0
2022-08-06 01:10:14 +06:00
20 changed files with 507 additions and 56 deletions

0
.fleet/settings.json Normal file
View File

View File

@@ -1,11 +1,311 @@
# Changelog
## 7.2.0
* `Version`:
* `tgbotapi`: `9.2.0`
* `kslog`: `1.1.2`
* `sqlite`: `3.43.0.0`
## 7.1.0
* `Version`:
* `microutils`: `0.19.9`
* `tgbotapi`: `9.1.0`
* `ktor`: `2.3.3`
* `coroutines`: `1.7.3`
* `koin`: `3.4.3`
## 7.0.0
* `Version`:
* `microutils`: `0.19.7`
* `tgbotapi`: `9.0.0`
* `ktor`: `2.3.2`
* `coroutines`: `1.7.2`
## 6.1.0
* `Version`:
* `kotlin`: `1.8.22`
* `microutils`: `0.19.4`
* `tgbotapi`: `8.1.0`
* `koin`: `3.4.2`
* `sqlite`: `3.42.0.0`
## 6.0.1
* `Version`:
* `microutils`: `0.19.2`
* `tgbotapi`: `8.0.1`
* `uuid`: `0.7.1`
* `ktor`: `2.3.1`
* `koin`: `3.4.1`
## 6.0.0
* `Versions`:
* `microutils`: `0.19.1`
* `tgbotapi`: `8.0.0`
* `klock`: `4.0.3`
## 5.1.3
* `Versions`:
* `serialization`: `1.5.1`
* `microutils`: `0.18.4`
* `tgbotapi`: `7.1.3`
## 5.1.2
* `Versions`:
* `microutils`: `0.18.1`
* `tgbotapi`: `7.1.2`
## 5.1.1
* `Versions`:
* `kotlin`: `1.8.21`
* `microutils`: `0.18.0`
* `tgbotapi`: `7.1.1`
## 5.1.0
* `Versions`:
* `tgbotapi`: `7.1.0`
* `sqlite`: `3.41.2.1`
## 5.0.2
* `Versions`:
* `kotlin`: `1.8.20`
* `microutils`: `0.17.8`
* `tgbotapi`: `7.0.2`
* `kslog`: `1.1.1`
* `ktor`: `2.3.0`
* `koin`: `3.4.0`
## 5.0.1
* `Versions`:
* `tgbotapi`: `7.0.1`
## 5.0.0
* `Versions`:
* `tgbotapi`: `7.0.0`
* `microutils`: `0.17.5`
## 4.1.0
* `Versions`:
* `tgbotapi`: `6.1.0`
* `microutils`: `0.17.3`
## 4.0.3
* `Versions`:
* `tgbotapi`: `6.0.3`
* `microutils`: `0.17.2`
## 4.0.2
* `Versions`:
* `tgbotapi`: `6.0.2`
## 4.0.1
* `Versions`:
* `tgbotapi`: `6.0.1`
* `microutils`: `17.0.1`
* `ktor`: `2.2.4`
## 4.0.0
* `Versions`:
* `kotlin`: `1.8.10`
* `tgbotapi`: `6.0.0`
* `microutils`: `0.17.0`
## 3.5.0
* `Versions`:
* `tgbotapi`: `5.2.0`
* `microutils`: `0.16.10`
* `koin`: `3.3.2`
## 3.4.1
* `setupBotPlugin` now works synchronously
## 3.4.0
* `Versions`:
* `tgbotapi`: `5.1.0`
* `microutils`: `0.16.8`
* `ktor`: `2.2.3`
## 3.3.1
* `Versions`:
* `tgbotapi`: `5.0.1`
* `microutils`: `0.16.6`
* `ktor`: `2.2.2`
## 3.3.0
* `Versions`:
* `tgbotapi`: `5.0.0`
## 3.2.3
* `Versions`:
* `tgbotapi`: `4.2.3`
* `microutils`: `0.16.4`
## 3.2.2
* `Versions`:
* `tgbotapi`: `4.2.2`
* `microutils`: `0.16.2`
## 3.2.1
* `Versions`:
* `tgbotapi`: `4.2.1`
* `microutils`: `0.16.0`
* `ktor`: `2.2.1`
## 3.2.0
* `Versions`:
* `kotlin`: `1.7.22`
* `tgbotapi`: `4.2.0`
* `microutils`: `0.15.0`
* `kslog`: `0.5.4`
* `sqlite`: `3.40.0.0`
## 3.1.4
* `Versions`:
* `tgbotapi`: `4.1.3`
* `microutils`: `0.14.4`
## 3.1.3
* `Versions`:
* `tgbotapi`: `4.1.2`
## 3.1.2
* `Versions`:
* `microutils`: `0.14.2`
* `exposed`: `0.41.1`
## 3.1.1
* `Versions`:
* `tgbotapi`: `4.1.1`
## 3.1.0
* `Versions`:
* `kotlin`: `1.7.21`
* `microutils`: `0.14.1`
* `tgbotapi`: `4.1.0`
* `klock`: `3.4.0`
* `uuid`: `0.6.0`
## 3.0.0
* `Versions`:
* `microutils`: `0.14.0`
* `tgbotapi`: `4.0.0`
* `kslog`: `0.5.3`
* `exposed`: `0.40.1`
* `klock`: `3.3.1`
## 2.4.1
* `Versions`:
* `microutils`: `0.13.2`
* `tgbotapi`: `3.3.1`
* `klock`: `3.3.0`
* `ktor`: `2.1.3`
* `koin`: `3.2.2`
## 2.4.0
* `Versions`:
* `kotlin`: `1.7.20`
* `serialization`: `1.4.1`
* `tgbotapi`: `3.3.0`
* `microutils`: `0.13.1`
* `klock`: `3.2.0`
* `ktor`: `2.1.2`
## 2.3.4
* `Versions`:
* `tgbotapi`: `3.2.7`
* `microutils`: `0.12.16`
## 2.3.3
* `Versions`:
* `tgbotapi`: `3.2.6`
* `sqlite`: `3.39.3.0`
## 2.3.2
* `Versions`:
* `tgbotapi`: `3.2.3`
* `microutils`: `0.12.13`
* `kslog`: `0.5.2`
## 2.3.1
* `Versions`:
* `klock`: `3.1.0`
* `tgbotapi`: `3.2.1`
* `microutils`: `0.12.11`
* `ktor`: `2.1.1`
## 2.3.0
* `Bot`:
* Add option `reconnectOptions` in database config
## 2.2.0
* `Versions`:
* `serialization`: `1.4.0`
* `tgbotapi`: `3.2.0`
* `microutils`: `0.12.4`
* `kslog`: `0.5.1`
## 2.1.1
* `Bot`:
* Now it is possible to get bot from `koin`
## 2.1.0
* `Versions`:
* `tgbotapi`: `3.1.1`
* `ktor`: `2.1.0`
* `microutils`: `0.12.1`
* `Plugins`:
* New fum of `Plugin` with `BehaviourContextWithFSM` receiver
* `Bot`:
* Now bot uses `buildBehaviourWithFSM` to be able to setup bot with FSM
## 2.0.0
* `Versions`:
* `kotlin`: `1.7.10`
* `serialization`: `1.4.0-RC`
* `tgbotapi`: `3.0.0`
* `tgbotapi`: `3.0.2`
* `kslog`: `0.5.0`
* `uuid`: `0.5.0`
* `exposed`: `0.39.2`

View File

@@ -16,3 +16,28 @@ You can create your bot using
That is a set of libraries for plagubots. Look at the
[PlaguBot Plugin template](https://insanusmokrassar.github.io/PlaguBotPluginTemplate/) to find how to create your bot.
### Technical help
In this bot has been used variant with FSM. That means that you may use all the [Behaviour Builder with FSM](https://bookstack.inmo.dev/books/telegrambotapi/page/behaviour-builder-with-fsm) functionality. In case you wish to setup states repo, you should use the next code in the `setupDI` of your plugin:
```kotlin
single<StatesManager<State>> {
// setup your manager and return here
// Default is:
DefaultStatesManager(
InMemoryDefaultStatesManagerRepo()
)
}
```
Besides, you may setup handling errors lambda in the same function:
```kotlin
single<StateHandlingErrorHandler<State>> {
{ state, e ->
logger.eS(e) { "Unable to handle state $state" } // logging by default
null // you should return new state or null, default callback will return null
}
}
```

View File

@@ -16,6 +16,7 @@ dependencies {
api libs.jb.exposed.jdbc
api libs.tgbotapi
api libs.tgbotapi.behaviourBuilder.fsm
api libs.microutils.repos.exposed
api libs.kslog

View File

@@ -49,14 +49,32 @@ publishing {
}
}
repositories {
if (project.hasProperty('GITEA_TOKEN') || System.getenv('GITEA_TOKEN') != null) {
maven {
name = "Gitea"
url = uri("https://git.inmo.dev/api/packages/InsanusMokrassar/maven")
credentials(HttpHeaderCredentials) {
name = "Authorization"
value = project.hasProperty('GITEA_TOKEN') ? project.property('GITEA_TOKEN') : System.getenv('GITEA_TOKEN')
}
authentication {
header(HttpHeaderAuthentication)
}
}
}
if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) {
maven {
name = "sonatype"
url = uri("https://oss.sonatype.org/service/local/staging/deploy/maven2/")
credentials {
username = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : System.getenv('SONATYPE_USER')
password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD')
}
}
}
}

View File

@@ -1 +1 @@
{"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/PlaguBot/LICENSE"}],"mavenConfig":{"name":"PlaguBot Bot","description":"Base PlaguBot project","url":"https://github.com/InsanusMokrassar/PlaguBot","vcsUrl":"ssh://git@github.com/InsanusMokrassar/PlaguBot.git","developers":[{"id":"InsanusMokrassar","name":"Aleksei Ovsiannikov","eMail":"ovsyannikov.alexey95@gmail.com"}],"repositories":[{"name":"sonatype","url":"https://oss.sonatype.org/service/local/staging/deploy/maven2/"}],"gpgSigning":{"type":"dev.inmo.kmppscriptbuilder.core.models.GpgSigning.Optional"}},"type":"JVM"}
{"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/PlaguBot/LICENSE"}],"mavenConfig":{"name":"PlaguBot Bot","description":"Base PlaguBot project","url":"https://github.com/InsanusMokrassar/PlaguBot","vcsUrl":"ssh://git@github.com/InsanusMokrassar/PlaguBot.git","developers":[{"id":"InsanusMokrassar","name":"Aleksei Ovsiannikov","eMail":"ovsyannikov.alexey95@gmail.com"}],"repositories":[{"name":"Gitea","url":"https://git.inmo.dev/api/packages/InsanusMokrassar/maven","credsType":{"type":"dev.inmo.kmppscriptbuilder.core.models.MavenPublishingRepository.CredentialsType.HttpHeaderCredentials","headerName":"Authorization","headerValueProperty":"GITEA_TOKEN"}},{"name":"sonatype","url":"https://oss.sonatype.org/service/local/staging/deploy/maven2/"}],"gpgSigning":{"type":"dev.inmo.kmppscriptbuilder.core.models.GpgSigning.Optional"}},"type":"JVM"}

View File

@@ -1,10 +1,18 @@
package dev.inmo.plagubot
import dev.inmo.kslog.common.*
import dev.inmo.micro_utils.fsm.common.State
import dev.inmo.plagubot.HelloPlugin.setupBotPlugin
import dev.inmo.tgbotapi.extensions.api.bot.getMe
import dev.inmo.tgbotapi.extensions.api.send.reply
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
import dev.inmo.tgbotapi.extensions.api.send.sendMessage
import dev.inmo.tgbotapi.extensions.behaviour_builder.*
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitText
import dev.inmo.tgbotapi.extensions.behaviour_builder.expectations.waitTextMessage
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onCommand
import dev.inmo.tgbotapi.extensions.behaviour_builder.triggers_handling.onUnhandledCommand
import dev.inmo.tgbotapi.types.IdChatIdentifier
import kotlinx.coroutines.flow.first
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@@ -24,14 +32,34 @@ object HelloPlugin : Plugin {
override fun Module.setupDI(database: Database, params: JsonObject) {
single {
get<Json>().decodeFromJsonElement(HelloPluginConfig.serializer(), params["helloPlugin"] ?: return@single null)
}
}
override suspend fun BehaviourContext.setupBotPlugin(koin: Koin) {
logger.d { koin.get<HelloPluginConfig>().print }
private sealed interface InternalFSMState : State {
override val context: IdChatIdentifier
data class DidntSaidHello(override val context: IdChatIdentifier) : InternalFSMState
data class SaidHelloOnce(override val context: IdChatIdentifier) : InternalFSMState
}
override suspend fun BehaviourContextWithFSM<State>.setupBotPlugin(koin: Koin) {
val toPrint = koin.getOrNull<HelloPluginConfig>() ?.print ?: "Hello :)"
logger.d { toPrint }
logger.dS { getMe().toString() }
onCommand("hello_world") {
reply(it, "Hello :)")
startChain(InternalFSMState.DidntSaidHello(it.chat.id))
}
strictlyOn { state: InternalFSMState.DidntSaidHello ->
sendMessage(state.context, toPrint)
InternalFSMState.SaidHelloOnce(state.context)
}
strictlyOn { state: InternalFSMState.SaidHelloOnce ->
val message = waitTextMessage().first()
reply(message, "Sorry, I can answer only this: $toPrint")
InternalFSMState.SaidHelloOnce(state.context)
}
}
}

View File

@@ -3,12 +3,13 @@ package dev.inmo.plagubot
import dev.inmo.kslog.common.*
import dev.inmo.micro_utils.common.Warning
import dev.inmo.micro_utils.coroutines.runCatchingSafely
import dev.inmo.plagubot.config.Config
import dev.inmo.plagubot.config.defaultJsonFormat
import dev.inmo.micro_utils.fsm.common.State
import dev.inmo.micro_utils.fsm.common.StatesManager
import dev.inmo.micro_utils.fsm.common.managers.*
import dev.inmo.plagubot.config.*
import dev.inmo.tgbotapi.bot.ktor.telegramBot
import dev.inmo.tgbotapi.extensions.api.webhook.deleteWebhook
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
import dev.inmo.tgbotapi.extensions.behaviour_builder.buildBehaviour
import dev.inmo.tgbotapi.extensions.behaviour_builder.*
import dev.inmo.tgbotapi.extensions.utils.updates.retrieving.startGettingOfUpdatesByLongPolling
import kotlinx.coroutines.*
import kotlinx.serialization.Serializable
@@ -44,6 +45,7 @@ data class PlaguBot(
single { config.databaseConfig.database }
single { defaultJsonFormat }
single { this@PlaguBot }
single { bot }
includes(
config.plugins.mapNotNull {
@@ -60,21 +62,19 @@ data class PlaguBot(
)
}
override suspend fun BehaviourContext.setupBotPlugin(koin: Koin) {
config.plugins.map { plugin ->
launch {
runCatchingSafely {
logger.i("Start loading of $plugin")
with(plugin) {
setupBotPlugin(koin)
}
}.onFailure { e ->
logger.w("Unable to load bot part of $plugin", e)
}.onSuccess {
logger.i("Complete loading of $plugin")
override suspend fun BehaviourContextWithFSM<State>.setupBotPlugin(koin: Koin) {
config.plugins.forEach { plugin ->
runCatchingSafely {
logger.i("Start loading of $plugin")
with(plugin) {
setupBotPlugin(koin)
}
}.onFailure { e ->
logger.w("Unable to load bot part of $plugin", e)
}.onSuccess {
logger.i("Complete loading of $plugin")
}
}.joinAll()
}
}
/**
@@ -94,12 +94,25 @@ data class PlaguBot(
GlobalContext.startKoin(koinApp)
logger.i("Koin started")
lateinit var behaviourContext: BehaviourContext
bot.buildBehaviour(scope = scope) {
bot.buildBehaviourWithFSM(
scope = scope,
defaultExceptionsHandler = {
logger.e("Something went wrong", it)
},
statesManager = koinApp.koin.getOrNull<StatesManager<State>>() ?: DefaultStatesManager(
koinApp.koin.getOrNull<DefaultStatesManagerRepo<State>>() ?: InMemoryDefaultStatesManagerRepo<State>(),
onStartContextsConflictResolver = { _, _ -> false }
),
onStateHandlingErrorHandler = koinApp.koin.getOrNull<StateHandlingErrorHandler<State>>() ?: { state, e ->
logger.eS(e) { "Unable to handle state $state" }
null
}
) {
logger.i("Start setup of bot part")
behaviourContext = this
setupBotPlugin(koinApp.koin)
deleteWebhook()
}
}.start()
logger.i("Behaviour builder has been setup")
return bot.startGettingOfUpdatesByLongPolling(scope = behaviourContext, updatesFilter = behaviourContext).also {
logger.i("Long polling has been started")

View File

@@ -0,0 +1,9 @@
package dev.inmo.plagubot.config
import kotlinx.serialization.Serializable
@Serializable
data class DBConnectOptions(
val attempts: Int = 3,
val delay: Long = 1000L
)

View File

@@ -1,11 +1,15 @@
package dev.inmo.plagubot.config
import dev.inmo.kslog.common.e
import dev.inmo.kslog.common.logger
import kotlinx.coroutines.delay
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.transactions.transactionManager
import org.koin.core.scope.Scope
import org.sqlite.JDBC
import java.lang.Exception
import java.sql.Connection
inline val Scope.database: Database?
@@ -16,15 +20,24 @@ data class DatabaseConfig(
val url: String = "jdbc:sqlite:file:test?mode=memory&cache=shared",
val driver: String = JDBC::class.qualifiedName!!,
val username: String = "",
val password: String = ""
val password: String = "",
val reconnectOptions: DBConnectOptions? = DBConnectOptions()
) {
@Transient
val database: Database = Database.connect(
url,
driver,
username,
password
).also {
it.transactionManager.defaultIsolationLevel = Connection.TRANSACTION_SERIALIZABLE // Or Connection.TRANSACTION_READ_UNCOMMITTED
}
val database: Database = (0 until (reconnectOptions ?.attempts ?: 1)).firstNotNullOfOrNull {
runCatching {
Database.connect(
url,
driver,
username,
password
).also {
it.transactionManager.defaultIsolationLevel = Connection.TRANSACTION_SERIALIZABLE // Or Connection.TRANSACTION_READ_UNCOMMITTED
it.connector().close()
}
}.onFailure {
logger.e(it)
Thread.sleep(reconnectOptions ?.delay ?: return@onFailure)
}.getOrNull()
} ?: error("Unable to create database")
}

View File

@@ -0,0 +1,3 @@
package dev.inmo.plagubot.config
typealias StateHandlingErrorHandler<T> = suspend (T, Throwable) -> T?

View File

@@ -16,6 +16,7 @@ allprojects {
mavenCentral()
mavenLocal()
maven { url 'https://jitpack.io' }
maven { url "https://git.inmo.dev/api/packages/InsanusMokrassar/maven" }
}
}

View File

@@ -5,4 +5,4 @@ kotlin.js.generate.externals=true
kotlin.incremental=true
group=dev.inmo
version=2.0.0
version=7.2.0

View File

@@ -1,28 +1,26 @@
[versions]
kt = "1.7.10"
kt-serialization = "1.4.0-RC"
kt-coroutines = "1.6.4"
kt = "1.8.22"
kt-serialization = "1.5.1"
kt-coroutines = "1.7.3"
microutils = "0.12.0"
tgbotapi = "3.0.2"
kslog = "0.5.0"
microutils = "0.19.9"
tgbotapi = "9.2.0"
kslog = "1.1.2"
jb-exposed = "0.39.2"
jb-dokka = "1.7.10"
jb-exposed = "0.41.1"
jb-dokka = "1.8.20"
sqlite = "3.36.0.3"
sqlite = "3.43.0.0"
klock = "3.0.0"
uuid = "0.5.0"
klock = "4.0.3"
uuid = "0.7.1"
ktor = "2.0.3"
ktor = "2.3.3"
gh-release = "2.4.1"
android-gradle = "7.2.2"
dexcount = "3.1.0"
koin = "3.2.0"
koin = "3.4.3"
[libraries]
@@ -32,6 +30,7 @@ kt-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", vers
kt-serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kt-serialization" }
tgbotapi = { module = "dev.inmo:tgbotapi", version.ref = "tgbotapi" }
tgbotapi-behaviourBuilder-fsm = { module = "dev.inmo:tgbotapi.behaviour_builder.fsm", version.ref = "tgbotapi" }
microutils-repos-exposed = { module = "dev.inmo:micro_utils.repos.exposed", version.ref = "microutils" }
kslog = { module = "dev.inmo:kslog", version.ref = "kslog" }

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@@ -49,14 +49,32 @@ publishing {
}
}
repositories {
if (project.hasProperty('GITEA_TOKEN') || System.getenv('GITEA_TOKEN') != null) {
maven {
name = "Gitea"
url = uri("https://git.inmo.dev/api/packages/InsanusMokrassar/maven")
credentials(HttpHeaderCredentials) {
name = "Authorization"
value = project.hasProperty('GITEA_TOKEN') ? project.property('GITEA_TOKEN') : System.getenv('GITEA_TOKEN')
}
authentication {
header(HttpHeaderAuthentication)
}
}
}
if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) {
maven {
name = "sonatype"
url = uri("https://oss.sonatype.org/service/local/staging/deploy/maven2/")
credentials {
username = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : System.getenv('SONATYPE_USER')
password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD')
}
}
}
}

View File

@@ -1 +1 @@
{"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/PlaguBot/LICENSE"}],"mavenConfig":{"name":"PlaguBot Plugin","description":"Base dependency for whole PlaguBot project","url":"https://github.com/InsanusMokrassar/PlaguBot","vcsUrl":"ssh://git@github.com/InsanusMokrassar/PlaguBot.git","developers":[{"id":"InsanusMokrassar","name":"Aleksei Ovsiannikov","eMail":"ovsyannikov.alexey95@gmail.com"}],"repositories":[{"name":"sonatype","url":"https://oss.sonatype.org/service/local/staging/deploy/maven2/"}],"gpgSigning":{"type":"dev.inmo.kmppscriptbuilder.core.models.GpgSigning.Optional"}},"type":"JVM"}
{"licenses":[{"id":"Apache-2.0","title":"Apache Software License 2.0","url":"https://github.com/InsanusMokrassar/PlaguBot/LICENSE"}],"mavenConfig":{"name":"PlaguBot Plugin","description":"Base dependency for whole PlaguBot project","url":"https://github.com/InsanusMokrassar/PlaguBot","vcsUrl":"ssh://git@github.com/InsanusMokrassar/PlaguBot.git","developers":[{"id":"InsanusMokrassar","name":"Aleksei Ovsiannikov","eMail":"ovsyannikov.alexey95@gmail.com"}],"repositories":[{"name":"Gitea","url":"https://git.inmo.dev/api/packages/InsanusMokrassar/maven","credsType":{"type":"dev.inmo.kmppscriptbuilder.core.models.MavenPublishingRepository.CredentialsType.HttpHeaderCredentials","headerName":"Authorization","headerValueProperty":"GITEA_TOKEN"}},{"name":"sonatype","url":"https://oss.sonatype.org/service/local/staging/deploy/maven2/"}],"gpgSigning":{"type":"dev.inmo.kmppscriptbuilder.core.models.GpgSigning.Optional"}},"type":"JVM"}

View File

@@ -1,6 +1,8 @@
package dev.inmo.plagubot
import dev.inmo.micro_utils.fsm.common.State
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContextWithFSM
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.JsonObject
import org.jetbrains.exposed.sql.Database
@@ -23,7 +25,20 @@ interface Plugin {
database: Database,
params: JsonObject
) {}
/**
* Override this method in cases when you want to declare common bot behaviour. In case you wish to use FSM, you
* should override the method with receiver [BehaviourContextWithFSM]
*/
suspend fun BehaviourContext.setupBotPlugin(
koin: Koin
) {}
/**
* Override this method in cases when you want to declare full behaviour of the plugin. It is recommended to declare
* common logic of plugin in the [setupBotPlugin] with [BehaviourContext] receiver and use override this one
* for the FSM configuration
*/
suspend fun BehaviourContextWithFSM<State>.setupBotPlugin(koin: Koin) {
(this as BehaviourContext).setupBotPlugin(koin)
}
}

View File

@@ -2,7 +2,12 @@ String[] toInclude = [":bot", ":plugin"]
rootProject.name = 'plagubot'
toInclude.each {
include (it)
project(it).name = "${rootProject.name}${it.replace(":", ".")}"
toInclude.each { originalName ->
String projectDirectory = "${rootProject.projectDir.getAbsolutePath()}${originalName.replace(":", File.separator)}"
String projectName = "${rootProject.name}${originalName.replace(":", ".")}"
String projectIdentifier = ":${projectName}"
include projectIdentifier
ProjectDescriptor project = project(projectIdentifier)
project.name = projectName
project.projectDir = new File(projectDirectory)
}

View File

@@ -4,7 +4,10 @@
"driver": "org.sqlite.JDBC",
"username": "OPTIONAL username",
"password": "OPTIONAL password",
"initAutomatically": false
"reconnectOptions": {
"attempts": 3,
"delay": 1000
}
},
"botToken": "1234567890:ABCDEFGHIJKLMNOP_qrstuvwxyz12345678",
"plugins": [