TelegramBots Java: Отправка сообщения без update

Я хочу создать бота, который после /start будет периодически сам отправлять мне сообщения с результатом выполнения определенного действия без необходимости каждый раз писать ему для получения ответа. Сейчас бот отправляет сообщение только в ответ на моё сообщение. Я хочу чтобы он отправлял сообщение на заданный ChatId, не дожидаясь пока я ему напишу. Каким образом это можно реализовать?


Ответы (1 шт):

Автор решения: Михаил Ребров

com.github.pengrad:java-telegram-bot-api

Добавляем зависимость

<dependency>
  <groupId>com.github.pengrad</groupId>
  <artifactId>java-telegram-bot-api</artifactId>
  <version>6.2.0</version>
</dependency>

Отправяем сообщение:

// Созаем бота
TelegramBot bot = new TelegramBot("BOT_TOKEN");

// Отправляем сообщение
Long chatId = 1234567L;
SendResponse response = bot.execute(new SendMessage(chatId, "Hello!"));

rubenlagus/TelegramBots

Добавляем зависимость

   <dependency>
      <groupId>org.telegram</groupId>
      <artifactId>telegrambots</artifactId>
      <version>6.1.0</version>
   </dependency>

Здесь нам для начала нужно переопределить класс для нашего бота:

public  class StackoverflowBot extends TelegramLongPollingBot {
    @Override
    public void onUpdateReceived(Update update) {
        System.out.println("Тут пишем обработчик событий бота");
    }

    @Override
    public String getBotUsername() {
               // тут пишем username нашего бота
        return "______bot"; 
    }

    @Override
    public String getBotToken() {
               // а тут наш токен
        return "549*******:AAF******************************";
    }
}

Регистрируем нашего бота

try {
    TelegramBotsApi botsApi = new TelegramBotsApi(DefaultBotSession.class);
    TelegramLongPollingBot  bot = new StackoverflowBot();
    botsApi.registerBot(bot);

} catch (TelegramApiException e) {
    throw new RuntimeException(e);
}

И далее можем отправять сообщение:

Long chatId = 143195411L;
SendMessage message = new SendMessage();
message.setChatId(chatId.toString());
message.setText("Hello\nfrom StackOverflow");
bot.execute(message);

И все вместе:

try {
    TelegramBotsApi botsApi = new TelegramBotsApi(DefaultBotSession.class);
    TelegramLongPollingBot  bot = new StackoverflowBot();
    botsApi.registerBot(bot);

    Long chatId = 143195411L;
    SendMessage message = new SendMessage();
    message.setChatId(chatId.toString());
    message.setText("Hello\nfrom StackOverflow");
    bot.execute(message);
} catch (TelegramApiException e) {
    throw new RuntimeException(e);
}

И как результат: введите сюда описание изображения

Сорри за ленту.
В боте она длинная и чистить ее долго, а нового бота чисто для вопроса создавать как-то черезчур

→ Ссылка