Telegram бот на Java: с чего начать и как не бросить на полпути
Вы когда-нибудь хотели написать своего Telegram бота, но думали, что это слишком сложно? Спешу вас обрадовать: создать Telegram бота на Java — задача, с которой справится даже новичок. Никакой магии, только чёткий план и немного кода.
В этом гайде мы пройдём весь путь от регистрации бота в Telegram до публикации готового приложения. Вы узнаете, как подключить библиотеку TelegramBots, обрабатывать команды, отправлять сообщения и избегать типичных ошибок. В конце — готовый шаблон, который вы сможете адаптировать под свои задачи.
Почему именно Java? Этот язык даёт стабильность, производительность и огромное количество готовых решений. Для Telegram бота на Java не нужно ставить десятки зависимостей — всё умещается в одном Maven/Gradle проекте. Поехали!
Шаг 1: Регистрация бота и получение токена
Прежде чем писать код, нужно «родить» бота. Делается это через главного бота Telegram — BotFather.
Запустите BotFather в Telegram и отправьте команду:
/newbot
Дальше следуйте инструкциям: придумайте имя (оно будет видно пользователям) и username (должен заканчиваться на _bot). После успешного создания вы получите токен — длинную строку вида:
1234567890:ABCdefGHIjklmNOPqrstUVwxyz-1234567
Важно: токен — это ключ к вашему боту. Никому его не показывайте, не загружайте в публичные репозитории. Лучше хранить в переменных окружения или конфигурационных файлах.
Шаг 2: Создание проекта и подключение зависимостей
Мы будем использовать Maven — это удобно и стандартно для Java-проектов. Если вы предпочитаете Gradle — принцип тот же, просто перепишите зависимости под свой формат.
Создайте обычный Java-проект в вашей IDE (IntelliJ IDEA, Eclipse или NetBeans) и откройте файл pom.xml. Добавьте в него следующую зависимость:
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots</artifactId>
<version>6.9.7.1</version>
</dependency>
Эта библиотека — TelegramBots — самая популярная для создания ботов на Java. Она поддерживает все основные функции: отправку сообщений, изображений, кнопок, работу с Inline-режимом и Webhooks.
После добавления зависимости запустите mvn clean install или обновите проект в IDE, чтобы скачать библиотеку.
Шаг 3: Пишем первого бота — базовый класс
Создайте класс, который наследуется от TelegramLongPollingBot. Этот класс будет отвечать за получение обновлений от серверов Telegram. Вот минимальная структура:
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
public class MySimpleBot extends TelegramLongPollingBot {
@Override
public String getBotUsername() {
return "YourBotUsername"; // без @
}
@Override
public String getBotToken() {
return "YOUR_TOKEN_HERE";
}
@Override
public void onUpdateReceived(Update update) {
// Здесь будем обрабатывать сообщения
if (update.hasMessage() && update.getMessage().hasText()) {
String messageText = update.getMessage().getText();
long chatId = update.getMessage().getChatId();
System.out.println("Получено сообщение: " + messageText + " от чата: " + chatId);
}
}
}
Пока бот только логирует входящие сообщения. Давайте добавим ответное действие.
Шаг 4: Отправляем ответ — бот начинает говорить
Чтобы бот отвечал, используем класс SendMessage. Добавим обработку команды /start и любого текста:
@Override
public void onUpdateReceived(Update update) {
if (update.hasMessage() && update.getMessage().hasText()) {
String messageText = update.getMessage().getText();
long chatId = update.getMessage().getChatId();
SendMessage message = new SendMessage();
message.setChatId(chatId);
if (messageText.equals("/start")) {
message.setText("Привет! Я — Java-бот. Чем могу помочь?");
} else {
message.setText("Вы написали: " + messageText);
}
try {
execute(message);
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
}
Теперь бот отвечает на каждое сообщение. Обратите внимание: execute(message) выбрасывает исключение — обязательно обрабатывайте его.
Шаг 5: Запускаем бота — главный метод
Бот готов, но его нужно запустить. Создайте класс Main с методом main, где зарегистрируете бота в API Telegram:
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) {
try {
TelegramBotsApi botsApi = new TelegramBotsApi(DefaultBotSession.class);
botsApi.registerBot(new MySimpleBot());
System.out.println("Бот успешно запущен!");
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
}
Запустите main — и ваш Telegram бот на Java оживёт! Напишите ему любое сообщение, он ответит. Если видите ошибку — проверьте токен и интернет-соединение.
Шаг 6: Добавляем полезные команды и кнопки
Просто отвечать «эхо» — скучно. Давайте сделаем бота полезнее: добавим команды /help, /info и кнопки для быстрого выбора.
Обработка команд
Расширим метод onUpdateReceived:
if (messageText.equals("/start")) {
message.setText("Добро пожаловать! Используйте /help для списка команд.");
} else if (messageText.equals("/help")) {
message.setText("Доступные команды:\n/start — приветствие\n/help — эта справка\n/info — информация о боте");
} else if (messageText.equals("/info")) {
message.setText("Я — бот, написанный на Java с использованием библиотеки TelegramBots.");
} else {
message.setText("Неизвестная команда. Напишите /help.");
}
Кнопки под сообщением
Кнопки — это InlineKeyboardMarkup. Добавим их в ответ на /help:
import org.telegram.telegrambots.meta.api.objects.replykeyboard.InlineKeyboardMarkup;
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.InlineKeyboardButton;
// Внутри метода onUpdateReceived
if (message