Найти в Дзене

Как сделать бота для telegram на java 15?

Как вы выбираете кандидата, кому доверить задание? Я задался этим вопросом, после того, как отклонили мое предложение о разработке бота для “вконтакте”. Это задело мое самолюбие. На работе я делаю куда более сложные вещи, чем разработка ботов. Как доказать тому человеку, который находится по ту сторону экрана, который не знает меня и не доверяет, что я могу сделать простейшего бота информатора? Ответ есть — сделать этого бота и задокументировать процесс его создания. Статья расчитана на новичков, желающих познакомится с новым стандартом java 15 и простейшим ботостроением. Итак, нам понадобятся:

  • IntelliJ IDEA CE
  • Java JDK_15_PREVIEW
  • Библиотека для взаимодействия с телеграмом

С какими тру дностями мы столкнемся? Для меня, самым сложным было настроить среду разработки для работы с джавой 15 превью версии. Нужно отдельно настроить gradle и выставить в настройках запуска проекта аргумент “—enable-preview”.

Начнем по порядку с создания проекта:

Рис. 1 Создание нового проекта
Рис. 1 Создание нового проекта

Нажимаем на кнопку “New Project”. Следом увидим вот такое меню:

Рис. 2 Выбор типа проекта
Рис. 2 Выбор типа проекта

За основу я взял сборщик проектов Gradle. Выбираем Java и затем кнопку Next

Рис. 3 Задаем имя проекта
Рис. 3 Задаем имя проекта

Теперь нужно дать имя проекту. В моем случае это “telegram-bot-example-java”

Рис.4 Ждем, пока проект проиндексируется
Рис.4 Ждем, пока проект проиндексируется

Какое-то время идея и gradle будут загружаться. Кстати, я уже допустил одну ошибку в конфигурации проекта, заметили, какую? Вернемся к этому позже.

Рис.5 Создание структуры java packages
Рис.5 Создание структуры java packages

Кликаем правой кнопкой по папке “src/main/java” -> New -> Package -> “org.example.tgbot”

Рис. 6 Создаем точку входа в программу
Рис. 6 Создаем точку входа в программу

Теперь самое главное, без чего программа не запустится — точка входа и метод “main”. Выбираем “org.example.tgbot” -> New -> Java Class. Называем новый класс Main.

Рис. 7 Файл Main.java
Рис. 7 Файл Main.java

Вот такой код должен быть в файле “Main.java”. Обратите внимание на две зеленые стрелки рядом с определением класса и метода “main”. Если вы их видите, значит сделали все правильно и IDEA может запустить ваш проект.

Рис. 8 Тестовый запуск
Рис. 8 Тестовый запуск

Проверим, что все ок, запустив проект.

Рис. 9 Успешный запуск
Рис. 9 Успешный запуск

Если все хорошо, вы должны увидеть “done”. У меня он есть, значит, можно продолжать.

Рис. 10 Проверяем новую фичу java 15
Рис. 10 Проверяем новую фичу java 15

Итак, вот мы дошли до ошибки, о которой я упоминал выше. В чем тут дело? Тип “record” был добавлен в java 15 и в превью версии должен присутствовать. Но я при запуске указал джаву восьмой версии. Что теперь делать? Можно сделать новый проект и указать правильную версию. Или можно исправить текущий проект. Сделать новый слишком просто, поэтому я исправлю этот (на самом деле нет, я попробовал, это не решило проблему).

Рис. 11 Настройки проекта
Рис. 11 Настройки проекта

Исправляем проблему. Нужно поменять версию джавы.Открываем настройки проекта.

Рис. 12 Настройки версии java
Рис. 12 Настройки версии java

Выбираем “Project SDK” -> 15. Если у вас ее нет, можно скачать ниже, в выпадающем списке. В “Project language level” выбираем “15 (Preview) — Sealed types, records, patterns, local enums and interfaces”. Сохраняем настройки.

Рис. 13 Record тип работает
Рис. 13 Record тип работает

