From 8bd24a31e601f5e8298a07c8cb440bc08fa7b393 Mon Sep 17 00:00:00 2001 From: oleksandrpetrov <petrov.oleksandr35@gmail.com> Date: Mon, 21 Mar 2022 15:21:49 +0100 Subject: [PATCH 1/5] Telegram api dependencies add --- api/build.gradle | 14 ++++++++++++-- .../sp/bot_builder/base_bot/BaseTelegramBot.java | 6 ++++++ settings.gradle | 1 - 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTelegramBot.java diff --git a/api/build.gradle b/api/build.gradle index bad823a..ccf35dc 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -8,6 +8,9 @@ repositories { mavenCentral() } +def telegram_version = '5.7.1' +def junit_version = '5.8.2' + dependencies { implementation 'org.mongodb:mongodb-driver-sync:4.4.1' implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' @@ -19,12 +22,19 @@ dependencies { implementation 'org.hibernate:hibernate-core:5.6.5.Final' implementation 'org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.2.Final' implementation 'org.springframework.data:spring-data-mongodb:3.3.1' + + // Telegram api + implementation "org.telegram:telegrambots:$telegram_version" + implementation "org.telegram:telegrambotsextensions:$telegram_version" + + // Test spring dependencies testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'de.flapdoodle.embed:de.flapdoodle.embed.mongo' testImplementation 'org.springframework.security:spring-security-test' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' + // Junit tests + testImplementation "org.junit.jupiter:junit-jupiter-api:$junit_version" + testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junit_version" } test { diff --git a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTelegramBot.java b/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTelegramBot.java new file mode 100644 index 0000000..17648bf --- /dev/null +++ b/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTelegramBot.java @@ -0,0 +1,6 @@ +package cz.cvut.fit.sp.bot_builder.base_bot; + +import org.telegram.telegrambots.extensions.bots.commandbot.TelegramLongPollingCommandBot; + +public class BaseTelegramBot extends TelegramLongPollingCommandBot { +} diff --git a/settings.gradle b/settings.gradle index 3a06b4c..513851e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,3 @@ rootProject.name = 'bot_builder' include 'base', 'api', 'authentication' -include 'authentication' -- GitLab From 51224ba6301e485c292d531be776ea2aaa7337f3 Mon Sep 17 00:00:00 2001 From: oleksandrpetrov <petrov.oleksandr35@gmail.com> Date: Mon, 21 Mar 2022 15:26:18 +0100 Subject: [PATCH 2/5] Add Lombok and log4j dependencies --- api/build.gradle | 8 ++++++++ .../sp/bot_builder/base_bot/BaseTelegramBot.java | 15 +++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/api/build.gradle b/api/build.gradle index ccf35dc..0cc3475 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -10,6 +10,8 @@ repositories { def telegram_version = '5.7.1' def junit_version = '5.8.2' +def lombok_version = '1.18.22' +def log4j_version = '1.2.17' dependencies { implementation 'org.mongodb:mongodb-driver-sync:4.4.1' @@ -27,6 +29,12 @@ dependencies { implementation "org.telegram:telegrambots:$telegram_version" implementation "org.telegram:telegrambotsextensions:$telegram_version" + // Lombok + implementation "org.projectlombok:lombok:$lombok_version" + + // Logger log4j + implementation "log4j:log4j:$log4j_version" + // Test spring dependencies testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'de.flapdoodle.embed:de.flapdoodle.embed.mongo' diff --git a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTelegramBot.java b/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTelegramBot.java index 17648bf..28f9053 100644 --- a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTelegramBot.java +++ b/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTelegramBot.java @@ -1,6 +1,21 @@ package cz.cvut.fit.sp.bot_builder.base_bot; import org.telegram.telegrambots.extensions.bots.commandbot.TelegramLongPollingCommandBot; +import org.telegram.telegrambots.meta.api.objects.Update; public class BaseTelegramBot extends TelegramLongPollingCommandBot { + @Override + public String getBotUsername() { + return null; + } + + @Override + public void processNonCommandUpdate(Update update) { + + } + + @Override + public String getBotToken() { + return null; + } } -- GitLab From 76d64e76f216c0b515ab193f85c297056e72b716 Mon Sep 17 00:00:00 2001 From: oleksandrpetrov <petrov.oleksandr35@gmail.com> Date: Tue, 22 Mar 2022 00:56:48 +0100 Subject: [PATCH 3/5] Base telegram bot classes implementation --- api/build.gradle | 2 +- .../bot_builder/base_bot/BaseTelegramBot.java | 37 ++++++++++++++++-- .../base_bot/BaseTextBotHandler.java | 39 +++++++++++++++++++ .../base_bot/BaseTextHandlerInterface.java | 21 ++++++++++ .../base_bot/ChatBotTextAnswer.java | 27 +++++++++++++ .../sp/bot_builder/base_bot/UserRequest.java | 12 ++++++ 6 files changed, 134 insertions(+), 4 deletions(-) create mode 100644 api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTextBotHandler.java create mode 100644 api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTextHandlerInterface.java create mode 100644 api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/ChatBotTextAnswer.java create mode 100644 api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/UserRequest.java diff --git a/api/build.gradle b/api/build.gradle index 0cc3475..25a2f54 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -10,7 +10,7 @@ repositories { def telegram_version = '5.7.1' def junit_version = '5.8.2' -def lombok_version = '1.18.22' +def lombok_version = '1.18.10' def log4j_version = '1.2.17' dependencies { diff --git a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTelegramBot.java b/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTelegramBot.java index 28f9053..04217f6 100644 --- a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTelegramBot.java +++ b/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTelegramBot.java @@ -1,21 +1,52 @@ package cz.cvut.fit.sp.bot_builder.base_bot; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import org.telegram.telegrambots.extensions.bots.commandbot.TelegramLongPollingCommandBot; import org.telegram.telegrambots.meta.api.objects.Update; +import java.util.List; +import java.util.logging.Logger; + +@AllArgsConstructor +@NoArgsConstructor public class BaseTelegramBot extends TelegramLongPollingCommandBot { + + private static final Logger logger = Logger.getLogger(BaseTelegramBot.class.toString()); + + + + @Getter + @Setter + private String username; + @Getter + @Setter + private String token; + @Override public String getBotUsername() { - return null; + return username; } @Override public void processNonCommandUpdate(Update update) { - + // Todo implement command update.... } @Override public String getBotToken() { - return null; + return token; + } + + @Override + public void onRegister() { + super.onRegister(); + } + + @Override + public void onUpdatesReceived(List<Update> updates) { + super.onUpdatesReceived(updates); } } diff --git a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTextBotHandler.java b/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTextBotHandler.java new file mode 100644 index 0000000..a89bc44 --- /dev/null +++ b/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTextBotHandler.java @@ -0,0 +1,39 @@ +package cz.cvut.fit.sp.bot_builder.base_bot; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.telegram.telegrambots.meta.api.methods.send.SendMessage; +import org.telegram.telegrambots.meta.api.objects.Message; + +import java.util.List; +import java.util.Optional; + +@AllArgsConstructor +@NoArgsConstructor +public abstract class BaseTextBotHandler implements BaseTextHandlerInterface { + + @Getter + @Setter + private List<UserRequest> botCommands; + + @Override + public Optional<SendMessage> executeRequest(Long chatId, String username, Message message) { + // Try to find user request in available requests list + Optional<UserRequest> request = botCommands.stream().filter( + (req) -> req.equals(new UserRequest(message.getText()))).findFirst(); + if (request.isEmpty()) { + // Request not found... + return Optional.empty(); + } + + return produceAnswer(request.get()); + } + + @Override + public Optional<SendMessage> produceAnswer(UserRequest request) { + // Todo implement produce answer method... + return Optional.empty(); + } +} diff --git a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTextHandlerInterface.java b/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTextHandlerInterface.java new file mode 100644 index 0000000..16bd26a --- /dev/null +++ b/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTextHandlerInterface.java @@ -0,0 +1,21 @@ +package cz.cvut.fit.sp.bot_builder.base_bot; + +import org.telegram.telegrambots.meta.api.methods.send.SendMessage; +import org.telegram.telegrambots.meta.api.objects.Message; + +import java.util.Optional; + +public interface BaseTextHandlerInterface { + /** + * Identify user response and execute its command + * @param chatId - current active telegram chatId to response + * @param username - username of sender + * @param message - sender's request + */ + Optional<SendMessage> executeRequest(Long chatId, String username, Message message); + + /** + * Produce answer for user command + */ + Optional<SendMessage> produceAnswer(UserRequest request); +} diff --git a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/ChatBotTextAnswer.java b/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/ChatBotTextAnswer.java new file mode 100644 index 0000000..de660ba --- /dev/null +++ b/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/ChatBotTextAnswer.java @@ -0,0 +1,27 @@ +package cz.cvut.fit.sp.bot_builder.base_bot; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import org.telegram.telegrambots.meta.api.methods.send.SendMessage; + +@AllArgsConstructor +public class ChatBotTextAnswer { + @Getter + @Setter + private String chatId; + @Getter + @Setter + private String username; + @Getter + @Setter + private String answer; + + public SendMessage convertToMessage() { + SendMessage msg = new SendMessage(); + msg.setChatId(chatId); + msg.setText(answer); + return msg; + } + +} diff --git a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/UserRequest.java b/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/UserRequest.java new file mode 100644 index 0000000..bcc8778 --- /dev/null +++ b/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/UserRequest.java @@ -0,0 +1,12 @@ +package cz.cvut.fit.sp.bot_builder.base_bot; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +@AllArgsConstructor +public class UserRequest { + @Getter + @Setter + private String textRequest; +} -- GitLab From 02423f7dd6ad1266519c2b8ad4e1f282d6d74f13 Mon Sep 17 00:00:00 2001 From: oleksandrpetrov <petrov.oleksandr35@gmail.com> Date: Tue, 22 Mar 2022 01:03:47 +0100 Subject: [PATCH 4/5] Move tg base bot package --- base/build.gradle | 15 +++++++++++++++ .../base}/base_bot/BaseTelegramBot.java | 4 +--- .../base}/base_bot/BaseTextBotHandler.java | 2 +- .../base}/base_bot/BaseTextHandlerInterface.java | 2 +- .../base}/base_bot/ChatBotTextAnswer.java | 2 +- .../bot_builder/base}/base_bot/UserRequest.java | 2 +- 6 files changed, 20 insertions(+), 7 deletions(-) rename {api/src/main/java/cz/cvut/fit/sp/bot_builder => base/src/main/java/cz/cvut/fit/base/bot_builder/base}/base_bot/BaseTelegramBot.java (95%) rename {api/src/main/java/cz/cvut/fit/sp/bot_builder => base/src/main/java/cz/cvut/fit/base/bot_builder/base}/base_bot/BaseTextBotHandler.java (95%) rename {api/src/main/java/cz/cvut/fit/sp/bot_builder => base/src/main/java/cz/cvut/fit/base/bot_builder/base}/base_bot/BaseTextHandlerInterface.java (92%) rename {api/src/main/java/cz/cvut/fit/sp/bot_builder => base/src/main/java/cz/cvut/fit/base/bot_builder/base}/base_bot/ChatBotTextAnswer.java (91%) rename {api/src/main/java/cz/cvut/fit/sp/bot_builder => base/src/main/java/cz/cvut/fit/base/bot_builder/base}/base_bot/UserRequest.java (78%) diff --git a/base/build.gradle b/base/build.gradle index df216b0..3753ad4 100644 --- a/base/build.gradle +++ b/base/build.gradle @@ -6,10 +6,25 @@ repositories { mavenCentral() } +def telegram_version = '5.7.1' +def lombok_version = '1.18.10' +def log4j_version = '1.2.17' + dependencies { implementation 'org.hibernate:hibernate-core:5.6.5.Final' implementation 'org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.2.Final' implementation 'org.springframework.data:spring-data-mongodb:3.3.1' + + // Telegram api + implementation "org.telegram:telegrambots:$telegram_version" + implementation "org.telegram:telegrambotsextensions:$telegram_version" + + // Lombok + implementation "org.projectlombok:lombok:$lombok_version" + + // Logger log4j + implementation "log4j:log4j:$log4j_version" + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' } diff --git a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTelegramBot.java b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTelegramBot.java similarity index 95% rename from api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTelegramBot.java rename to base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTelegramBot.java index 04217f6..ad69496 100644 --- a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTelegramBot.java +++ b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTelegramBot.java @@ -1,4 +1,4 @@ -package cz.cvut.fit.sp.bot_builder.base_bot; +package cz.cvut.fit.base.bot_builder.base.base_bot; import lombok.AllArgsConstructor; import lombok.Getter; @@ -16,8 +16,6 @@ public class BaseTelegramBot extends TelegramLongPollingCommandBot { private static final Logger logger = Logger.getLogger(BaseTelegramBot.class.toString()); - - @Getter @Setter private String username; diff --git a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTextBotHandler.java b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTextBotHandler.java similarity index 95% rename from api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTextBotHandler.java rename to base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTextBotHandler.java index a89bc44..efa7261 100644 --- a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTextBotHandler.java +++ b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTextBotHandler.java @@ -1,4 +1,4 @@ -package cz.cvut.fit.sp.bot_builder.base_bot; +package cz.cvut.fit.base.bot_builder.base.base_bot; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTextHandlerInterface.java b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTextHandlerInterface.java similarity index 92% rename from api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTextHandlerInterface.java rename to base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTextHandlerInterface.java index 16bd26a..3b13ed5 100644 --- a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/BaseTextHandlerInterface.java +++ b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTextHandlerInterface.java @@ -1,4 +1,4 @@ -package cz.cvut.fit.sp.bot_builder.base_bot; +package cz.cvut.fit.base.bot_builder.base.base_bot; import org.telegram.telegrambots.meta.api.methods.send.SendMessage; import org.telegram.telegrambots.meta.api.objects.Message; diff --git a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/ChatBotTextAnswer.java b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/ChatBotTextAnswer.java similarity index 91% rename from api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/ChatBotTextAnswer.java rename to base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/ChatBotTextAnswer.java index de660ba..6c2fff2 100644 --- a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/ChatBotTextAnswer.java +++ b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/ChatBotTextAnswer.java @@ -1,4 +1,4 @@ -package cz.cvut.fit.sp.bot_builder.base_bot; +package cz.cvut.fit.base.bot_builder.base.base_bot; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/UserRequest.java b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/UserRequest.java similarity index 78% rename from api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/UserRequest.java rename to base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/UserRequest.java index bcc8778..bd4229f 100644 --- a/api/src/main/java/cz/cvut/fit/sp/bot_builder/base_bot/UserRequest.java +++ b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/UserRequest.java @@ -1,4 +1,4 @@ -package cz.cvut.fit.sp.bot_builder.base_bot; +package cz.cvut.fit.base.bot_builder.base.base_bot; import lombok.AllArgsConstructor; import lombok.Getter; -- GitLab From 44816b18086264c6959d5ee15963e7af5b462662 Mon Sep 17 00:00:00 2001 From: oleksandrpetrov <petrov.oleksandr35@gmail.com> Date: Thu, 24 Mar 2022 00:13:38 +0100 Subject: [PATCH 5/5] Base TelegramTextBot implementation --- api/build.gradle | 4 +- .../text_bot/BaseTextBotHandler.java | 44 +++++++++++++++ .../bot_builder/text_bot/TelegramTextBot.java | 54 +++++++++++++++++++ .../bot_builder/text_bot/TextBotFactory.java | 25 +++++++++ .../base/base_bot/BaseBotFactory.java | 7 +++ .../base/base_bot/BaseTelegramBot.java | 32 ++++++----- .../base/base_bot/BaseTextBotHandler.java | 39 -------------- .../base_bot/BaseTextHandlerInterface.java | 8 +-- .../bot_builder/base/base_bot/BotType.java | 5 ++ .../base/base_bot/ChatBotTextAnswer.java | 20 +++---- .../base/base_bot/UserRequest.java | 11 ++-- 11 files changed, 169 insertions(+), 80 deletions(-) create mode 100644 api/src/main/java/cz/cvut/fit/sp/bot_builder/text_bot/BaseTextBotHandler.java create mode 100644 api/src/main/java/cz/cvut/fit/sp/bot_builder/text_bot/TelegramTextBot.java create mode 100644 api/src/main/java/cz/cvut/fit/sp/bot_builder/text_bot/TextBotFactory.java create mode 100644 base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseBotFactory.java delete mode 100644 base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTextBotHandler.java create mode 100644 base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BotType.java diff --git a/api/build.gradle b/api/build.gradle index 25a2f54..4ed4fc3 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -10,10 +10,11 @@ repositories { def telegram_version = '5.7.1' def junit_version = '5.8.2' -def lombok_version = '1.18.10' +def lombok_version = '1.18.22' def log4j_version = '1.2.17' dependencies { + implementation project(":base") implementation 'org.mongodb:mongodb-driver-sync:4.4.1' implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' implementation 'org.springframework.boot:spring-boot-starter-data-rest' @@ -31,6 +32,7 @@ dependencies { // Lombok implementation "org.projectlombok:lombok:$lombok_version" + annotationProcessor "org.projectlombok:lombok:$lombok_version" // Logger log4j implementation "log4j:log4j:$log4j_version" diff --git a/api/src/main/java/cz/cvut/fit/sp/bot_builder/text_bot/BaseTextBotHandler.java b/api/src/main/java/cz/cvut/fit/sp/bot_builder/text_bot/BaseTextBotHandler.java new file mode 100644 index 0000000..f8c8b0f --- /dev/null +++ b/api/src/main/java/cz/cvut/fit/sp/bot_builder/text_bot/BaseTextBotHandler.java @@ -0,0 +1,44 @@ +package cz.cvut.fit.sp.bot_builder.text_bot; + +import cz.cvut.fit.base.bot_builder.base.base_bot.BaseTextHandlerInterface; +import cz.cvut.fit.base.bot_builder.base.base_bot.ChatBotTextAnswer; +import cz.cvut.fit.base.bot_builder.base.base_bot.UserRequest; +import lombok.Getter; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import org.telegram.telegrambots.meta.api.methods.send.SendMessage; +import org.telegram.telegrambots.meta.api.objects.Message; + +import java.util.Map; +import java.util.Optional; + +@Getter +@Setter +@RequiredArgsConstructor +public class BaseTextBotHandler implements BaseTextHandlerInterface { + + @NonNull + private Map<UserRequest, ChatBotTextAnswer> botCommands; + + @Override + public Optional<SendMessage> executeRequest(String chatId, String username, Message message) { + // Try to find user request in available requests list + Optional<Map.Entry<UserRequest, ChatBotTextAnswer>> request + = botCommands + .entrySet() + .stream() + .filter((req) -> req.getKey().equals(new UserRequest(message.getText()))).findFirst(); + if (request.isEmpty()) { + // Request not found... + return Optional.empty(); + } + + return produceAnswer(request.get(), chatId); + } + + @Override + public Optional<SendMessage> produceAnswer(Map.Entry<UserRequest, ChatBotTextAnswer> requestOptional, String chatId) { + return Optional.ofNullable(requestOptional.getValue().convertToMessage(chatId)); + } +} diff --git a/api/src/main/java/cz/cvut/fit/sp/bot_builder/text_bot/TelegramTextBot.java b/api/src/main/java/cz/cvut/fit/sp/bot_builder/text_bot/TelegramTextBot.java new file mode 100644 index 0000000..80ef185 --- /dev/null +++ b/api/src/main/java/cz/cvut/fit/sp/bot_builder/text_bot/TelegramTextBot.java @@ -0,0 +1,54 @@ +package cz.cvut.fit.sp.bot_builder.text_bot; + +import cz.cvut.fit.base.bot_builder.base.base_bot.BaseTelegramBot; +import cz.cvut.fit.base.bot_builder.base.base_bot.ChatBotTextAnswer; +import cz.cvut.fit.base.bot_builder.base.base_bot.UserRequest; +import org.telegram.telegrambots.meta.api.methods.send.SendMessage; +import org.telegram.telegrambots.meta.api.objects.Message; +import org.telegram.telegrambots.meta.api.objects.Update; +import org.telegram.telegrambots.meta.api.objects.User; +import org.telegram.telegrambots.meta.exceptions.TelegramApiException; + +import java.util.HashMap; +import java.util.Map; + +public class TelegramTextBot extends BaseTelegramBot { + + private final BaseTextBotHandler textBotHandler; + + public TelegramTextBot(Map<UserRequest, ChatBotTextAnswer> commands, String botName, String token) { + super(botName, token); + this.textBotHandler = new BaseTextBotHandler(commands); + } + + public TelegramTextBot(String botName, String token) { + super(botName, token); + this.textBotHandler = new BaseTextBotHandler(new HashMap<>()); + } + + @Override + public void processNonCommandUpdate(Update update) { + Message message = update.getMessage(); + + SendMessage answer = textBotHandler + .executeRequest(message.getChatId().toString() + , getUsername(message), message) + .orElse(new SendMessage()); + + try { + execute(answer); + } catch (TelegramApiException e) { + e.printStackTrace(); + } + + } + + private String getUsername(Message message) { + User user = message.getFrom(); + String username = user.getUserName(); + if (username == null) { + return defaultUsername; + } + return username; + } +} diff --git a/api/src/main/java/cz/cvut/fit/sp/bot_builder/text_bot/TextBotFactory.java b/api/src/main/java/cz/cvut/fit/sp/bot_builder/text_bot/TextBotFactory.java new file mode 100644 index 0000000..149e084 --- /dev/null +++ b/api/src/main/java/cz/cvut/fit/sp/bot_builder/text_bot/TextBotFactory.java @@ -0,0 +1,25 @@ +package cz.cvut.fit.sp.bot_builder.text_bot; + +import cz.cvut.fit.base.bot_builder.base.base_bot.BaseBotFactory; +import cz.cvut.fit.base.bot_builder.base.base_bot.BotType; +import cz.cvut.fit.base.bot_builder.base.base_bot.ChatBotTextAnswer; +import cz.cvut.fit.base.bot_builder.base.base_bot.UserRequest; +import lombok.AllArgsConstructor; +import org.telegram.telegrambots.extensions.bots.commandbot.TelegramLongPollingCommandBot; + +import java.util.Map; + +@AllArgsConstructor +public class TextBotFactory implements BaseBotFactory<TelegramLongPollingCommandBot> { + + private Map<UserRequest, ChatBotTextAnswer> userCommands; + + public TelegramLongPollingCommandBot getBot(BotType type, String botName, String token) { + switch (type) { + case TEXT_BOT: + return new TelegramTextBot(userCommands, botName, token); + default: + throw new IllegalStateException("Such bot type is not acceptable%s".formatted(type)); + } + } +} diff --git a/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseBotFactory.java b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseBotFactory.java new file mode 100644 index 0000000..f059286 --- /dev/null +++ b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseBotFactory.java @@ -0,0 +1,7 @@ +package cz.cvut.fit.base.bot_builder.base.base_bot; + +import org.telegram.telegrambots.extensions.bots.commandbot.TelegramLongPollingCommandBot; + +public interface BaseBotFactory<T extends TelegramLongPollingCommandBot> { + T getBot(BotType type, String botName, String token); +} diff --git a/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTelegramBot.java b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTelegramBot.java index ad69496..62882da 100644 --- a/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTelegramBot.java +++ b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTelegramBot.java @@ -1,8 +1,6 @@ package cz.cvut.fit.base.bot_builder.base.base_bot; -import lombok.AllArgsConstructor; import lombok.Getter; -import lombok.NoArgsConstructor; import lombok.Setter; import org.telegram.telegrambots.extensions.bots.commandbot.TelegramLongPollingCommandBot; import org.telegram.telegrambots.meta.api.objects.Update; @@ -10,29 +8,29 @@ import org.telegram.telegrambots.meta.api.objects.Update; import java.util.List; import java.util.logging.Logger; -@AllArgsConstructor -@NoArgsConstructor -public class BaseTelegramBot extends TelegramLongPollingCommandBot { - private static final Logger logger = Logger.getLogger(BaseTelegramBot.class.toString()); +@Getter +@Setter +public abstract class BaseTelegramBot extends TelegramLongPollingCommandBot { - @Getter - @Setter - private String username; - @Getter - @Setter - private String token; + protected static final Logger logger = Logger.getLogger(BaseTelegramBot.class.toString()); - @Override - public String getBotUsername() { - return username; + protected static final String defaultUsername = "Unknown"; + + private final String botName; + private final String token; + + protected BaseTelegramBot(String botName, String token) { + this.botName = botName; + this.token = token; } @Override - public void processNonCommandUpdate(Update update) { - // Todo implement command update.... + public String getBotUsername() { + return botName; } + @Override public String getBotToken() { return token; diff --git a/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTextBotHandler.java b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTextBotHandler.java deleted file mode 100644 index efa7261..0000000 --- a/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTextBotHandler.java +++ /dev/null @@ -1,39 +0,0 @@ -package cz.cvut.fit.base.bot_builder.base.base_bot; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import org.telegram.telegrambots.meta.api.methods.send.SendMessage; -import org.telegram.telegrambots.meta.api.objects.Message; - -import java.util.List; -import java.util.Optional; - -@AllArgsConstructor -@NoArgsConstructor -public abstract class BaseTextBotHandler implements BaseTextHandlerInterface { - - @Getter - @Setter - private List<UserRequest> botCommands; - - @Override - public Optional<SendMessage> executeRequest(Long chatId, String username, Message message) { - // Try to find user request in available requests list - Optional<UserRequest> request = botCommands.stream().filter( - (req) -> req.equals(new UserRequest(message.getText()))).findFirst(); - if (request.isEmpty()) { - // Request not found... - return Optional.empty(); - } - - return produceAnswer(request.get()); - } - - @Override - public Optional<SendMessage> produceAnswer(UserRequest request) { - // Todo implement produce answer method... - return Optional.empty(); - } -} diff --git a/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTextHandlerInterface.java b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTextHandlerInterface.java index 3b13ed5..3d13301 100644 --- a/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTextHandlerInterface.java +++ b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BaseTextHandlerInterface.java @@ -3,19 +3,19 @@ package cz.cvut.fit.base.bot_builder.base.base_bot; import org.telegram.telegrambots.meta.api.methods.send.SendMessage; import org.telegram.telegrambots.meta.api.objects.Message; +import java.util.Map; import java.util.Optional; public interface BaseTextHandlerInterface { /** * Identify user response and execute its command - * @param chatId - current active telegram chatId to response - * @param username - username of sender + * * @param message - sender's request */ - Optional<SendMessage> executeRequest(Long chatId, String username, Message message); + Optional<SendMessage> executeRequest(String chatId, String username, Message message); /** * Produce answer for user command */ - Optional<SendMessage> produceAnswer(UserRequest request); + Optional<SendMessage> produceAnswer(Map.Entry<UserRequest, ChatBotTextAnswer> requestOptional, String chatId); } diff --git a/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BotType.java b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BotType.java new file mode 100644 index 0000000..fb8418f --- /dev/null +++ b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/BotType.java @@ -0,0 +1,5 @@ +package cz.cvut.fit.base.bot_builder.base.base_bot; + +public enum BotType { + TEXT_BOT +} diff --git a/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/ChatBotTextAnswer.java b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/ChatBotTextAnswer.java index 6c2fff2..0dc8b5c 100644 --- a/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/ChatBotTextAnswer.java +++ b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/ChatBotTextAnswer.java @@ -1,23 +1,17 @@ package cz.cvut.fit.base.bot_builder.base.base_bot; -import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.RequiredArgsConstructor; import lombok.Setter; import org.telegram.telegrambots.meta.api.methods.send.SendMessage; -@AllArgsConstructor -public class ChatBotTextAnswer { - @Getter - @Setter - private String chatId; - @Getter - @Setter - private String username; - @Getter - @Setter - private String answer; +import javax.validation.constraints.NotNull; - public SendMessage convertToMessage() { +@Getter +@Setter +@RequiredArgsConstructor +public record ChatBotTextAnswer(@NotNull String answer) { + public SendMessage convertToMessage(@NotNull String chatId) { SendMessage msg = new SendMessage(); msg.setChatId(chatId); msg.setText(answer); diff --git a/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/UserRequest.java b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/UserRequest.java index bd4229f..e0923e7 100644 --- a/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/UserRequest.java +++ b/base/src/main/java/cz/cvut/fit/base/bot_builder/base/base_bot/UserRequest.java @@ -1,12 +1,11 @@ package cz.cvut.fit.base.bot_builder.base.base_bot; -import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.RequiredArgsConstructor; import lombok.Setter; -@AllArgsConstructor -public class UserRequest { - @Getter - @Setter - private String textRequest; +@Getter +@Setter +@RequiredArgsConstructor +public record UserRequest(String textRequest) { } -- GitLab