Почему Kotlin — идеальный язык для Telegram бота?
Вы когда-нибудь задумывались, почему Kotlin так быстро завоевал сердца разработчиков? Дело в том, что этот язык сочетает в себе лаконичность Python и мощь Java, но при этом лишён их недостатков. Когда речь заходит о создании Telegram бота на Kotlin, вы получаете не просто рабочее решение, а элегантный, производительный и легко поддерживаемый код.
Представьте: вы пишете бота, который обрабатывает тысячи запросов в секунду, работает без сбоев и при этом код занимает в два раза меньше строк, чем на Java. Звучит как мечта? На самом деле — реальность. Telegram бот на Kotlin — это не только модно, но и практично. Особенно если вы уже знакомы с экосистемой JVM или хотите попробовать что-то новое после Python.
В этом гайде мы шаг за шагом создадим полноценного бота: от регистрации в BotFather до развертывания на сервере. Вы узнаете, как обрабатывать команды, работать с клавиатурами и даже отправлять файлы. Поехали!
Шаг 1: Подготовка окружения и регистрация бота
Прежде чем писать код, нам нужно получить токен — ключ доступа к Telegram API. Это делается через официального бота BotFather. Процесс займёт меньше минуты.
- Откройте Telegram и найдите
@BotFather. - Отправьте команду
/newbot. - Придумайте имя (например, MyKotlinBot) и username, заканчивающийся на
bot(например, MyKotlinBot). - Сохраните полученный токен — он понадобится для подключения.
Теперь настроим проект. Я рекомендую использовать IntelliJ IDEA Community Edition (она бесплатна и отлично дружит с Kotlin). Создайте новый Gradle-проект с Kotlin DSL.
Добавляем зависимости
Для работы с Telegram API мы будем использовать библиотеку TelegramBots — это стандарт де-факто в мире Kotlin и Java. Откройте файл build.gradle.kts и добавьте:
dependencies {
implementation("org.telegram:telegrambots:6.9.7.1")
implementation("org.telegram:telegrambotsextensions:6.9.7.1")
implementation("ch.qos.logback:logback-classic:1.5.6")
}
Первая библиотека — ядро, вторая — полезные расширения (например, для обработки команд), третья — логирование, чтобы видеть ошибки.
Шаг 2: Пишем первого бота на Kotlin
Создайте класс MyBot, который наследуется от TelegramLongPollingBot. Это самый простой способ: бот будет сам опрашивать сервер Telegram на наличие новых сообщений.
import org.telegram.telegrambots.bots.TelegramLongPollingBot
import org.telegram.telegrambots.meta.api.objects.Update
class MyBot : TelegramLongPollingBot() {
override fun getBotUsername(): String = "MyKotlinBot" // ваш username
override fun getBotToken(): String = "ВАШ_ТОКЕН_ЗДЕСЬ" // токен от BotFather
override fun onUpdateReceived(update: Update?) {
// Пока просто заглушка
if (update?.hasMessage() == true && update.message.hasText()) {
println("Получено сообщение: ${update.message.text}")
}
}
}
Теперь нужно запустить бота. Создайте файл Main.kt с точкой входа:
import org.telegram.telegrambots.meta.TelegramBotsApi
import org.telegram.telegrambots.updatesreceivers.DefaultBotSession
fun main() {
val botsApi = TelegramBotsApi(DefaultBotSession::class.java)
botsApi.registerBot(MyBot())
println("Бот запущен!")
}
Запустите — и ваш первый Telegram бот на Kotlin уже жив! Пока он только выводит сообщения в консоль, но это только начало.
Шаг 3: Обрабатываем команды и отправляем ответы
Просто читать сообщения скучно. Давайте научим бота отвечать на команды. Для этого используем аннотацию @BotCommand из расширений, но сначала перепишем класс, чтобы он наследовался от TelegramLongPollingBot и реализовал интерфейс CommandRegister.
На самом деле проще добавить обработку вручную в методе onUpdateReceived. Вот пример с командами /start и /help:
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
class MyBot : TelegramLongPollingBot() {
override fun getBotUsername(): String = "MyKotlinBot"
override fun getBotToken(): String = "ВАШ_ТОКЕН"
override fun onUpdateReceived(update: Update?) {
if (update?.hasMessage() == true && update.message.hasText()) {
val message = update.message
val chatId = message.chatId.toString()
val text = message.text
when (text) {
"/start" -> sendMessage(chatId, "Привет! Я бот на Kotlin. Чем могу помочь?")
"/help" -> sendMessage(chatId, "Доступные команды:\n/start - приветствие\n/help - помощь\n/about - обо мне")
"/about" -> sendMessage(chatId, "Я создан с помощью библиотеки TelegramBots на языке Kotlin.")
else -> sendMessage(chatId, "Извините, я не знаю такой команды. Напишите /help")
}
}
}
private fun sendMessage(chatId: String, text: String) {
val message = SendMessage().apply {
setChatId(chatId)
setText(text)
}
try {
execute(message)
} catch (e: TelegramApiException) {
e.printStackTrace()
}
}
}
Обратите внимание: мы вынесли отправку сообщения в отдельный метод. Это переиспользуемый код — в будущем вы сможете вызывать его из любого места.
Шаг 4: Интерактивные клавиатуры на Kotlin
Telegram бот на Kotlin становится гораздо интереснее, когда у него есть кнопки. Клавиатуры бывают двух типов: ReplyKeyboardMarkup (под полем ввода) и InlineKeyboardMarkup (прямо в сообщении).
Добавим inline-клавиатуру к команде /help. Замените соответствующий вызов:
import org.telegram.telegrambots.meta.api.objects.replykeyboard.InlineKeyboardMarkup
import org.telegram.telegrambots.meta.api.objects.replykeyboard.buttons.InlineKeyboardButton
// Внутри метода onUpdateReceived:
"/help" -> {
val keyboard = InlineKeyboardMarkup().apply {
keyboard = listOf(
listOf(
InlineKeyboardButton("О боте").apply { callbackData = "about" },
InlineKeyboardButton("Контакты").apply { callbackData = "contact" }
),
listOf(
InlineKeyboardButton("Закрыть").apply { callbackData = "