Теперь все ок, можно наконец-то взяться за программирование? Увы, нет. IDEA распознает новые фичи, но кроме нее есть еще gradle, который не сможет скомпилировать этот код. Чтобы это проверить, создадим рядом с “Main.java “еще один файл — “Bot.java” в котором будет происходить обработка сообщений.

Рис. 14 Bot.java
Рис. 14 Bot.java

У gradle будут проблемы со сборкой этого файла, а именно — из за 11 строки. Модификатор “sealed”, как и “record”, является экспериментальным. Проверим, соберем проект.

Рис. 15 Gradle error
Рис. 15 Gradle error

Еще немного борьбы и мы запустим этот код. Нужно настроить сборку gradle и добавить аргумент “ — enable-preview” при запуске.

Рис. 16 Gradle java 15 settings
Рис. 16 Gradle java 15 settings

Нужно добавить новую секцию, в которой будут задаваться флаги сборки “ — enable-preview” и “-Xlint:preview”. Второй флаг не обязательный, нужен для отображения новых warnings. В комментарии пример, как можно задать все флаги одной строкой. Кроме этого, нужно добавить строку “jvmArgs([‘ — enable-preview’])” в секцию “test”. На этом с gradle закончили.

Рис. 17 Настройки сборки
Рис. 17 Настройки сборки

Далее, нужно добавить аргумент для виртуальной машины java. Отрываем настройки.

Рис. 18 Открыть меню “Add VM options”
Рис. 18 Открыть меню “Add VM options”

После чего у вас появится поле редактирование опций виртуальной машины.

Рис. 19 Редактор опций виртуальной машины
Рис. 19 Редактор опций виртуальной машины

В пустое поле вписываем “ — enable-preview”. Также проверьте, что у вас стоит “java 15”. Сохраняем настройки и собираем проект. У меня сборка и запуск прошли успешно. Теперь настроим прием сообщений и ответы.

Рис. 20 Bot.java
Рис. 20 Bot.java

Добавляем следующий код в файл “Bot.java”. В нем два метода, хотя можно было обойтись и одним, выбранная мною библиотека присилает обновления в виде массива, а не по одному. Ах да, я забыл показать, как добавить эту библиотеку.

Рис. 21 Добавляем зависимость в “build.gradle”
Рис. 21 Добавляем зависимость в “build.gradle”

В секцию “dependencies” добавьте строку “implementation ‘com.github.pengrad:java-telegram-bot-api:5.0.1’” как показано на рисунке (13 строка). И финальный штрих, обновляем Main класс, чтобы запустить бота.

Рис. 22 Новый Main класс
Рис. 22 Новый Main класс

Здесь я читаю BOT_TOKEN из переменных среды, это значит, ее нужно как то добавить. Это можно сделать глобально в системе или задать в IDEA. Я выбираю второй вариант.

Рис. 23 Снова открываем “Edit configurations”
Рис. 23 Снова открываем “Edit configurations”
Рис. 24 Редактирование переменных среды
Рис. 24 Редактирование переменных среды

В поле “Environment variables” вставьте строку “BOT_TOKEN=123”, где 123 — ваш токен. А я вставлю свой :) Сохраняем настройки и запускаем проект.

Рис. 25 Бот успешно запущен
Рис. 25 Бот успешно запущен

Бот работает! Напишу ему что-то:

Рис. 25 Телеграм чат
Рис. 25 Телеграм чат

Скорее всего, если вы захотите проверить моего бота, он вам не ответит. Потому что программа, которую мы написали, запущена локально, у меня на компьютере. Чтобы бот работал 24/7, программу нужно разметить на удаленном сервере (или просто держать компьютер всегда включенным всесте с запущенной программой). Это материал для другой статьи. Я также могу рассказать, как сделать ответы на команды в чате, отображать динамическую информацию, информировать клиентов. Или как написать бота на scala >_<. Пишите в комментариях, что у вас не получилось. До встречи в других статьях!
Ссылка на оригинал статьи:
https://a-britov.medium.com/как-сделать-бота-для-telegram-на-java-675b9338fd80