diff --git a/pom.xml b/pom.xml index aa439a9..a919c35 100644 --- a/pom.xml +++ b/pom.xml @@ -10,6 +10,7 @@ 3.0.9 + alerting-tg-bot alerting-tg-bot 1.0.0 @@ -23,6 +24,7 @@ 8023 ${server.port} ${management.port} 2.0.4 + 9.0.0 @@ -80,8 +82,18 @@ org.telegram - telegrambots-spring-boot-starter - 6.9.7.1 + telegrambots-springboot-longpolling-starter + ${org.telegram.telegrambots.version} + + + org.telegram + telegrambots-client + ${org.telegram.telegrambots.version} + + + org.telegram + telegrambots-meta + ${org.telegram.telegrambots.version} javax.ws.rs diff --git a/src/main/java/dev/vality/alerting/tg/bot/config/AlertBotConfig.java b/src/main/java/dev/vality/alerting/tg/bot/config/AlertBotConfig.java index 7508ab8..4927a4b 100644 --- a/src/main/java/dev/vality/alerting/tg/bot/config/AlertBotConfig.java +++ b/src/main/java/dev/vality/alerting/tg/bot/config/AlertBotConfig.java @@ -1,22 +1,18 @@ package dev.vality.alerting.tg.bot.config; -import dev.vality.alerting.tg.bot.service.AlertBot; +import dev.vality.alerting.tg.bot.config.properties.AlertBotProperties; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.telegram.telegrambots.meta.TelegramBotsApi; -import org.telegram.telegrambots.updatesreceivers.DefaultBotSession; +import org.telegram.telegrambots.client.okhttp.OkHttpTelegramClient; +import org.telegram.telegrambots.meta.generics.TelegramClient; @Configuration @RequiredArgsConstructor public class AlertBotConfig { - private final AlertBot alertBot; - @Bean - public TelegramBotsApi telegramBotsApi() throws Exception { - TelegramBotsApi api = new TelegramBotsApi(DefaultBotSession.class); - api.registerBot(alertBot); - return api; + public TelegramClient telegramClient(AlertBotProperties properties) { + return new OkHttpTelegramClient(properties.getToken()); } } diff --git a/src/main/java/dev/vality/alerting/tg/bot/service/AlertBot.java b/src/main/java/dev/vality/alerting/tg/bot/service/AlertBot.java index 912ab21..3c2ed94 100644 --- a/src/main/java/dev/vality/alerting/tg/bot/service/AlertBot.java +++ b/src/main/java/dev/vality/alerting/tg/bot/service/AlertBot.java @@ -6,12 +6,14 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.stereotype.Service; -import org.telegram.telegrambots.bots.TelegramLongPollingBot; +import org.telegram.telegrambots.longpolling.starter.SpringLongPollingBot; +import org.telegram.telegrambots.longpolling.util.LongPollingSingleThreadUpdateConsumer; import org.telegram.telegrambots.meta.api.methods.forum.CreateForumTopic; 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.message.Message; import org.telegram.telegrambots.meta.exceptions.TelegramApiException; +import org.telegram.telegrambots.meta.generics.TelegramClient; import java.util.*; @@ -19,24 +21,25 @@ @Service @RequiredArgsConstructor @EnableScheduling -public class AlertBot extends TelegramLongPollingBot { +public class AlertBot implements SpringLongPollingBot, LongPollingSingleThreadUpdateConsumer { private final AlertBotProperties properties; + private final TelegramClient telegramClient; private static final Map> activeTopics = new HashMap<>(); private static final Set waitingForTopicName = new HashSet<>(); @Override - public String getBotUsername() { - return properties.getName(); + public String getBotToken() { + return properties.getToken(); } @Override - public String getBotToken() { - return properties.getToken(); + public LongPollingSingleThreadUpdateConsumer getUpdatesConsumer() { + return this; } @Override - public void onUpdateReceived(Update update) { + public void consume(Update update) { if (update.hasMessage() && update.getMessage().hasText()) { log.debug("Получено сообщение: message={}, chatId={}, threadId={}, user=@{}, text='{}'", @@ -98,7 +101,7 @@ private void createTopic(Long chatId, String topicName) { .name(topicName) .build(); - Integer messageThreadId = execute(createForumTopic).getMessageThreadId(); + Integer messageThreadId = telegramClient.execute(createForumTopic).getMessageThreadId(); // activeTopics.put(chatId, String.valueOf(messageThreadId)); // Добавляем топик в список, если у чата уже есть созданные топики @@ -231,7 +234,7 @@ private void sendResponse(Long chatId, Integer threadId, String messageText, Str .build(); try { - execute(message); + telegramClient.execute(message); } catch (TelegramApiException e) { log.error("Ошибка при отправке сообщения", e); } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 47332f4..95e6557 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -31,6 +31,14 @@ spring: enabled: always main: allow-bean-definition-overriding: true + cloud: + vault: + kv: + enabled: true + uri: https://vault.vality.dev:443 + authentication: TOKEN + scheme: http + token: "123456" info: version: '@project.version@' @@ -46,3 +54,7 @@ bot: altpay-conversion: ${topicAltpayConversion} failed-machines: ${topicFailedMachines} pending-payments: ${topicPendingPayments} + +alertmanager: + webhook: + url: http://localhost:8082/alertmanager/webhook diff --git a/src/test/java/dev/vality/alerting/tg/bot/WebhookControllerTest.java b/src/test/java/dev/vality/alerting/tg/bot/WebhookControllerTest.java index 009f628..7dddbad 100644 --- a/src/test/java/dev/vality/alerting/tg/bot/WebhookControllerTest.java +++ b/src/test/java/dev/vality/alerting/tg/bot/WebhookControllerTest.java @@ -1,7 +1,6 @@ package dev.vality.alerting.tg.bot; import com.fasterxml.jackson.databind.ObjectMapper; -import dev.vality.alerting.tg.bot.config.AlertBotConfig; import dev.vality.alerting.tg.bot.config.properties.AlertmanagerWebhookProperties; import dev.vality.alerting.tg.bot.controller.WebhookController; import dev.vality.alerting.tg.bot.model.Webhook; @@ -14,6 +13,8 @@ import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.telegram.telegrambots.longpolling.starter.TelegramBotInitializer; +import org.telegram.telegrambots.meta.generics.TelegramClient; import java.nio.charset.StandardCharsets; @@ -42,7 +43,10 @@ public class WebhookControllerTest { AlertBot alertBot; @MockitoBean - AlertBotConfig alertBotConfig; + TelegramClient telegramClient; + + @MockitoBean + TelegramBotInitializer telegramBotInitializer; String webhookJson = """ {