diff --git a/pom.xml b/pom.xml
index fd4f8bf..79a273f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,6 +14,7 @@
telegram-consumer
telegram-context
telegram-simple
+ telegram-webhook
Telegram Bot
@@ -37,11 +38,14 @@
UTF-8
UTF-8
- 0.0.53
+ 0.0.54-SNAPSHOT
6.3.0
+
+ 2.30.1
+
2.6.0
@@ -245,6 +249,24 @@
telegrambotsextensions
${telegrambots.ver}
+
+
+ org.jboss.spec.javax.ws.rs
+ jboss-jaxrs-api_2.1_spec
+ 2.0.1.Final
+
+
+
+ io.smallrye.reactive
+ smallrye-mutiny-vertx-core
+ ${smallrye.mutiny.vertx.core.version}
+
+
+
+ io.smallrye.reactive
+ smallrye-mutiny-vertx-core
+ ${smallrye.mutiny.vertx.core.version}
+
diff --git a/telegram-consumer/telegram-consumer-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/consumer/EventDistributorService.java b/telegram-consumer/telegram-consumer-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/consumer/EventDistributorService.java
index e7bbc50..34096a6 100644
--- a/telegram-consumer/telegram-consumer-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/consumer/EventDistributorService.java
+++ b/telegram-consumer/telegram-consumer-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/consumer/EventDistributorService.java
@@ -9,7 +9,7 @@ import dev.struchkov.godfather.telegram.main.consumer.MessageMailConvert;
import dev.struchkov.godfather.telegram.main.consumer.SubscribeConvert;
import dev.struchkov.godfather.telegram.main.consumer.UnsubscribeConvert;
import dev.struchkov.godfather.telegram.quarkus.context.service.EventDistributor;
-import dev.struchkov.godfather.telegram.quarkus.core.TelegramConnectBot;
+import dev.struchkov.godfather.telegram.quarkus.context.service.TelegramConnect;
import io.smallrye.mutiny.Multi;
import io.smallrye.mutiny.Uni;
import org.jetbrains.annotations.NotNull;
@@ -18,6 +18,7 @@ import org.telegram.telegrambots.meta.api.objects.ChatMemberUpdated;
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.api.objects.payments.PreCheckoutQuery;
import java.util.List;
import java.util.Map;
@@ -35,9 +36,9 @@ public class EventDistributorService implements EventDistributor {
private final Map> eventHandlerMap;
- public EventDistributorService(TelegramConnectBot telegramConnectBot, List eventProviders) {
+ public EventDistributorService(TelegramConnect telegramConnect, List eventProviders) {
this.eventHandlerMap = eventProviders.stream().collect(Collectors.groupingBy(EventHandler::getEventType));
- telegramConnectBot.initEventDistributor(this);
+ telegramConnect.initEventDistributor(this);
}
@Override
@@ -47,52 +48,66 @@ public class EventDistributorService implements EventDistributor {
v -> {
final Message message = update.getMessage();
final CallbackQuery callbackQuery = update.getCallbackQuery();
- if (checkNotNull(message)) {
- if (!isEvent(message)) {
- final Optional> optHandlers = getHandler(Mail.TYPE);
- if (optHandlers.isPresent()) {
- return Multi.createFrom().iterable(optHandlers.get())
- .onItem().transformToUni(
- eventHandler -> eventHandler.handle(MessageMailConvert.apply(message))
- ).concatenate().toUni().replaceWithVoid();
- }
- return Uni.createFrom().voidItem();
+ final PreCheckoutQuery preCheckoutQuery = update.getPreCheckoutQuery();
+
+ if (checkNotNull(preCheckoutQuery)) {
+ final Optional> optHandlers = getHandler(preCheckoutQuery.getClass().getName());
+ if (optHandlers.isPresent()) {
+ return Multi.createFrom().iterable(optHandlers.get())
+ .onItem().transformToUni(
+ eventHandler -> eventHandler.handle(preCheckoutQuery)
+ ).concatenate().collect().asList().replaceWithVoid();
}
+ return Uni.createFrom().voidItem();
}
+
+ if (checkNotNull(message) && (!isEvent(message))) {
+ final Optional> optHandlers = getHandler(Mail.class.getName());
+ if (optHandlers.isPresent()) {
+ return Multi.createFrom().iterable(optHandlers.get())
+ .onItem().transformToUni(
+ eventHandler -> eventHandler.handle(MessageMailConvert.apply(message))
+ ).concatenate().collect().asList().replaceWithVoid();
+ }
+ return Uni.createFrom().voidItem();
+ }
+
if (checkNotNull(callbackQuery)) {
- final Optional> optHandlers = getHandler(Mail.TYPE);
+ final Optional> optHandlers = getHandler(Mail.class.getName());
if (optHandlers.isPresent()) {
return Multi.createFrom().iterable(optHandlers.get())
.onItem().transformToUni(
eventHandler -> eventHandler.handle(CallbackQueryConvert.apply(callbackQuery))
- ).concatenate().toUni().replaceWithVoid();
+ ).concatenate().collect().asList().replaceWithVoid();
}
return Uni.createFrom().voidItem();
}
+
if (checkNotNull(update.getMyChatMember())) {
final ChatMemberUpdated chatMember = update.getMyChatMember();
if ("kicked".equals(chatMember.getNewChatMember().getStatus())) {
- final Optional> optHandlers = getHandler(Unsubscribe.TYPE);
+ final Optional> optHandlers = getHandler(Unsubscribe.class.getName());
if (optHandlers.isPresent()) {
return Multi.createFrom().iterable(optHandlers.get())
.onItem().transformToUni(
eventHandler -> eventHandler.handle(UnsubscribeConvert.apply(chatMember))
- ).concatenate().toUni().replaceWithVoid();
+ ).concatenate().collect().asList().replaceWithVoid();
}
return Uni.createFrom().voidItem();
}
if ("member".equals(chatMember.getNewChatMember().getStatus())) {
- final Optional> optHandlers = getHandler(Subscribe.TYPE);
+ final Optional> optHandlers = getHandler(Subscribe.class.getName());
if (optHandlers.isPresent()) {
return Multi.createFrom().iterable(optHandlers.get())
.onItem().transformToUni(
eventHandler -> eventHandler.handle(SubscribeConvert.apply(chatMember))
- ).concatenate().toUni().replaceWithVoid();
+ ).concatenate().collect().asList().replaceWithVoid();
}
return Uni.createFrom().voidItem();
}
}
+
return Uni.createFrom().voidItem();
}
);
diff --git a/telegram-consumer/telegram-consumer-simple/src/main/java/dev/struchkov/godfather/telegram/simple/consumer/EventDistributorService.java b/telegram-consumer/telegram-consumer-simple/src/main/java/dev/struchkov/godfather/telegram/simple/consumer/EventDistributorService.java
index d6f857a..8c35273 100644
--- a/telegram-consumer/telegram-consumer-simple/src/main/java/dev/struchkov/godfather/telegram/simple/consumer/EventDistributorService.java
+++ b/telegram-consumer/telegram-consumer-simple/src/main/java/dev/struchkov/godfather/telegram/simple/consumer/EventDistributorService.java
@@ -11,13 +11,15 @@ import dev.struchkov.godfather.telegram.main.consumer.MessageMailConvert;
import dev.struchkov.godfather.telegram.main.consumer.SubscribeConvert;
import dev.struchkov.godfather.telegram.main.consumer.UnsubscribeConvert;
import dev.struchkov.godfather.telegram.simple.context.service.EventDistributor;
-import dev.struchkov.godfather.telegram.simple.core.TelegramConnectBot;
+import dev.struchkov.godfather.telegram.simple.context.service.TelegramConnect;
+import dev.struchkov.haiti.utils.Checker;
import org.jetbrains.annotations.NotNull;
import org.telegram.telegrambots.meta.api.objects.CallbackQuery;
import org.telegram.telegrambots.meta.api.objects.ChatMemberUpdated;
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.api.objects.payments.PreCheckoutQuery;
import java.util.List;
import java.util.Map;
@@ -33,20 +35,25 @@ public class EventDistributorService implements EventDistributor {
private final Map> eventProviderMap;
- public EventDistributorService(TelegramConnectBot telegramConnectBot, List eventProviders) {
+ public EventDistributorService(TelegramConnect telegramConnect, List eventProviders) {
this.eventProviderMap = eventProviders.stream().collect(Collectors.groupingBy(EventHandler::getEventType));
- telegramConnectBot.initEventDistributor(this);
+ telegramConnect.initEventDistributor(this);
}
@Override
public void processing(@NotNull Update update) {
final Message message = update.getMessage();
final CallbackQuery callbackQuery = update.getCallbackQuery();
- if (message != null) {
- if (!isEvent(message)) {
- processionMessage(message);
- return;
- }
+ final PreCheckoutQuery preCheckoutQuery = update.getPreCheckoutQuery();
+
+ if (Checker.checkNotNull(preCheckoutQuery)) {
+ getHandler(preCheckoutQuery.getClass().getName()).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(preCheckoutQuery)));
+ return;
+ }
+
+ if (message != null && (!isEvent(message))) {
+ processionMessage(message);
+ return;
}
if (callbackQuery != null) {
processionCallback(callbackQuery);
@@ -55,11 +62,11 @@ public class EventDistributorService implements EventDistributor {
if (update.getMyChatMember() != null) {
final ChatMemberUpdated chatMember = update.getMyChatMember();
if ("kicked".equals(chatMember.getNewChatMember().getStatus())) {
- getHandler(Unsubscribe.TYPE).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(UnsubscribeConvert.apply(chatMember))));
+ getHandler(Unsubscribe.class.getName()).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(UnsubscribeConvert.apply(chatMember))));
return;
}
if ("member".equals(chatMember.getNewChatMember().getStatus())) {
- getHandler(Subscribe.TYPE).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(SubscribeConvert.apply(chatMember))));
+ getHandler(Subscribe.class.getName()).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(SubscribeConvert.apply(chatMember))));
return;
}
}
@@ -71,7 +78,7 @@ public class EventDistributorService implements EventDistributor {
} else {
final Mail mail = CallbackQueryConvert.apply(callbackQuery);
- getHandler(Mail.TYPE).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(mail)));
+ getHandler(Mail.class.getName()).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(mail)));
}
}
@@ -79,10 +86,10 @@ public class EventDistributorService implements EventDistributor {
final Long fromId = message.getChat().getId();
if (fromId < 0) {
final ChatMail chatMail = MessageChatMailConvert.apply(message);
- getHandler(ChatMail.TYPE).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(chatMail)));
+ getHandler(ChatMail.class.getName()).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(chatMail)));
} else {
final Mail mail = MessageMailConvert.apply(message);
- getHandler(Mail.TYPE).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(mail)));
+ getHandler(Mail.class.getName()).ifPresent(handlers -> handlers.forEach(handler -> handler.handle(mail)));
}
}
diff --git a/telegram-context/telegram-context-main/src/main/java/dev/struchkov/godfather/telegram/main/context/BoxAnswerPayload.java b/telegram-context/telegram-context-main/src/main/java/dev/struchkov/godfather/telegram/main/context/BoxAnswerPayload.java
index 89cc10e..d441fcb 100644
--- a/telegram-context/telegram-context-main/src/main/java/dev/struchkov/godfather/telegram/main/context/BoxAnswerPayload.java
+++ b/telegram-context/telegram-context-main/src/main/java/dev/struchkov/godfather/telegram/main/context/BoxAnswerPayload.java
@@ -2,11 +2,13 @@ package dev.struchkov.godfather.telegram.main.context;
import dev.struchkov.haiti.utils.Exceptions;
import dev.struchkov.haiti.utils.container.ContextKey;
+import org.telegram.telegrambots.meta.api.methods.invoices.SendInvoice;
public final class BoxAnswerPayload {
public static final ContextKey DISABLE_WEB_PAGE_PREVIEW = ContextKey.of("DISABLE_WEB_PAGE_PREVIEW", Boolean.class);
public static final ContextKey DISABLE_NOTIFICATION = ContextKey.of("DISABLE_NOTIFICATION", Boolean.class);
+ public static final ContextKey INVOICE = ContextKey.of("INVOICE", SendInvoice.class);
private BoxAnswerPayload() {
Exceptions.utilityClass();
diff --git a/telegram-context/telegram-context-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/context/service/TelegramConnect.java b/telegram-context/telegram-context-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/context/service/TelegramConnect.java
new file mode 100644
index 0000000..bf89437
--- /dev/null
+++ b/telegram-context/telegram-context-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/context/service/TelegramConnect.java
@@ -0,0 +1,13 @@
+package dev.struchkov.godfather.telegram.quarkus.context.service;
+
+import org.telegram.telegrambots.meta.bots.AbsSender;
+
+public interface TelegramConnect {
+
+ AbsSender getAbsSender();
+
+ String getToken();
+
+ void initEventDistributor(EventDistributor eventDistributorService);
+
+}
diff --git a/telegram-context/telegram-context-main/src/main/java/dev/struchkov/godfather/telegram/main/context/TelegramConnect.java b/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/service/TelegramConnect.java
similarity index 51%
rename from telegram-context/telegram-context-main/src/main/java/dev/struchkov/godfather/telegram/main/context/TelegramConnect.java
rename to telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/service/TelegramConnect.java
index f4e96f0..631700b 100644
--- a/telegram-context/telegram-context-main/src/main/java/dev/struchkov/godfather/telegram/main/context/TelegramConnect.java
+++ b/telegram-context/telegram-context-simple/src/main/java/dev/struchkov/godfather/telegram/simple/context/service/TelegramConnect.java
@@ -1,4 +1,4 @@
-package dev.struchkov.godfather.telegram.main.context;
+package dev.struchkov.godfather.telegram.simple.context.service;
import org.telegram.telegrambots.meta.bots.AbsSender;
@@ -8,4 +8,6 @@ public interface TelegramConnect {
String getToken();
+ void initEventDistributor(EventDistributor eventDistributorService);
+
}
diff --git a/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/TelegramDefaultConnect.java b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/TelegramDefaultConnect.java
new file mode 100644
index 0000000..589a9fe
--- /dev/null
+++ b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/TelegramDefaultConnect.java
@@ -0,0 +1,89 @@
+package dev.struchkov.godfather.telegram.quarkus.core;
+
+import dev.struchkov.godfather.telegram.domain.config.ProxyConfig;
+import dev.struchkov.godfather.telegram.domain.config.TelegramBotConfig;
+import dev.struchkov.godfather.telegram.quarkus.context.service.EventDistributor;
+import dev.struchkov.godfather.telegram.quarkus.context.service.TelegramConnect;
+import org.jetbrains.annotations.NotNull;
+import org.telegram.telegrambots.bots.DefaultAbsSender;
+import org.telegram.telegrambots.bots.DefaultBotOptions;
+import org.telegram.telegrambots.meta.bots.AbsSender;
+
+import java.net.Authenticator;
+import java.net.PasswordAuthentication;
+
+import static dev.struchkov.haiti.utils.Checker.checkNotNull;
+
+public class TelegramDefaultConnect implements TelegramConnect {
+
+ private final String botToken;
+ private final AbsSender absSender;
+
+ public TelegramDefaultConnect(TelegramBotConfig connectConfig) {
+ this.botToken = connectConfig.getToken();
+ this.absSender = createAbsSender(connectConfig);
+ }
+
+ @NotNull
+ private DefaultAbsSender createAbsSender(TelegramBotConfig connectConfig) {
+ final DefaultBotOptions botOptions = new DefaultBotOptions();
+
+ final ProxyConfig proxyConfig = connectConfig.getProxyConfig();
+ if (checkNotNull(proxyConfig) && proxyConfig.isEnable()) {
+ if (checkNotNull(proxyConfig.getPassword())) {
+ try {
+ Authenticator.setDefault(new Authenticator() {
+ @Override
+ protected PasswordAuthentication getPasswordAuthentication() {
+ return new PasswordAuthentication(
+ proxyConfig.getUser(),
+ proxyConfig.getPassword().toCharArray()
+ );
+ }
+ });
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ if (checkNotNull(proxyConfig.getHost())) {
+ System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");
+// System.setProperty("javax.net.debug", "all");
+ botOptions.setProxyHost(proxyConfig.getHost());
+ botOptions.setProxyPort(proxyConfig.getPort());
+ botOptions.setProxyType(convertProxyType(proxyConfig.getType()));
+ }
+ }
+
+ return new DefaultAbsSender(botOptions) {
+ @Override
+ public String getBotToken() {
+ return botToken;
+ }
+ };
+ }
+
+ private DefaultBotOptions.ProxyType convertProxyType(ProxyConfig.Type type) {
+ return switch (type) {
+ case SOCKS5 -> DefaultBotOptions.ProxyType.SOCKS5;
+ case SOCKS4 -> DefaultBotOptions.ProxyType.SOCKS4;
+ case HTTP -> DefaultBotOptions.ProxyType.HTTP;
+ };
+ }
+
+ @Override
+ public AbsSender getAbsSender() {
+ return absSender;
+ }
+
+ @Override
+ public String getToken() {
+ return botToken;
+ }
+
+ @Override
+ public void initEventDistributor(EventDistributor eventDistributorService) {
+ throw new IllegalStateException();
+ }
+
+}
diff --git a/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/TelegramConnectBot.java b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/TelegramPollingConnect.java
similarity index 72%
rename from telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/TelegramConnectBot.java
rename to telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/TelegramPollingConnect.java
index 60f9e0d..75853c6 100644
--- a/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/TelegramConnectBot.java
+++ b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/TelegramPollingConnect.java
@@ -3,11 +3,9 @@ package dev.struchkov.godfather.telegram.quarkus.core;
import dev.struchkov.godfather.telegram.domain.config.ProxyConfig;
import dev.struchkov.godfather.telegram.domain.config.ProxyConfig.Type;
import dev.struchkov.godfather.telegram.domain.config.TelegramBotConfig;
-import dev.struchkov.godfather.telegram.main.context.TelegramConnect;
import dev.struchkov.godfather.telegram.quarkus.context.service.EventDistributor;
-import dev.struchkov.godfather.telegram.quarkus.context.service.TelegramBot;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import dev.struchkov.godfather.telegram.quarkus.context.service.TelegramConnect;
+import lombok.extern.slf4j.Slf4j;
import org.telegram.telegrambots.bots.DefaultBotOptions;
import org.telegram.telegrambots.meta.TelegramBotsApi;
import org.telegram.telegrambots.meta.bots.AbsSender;
@@ -24,35 +22,16 @@ import static dev.struchkov.haiti.utils.Checker.checkNotNull;
*
* @author upagge [30.01.2020]
*/
-public class TelegramConnectBot implements TelegramConnect {
+@Slf4j
+public class TelegramPollingConnect implements TelegramConnect {
- private static final Logger log = LoggerFactory.getLogger(TelegramConnectBot.class);
+ private TelegramPollingBot pollingBot;
- private TelegramBot telegramBot;
- private final TelegramBotConfig telegramBotConfig;
-
- public TelegramConnectBot(TelegramBotConfig telegramBotConfig) {
- this.telegramBotConfig = telegramBotConfig;
+ public TelegramPollingConnect(TelegramBotConfig telegramBotConfig) {
initLongPolling(telegramBotConfig);
}
-// public TelegramConnect(TelegramWebHookConfig telegramWebHookConfig) {
-// initWebHook(telegramWebHookConfig);
-// }
-//
-// private void initWebHook(TelegramWebHookConfig telegramWebHookConfig) {
-// TelegramBotsApi botapi = new TelegramBotsApi();
-// final TelegramWebhookBot telegramWebhookBot = new TelegramHookBot(telegramWebHookConfig);
-// try {
-// botapi.registerBot(telegramWebhookBot);
-// this.telegramBot = (TelegramBot) telegramWebhookBot;
-// } catch (TelegramApiRequestException e) {
-// e.printStackTrace();
-// }
-// }
-
private void initLongPolling(TelegramBotConfig telegramBotConfig) {
-
final ProxyConfig proxyConfig = telegramBotConfig.getProxyConfig();
if (checkNotNull(proxyConfig) && proxyConfig.isEnable() && checkNotNull(proxyConfig.getPassword()) && !"".equals(proxyConfig.getPassword())) {
try {
@@ -86,12 +65,12 @@ public class TelegramConnectBot implements TelegramConnect {
botapi = new TelegramBotsApi(DefaultBotSession.class);
botapi.registerBot(bot);
- this.telegramBot = bot;
+ this.pollingBot = bot;
} else {
final TelegramPollingBot bot = new TelegramPollingBot(telegramBotConfig);
botapi = new TelegramBotsApi(DefaultBotSession.class);
botapi.registerBot(bot);
- this.telegramBot = bot;
+ this.pollingBot = bot;
}
} catch (TelegramApiException e) {
log.error(e.getMessage());
@@ -106,17 +85,19 @@ public class TelegramConnectBot implements TelegramConnect {
};
}
- public void initEventDistributor(EventDistributor eventDistributor) {
- telegramBot.initEventDistributor(eventDistributor);
+ @Override
+ public String getToken() {
+ return pollingBot.getBotToken();
}
- public String getToken() {
- return telegramBotConfig.getToken();
+ @Override
+ public void initEventDistributor(EventDistributor eventDistributorService) {
+ pollingBot.initEventDistributor(eventDistributorService);
}
@Override
public AbsSender getAbsSender() {
- return telegramBot.getAdsSender();
+ return pollingBot.getAdsSender();
}
}
diff --git a/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/TelegramWebhookBot.java b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/TelegramWebhookBot.java
new file mode 100644
index 0000000..037f6fb
--- /dev/null
+++ b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/TelegramWebhookBot.java
@@ -0,0 +1,53 @@
+package dev.struchkov.godfather.telegram.quarkus.core;
+
+import dev.struchkov.godfather.telegram.domain.config.TelegramBotConfig;
+import dev.struchkov.godfather.telegram.quarkus.context.service.EventDistributor;
+import dev.struchkov.godfather.telegram.quarkus.context.service.TelegramBot;
+import lombok.extern.slf4j.Slf4j;
+import org.telegram.telegrambots.meta.api.methods.BotApiMethod;
+import org.telegram.telegrambots.meta.api.objects.Update;
+import org.telegram.telegrambots.meta.bots.AbsSender;
+
+@Slf4j
+public class TelegramWebhookBot extends org.telegram.telegrambots.bots.TelegramWebhookBot implements TelegramBot {
+
+ private final TelegramBotConfig telegramBotConfig;
+ private EventDistributor eventDistributor;
+
+ public TelegramWebhookBot(TelegramBotConfig telegramBotConfig) {
+ this.telegramBotConfig = telegramBotConfig;
+ }
+
+ @Override
+ public String getBotUsername() {
+ return telegramBotConfig.getUsername();
+ }
+
+ @Override
+ public String getBotToken() {
+ return telegramBotConfig.getToken();
+ }
+
+ @Override
+ public BotApiMethod> onWebhookUpdateReceived(Update update) {
+ eventDistributor.processing(update).subscribe().with(v -> {
+ });
+ return null;
+ }
+
+ @Override
+ public String getBotPath() {
+ return "bot";
+ }
+
+ @Override
+ public AbsSender getAdsSender() {
+ return this;
+ }
+
+ @Override
+ public void initEventDistributor(EventDistributor eventDistributor) {
+ this.eventDistributor = eventDistributor;
+ }
+
+}
diff --git a/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/TelegramWebhookConnect.java b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/TelegramWebhookConnect.java
new file mode 100644
index 0000000..08ee929
--- /dev/null
+++ b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/TelegramWebhookConnect.java
@@ -0,0 +1,48 @@
+package dev.struchkov.godfather.telegram.quarkus.core;
+
+import dev.struchkov.godfather.telegram.domain.config.TelegramBotConfig;
+import dev.struchkov.godfather.telegram.quarkus.context.service.EventDistributor;
+import dev.struchkov.godfather.telegram.quarkus.context.service.TelegramConnect;
+import lombok.extern.slf4j.Slf4j;
+import org.telegram.telegrambots.meta.api.methods.updates.SetWebhook;
+import org.telegram.telegrambots.meta.bots.AbsSender;
+import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
+
+@Slf4j
+public class TelegramWebhookConnect implements TelegramConnect {
+
+ private TelegramWebhookBot webhookBot;
+
+ public TelegramWebhookConnect(TelegramBotConfig telegramBotConfig) {
+ initWebHook(telegramBotConfig);
+ }
+
+ private void initWebHook(TelegramBotConfig telegramBotConfig) {
+// try {
+ final TelegramWebhookBot bot = new TelegramWebhookBot(telegramBotConfig);
+ final SetWebhook setWebhook = SetWebhook.builder()
+ .url(telegramBotConfig.getWebHookUrl())
+ .build();
+// bot.setWebhook(setWebhook);
+ webhookBot = bot;
+// } catch (TelegramApiException e) {
+// log.error(e.getMessage());
+// }
+ }
+
+ @Override
+ public AbsSender getAbsSender() {
+ return webhookBot.getAdsSender();
+ }
+
+ @Override
+ public String getToken() {
+ return webhookBot.getBotToken();
+ }
+
+ @Override
+ public void initEventDistributor(EventDistributor eventDistributorService) {
+ webhookBot.initEventDistributor(eventDistributorService);
+ }
+
+}
diff --git a/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/handler/PreCheckoutQueryHandler.java b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/handler/PreCheckoutQueryHandler.java
new file mode 100644
index 0000000..d689e0a
--- /dev/null
+++ b/telegram-core/telegram-core-quarkus/src/main/java/dev/struchkov/godfather/telegram/quarkus/core/handler/PreCheckoutQueryHandler.java
@@ -0,0 +1,52 @@
+package dev.struchkov.godfather.telegram.quarkus.core.handler;
+
+import dev.struchkov.godfather.quarkus.context.service.EventHandler;
+import dev.struchkov.godfather.telegram.quarkus.context.service.TelegramConnect;
+import io.smallrye.mutiny.Uni;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.telegram.telegrambots.meta.api.methods.AnswerPreCheckoutQuery;
+import org.telegram.telegrambots.meta.api.methods.AnswerShippingQuery;
+import org.telegram.telegrambots.meta.api.objects.payments.PreCheckoutQuery;
+import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
+import org.telegram.telegrambots.meta.exceptions.TelegramApiValidationException;
+
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionStage;
+
+@Slf4j
+@RequiredArgsConstructor
+public class PreCheckoutQueryHandler implements EventHandler {
+
+ private final TelegramConnect telegramConnect;
+
+ @Override
+ public Uni handle(PreCheckoutQuery event) {
+ final AnswerPreCheckoutQuery answerPreCheckoutQuery = new AnswerPreCheckoutQuery();
+ answerPreCheckoutQuery.setPreCheckoutQueryId(event.getId());
+ answerPreCheckoutQuery.setOk(true);
+ try {
+ answerPreCheckoutQuery.validate();
+ } catch (TelegramApiValidationException e) {
+ log.error(e.getMessage(), e);
+ }
+ return Uni.createFrom().completionStage(
+ execAsync(answerPreCheckoutQuery)
+ ).replaceWithVoid();
+ }
+
+ public CompletionStage