Часть 1 – Теория
Подготовка
Создаем проект, где среди прочего, обязательно указываем maven.
После создания проекта, открываем файл – “pom.xml” и –
- для подключения Телеграм Бот API (версию уточняем на момент создания бота) добавляем строки
<dependencies>
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots</artifactId>
<version>6.0.0</version>
</dependency>
</dependencies>
- для подтверждения, что логирование не ведется (это можно не указывать, но тогда в консоль будут сыпаться ошибки логирования) добавляем строки
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.13</version>
</dependency>
</dependencies>
Полный вид этого файла у меня такой
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.EchoJavaTelegramBot</groupId>
<artifactId>EchoJavaTelegramBot</artifactId>
<version>1.0</version>
<properties>
<maven.compiler.source>18</maven.compiler.source>
<maven.compiler.target>18</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.13</version>
</dependency>
</dependencies>
</project>
Пишем тело бота (скелет)
Требуется создать класс, например MyBot.java, с обязательным-минимальным набором методов
@Override
public void onUpdateReceived(Update update){}
@Override
public String getBotUsername(){}
@Override
public String getBotToken(){}
Класс выглядит так:
import org.telegram.telegrambots.api.methods.send.SendMessage;
import org.telegram.telegrambots.api.objects.Update;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.exceptions.TelegramApiException;
public class MyBot extends TelegramLongPollingBot {
@Override
public void onUpdateReceived(Update update) {
// Реакция на сообщения в чате
}
@Override
public String getBotUsername() {
// геттер имени бота
return null;
}
@Override
public String getBotToken() {
// геттер токена бота
return null;
}
}
Данный класс вызывается в main таким образом:
import org.telegram.telegrambots.meta.TelegramBotsApi;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
import org.telegram.telegrambots.updatesreceivers.DefaultBotSession;
public class Main {
public static void main(String[] args) {
TelegramBotsApi telegramBotsApi = null;
try {
telegramBotsApi = new TelegramBotsApi(DefaultBotSession.class);
telegramBotsApi.registerBot(new MyBot());
} catch (TelegramApiException e) {
throw new RuntimeException(e);
}
}
}
Часть 2 – Пример самого простого эхо
Файл pom.xml привожу к виду:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.echoJavaTelegramBot</groupId>
<artifactId>echoJavaTelegramBot</artifactId>
<version>1.0</version>
<properties>
<maven.compiler.source>18</maven.compiler.source>
<maven.compiler.target>18</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.13</version>
</dependency>
</dependencies>
</project>
Создаю класс public class EchoJavaTelegramBot () {} зависящий от TelegramLongPollingBot
package org.echoJavaTelegramBot;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
public class EchoJavaTelegramBot extends TelegramLongPollingBot {
final String botName;
final String botToken;
public EchoJavaTelegramBot(String botName, String botToken) {
this.botName = botName;
this.botToken = botToken;
}
@Override
public String getBotUsername() {
// геттер имени бота
return this.botName;
}
@Override
public String getBotToken() {
// геттер токена бота
return this.botToken;
}
@Override
public void onUpdateReceived(Update update) {
// Проверяем появление нового сообщения в чате, и если это текст
if (update.hasMessage() && update.getMessage().hasText()) {
String message_text = update.getMessage().getText(); // Создаем переменную равную тексту присланного сообщения
String chat_id = update.getMessage().getChatId().toString(); // Создаем переменную равную ид чата присланного сообщения
SendMessage message = new SendMessage(); // Создаем обект-сообщение
message.setChatId(chat_id); // Передаем чат ид
message.setText(message_text); // Передаем эхо сообщение
try {
execute(message); // Отправляем обект-сообщение пользователю
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
}
}
Пишу программу в Main
package org.echoJavaTelegramBot;
import org.telegram.telegrambots.meta.TelegramBotsApi;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
import org.telegram.telegrambots.updatesreceivers.DefaultBotSession;
public class Main {
public static void main(String[] args) {
String botName = "***"; // В место звездочек указываем имя созданного вами ранее Бота
String botToken = "***"; // В место звездочек указываем токен созданного вами ранее Бота
TelegramBotsApi telegramBotsApi = null;
try {
telegramBotsApi = new TelegramBotsApi(DefaultBotSession.class);
telegramBotsApi.registerBot(new EchoJavaTelegramBot(botName, botToken));
} catch (TelegramApiException e) {
throw new RuntimeException(e);
}
}
}
На этом Эхо бот готов.
