Как вы выбираете кандидата, кому доверить задание? Я задался этим вопросом, после того, как отклонили мое предложение о разработке бота для "вконтакте". Это задело мое самолюбие. На работе я делаю куда более сложные вещи, чем разработка ботов. Как доказать тому человеку, который находится по ту сторону экрана, который незнает меня и не доверяет, что я могу сделать простейшего бота информатора? Ответ есть — сделать этого бота и задокументировать процесс его создания. Статья расчитана на новичков, желающих познакомится с новым стандартом java 15 и простейшим ботостроением. Итак, нам понадобятся:
- IntelliJ IDEA CE
- Java JDK_15_PREVIEW
- Библиотека для взаимодействия с телеграмом
С какими трудностями мы столкнемся? Для меня, самым сложным было настроить среду разработки для работы с джавой 15 превью версии. Нужно отдельно настроить gradle и выставить в настройках запуска проекта аргумент "--enable-preview".
Начнем по порядку с создания проекта: Рис. 1 Создание нового проекта
Нажимаем на кнопку "New Project". Следом увидим вот такое меню:
За основу я взял сборщик проектов Gradle. Выбираем Java и затем кнопку Next
Теперь нужно дать имя проекту. В моем случае это "telegram-bot-example-java"
Рис.4 Ждем, пока проект проиндексируется
Какое-то время идея и gradle будут загружаться. Кстати, я уже допустил одну ошибку в конфигурации проекта, заметили, какую? Вернемся к этому позже.
Рис.5 Создание структуры java packages
Кликаем правой кнопкой по папке "src/main/java" -> New -> Package -> "org.example.tgbot"
Рис. 6 Создаем точку входа в программу
Теперь самое главное, без чего программа не запустится — точка входа и метод "main". Выбираем "org.example.tgbot" -> New -> Java Class. Называем новый класс Main.
Вот такой код должен быть в файле "Main.java". Обратите внимание на две зеленые стрелки рядом с определением класса и метода "main". Если вы их видите, значит сделали все правильно и IDEA может запустить ваш проект.
Проверим, что все ок, запустив проект.
Если все хорошо, вы должны увидеть "done". У меня он есть, значит, можно продолжать.
Рис. 10 Проверяем новую фичу java 15
Итак, вот мы дошли до ошибки, о которой я упоминал выше. В чем тут дело? Тип "record" был добавлен в java 15 и в превью версии должен присутствовать. Но я при запуске указал джаву восьмой версии. Что теперь делать? Можно сделать новый проект и указать правильную версию. Или можно исправить текущий проект. Сделать новый слишком просто, поэтому я исправлю этот (на самом деле нет, я попробовал, это не решило проблему).
Исправляем проблему. Нужно поменять версию джавы.Открываем настройки проекта.
Выбираем "Project SDK" -> 15. Если у вас ее нет, можно скачать ниже, в выпадающем списке. В "Project language level" выбираем "15 (Preview) — Sealed types, records, patterns, local enums and interfaces". Сохраняем настройки.
Теперь все ок, можно наконец-то взяться за программирование? Увы, нет. IDEA распознает новые фичи, но кроме нее есть еще gradle, который не сможет скомпилировать этот код. Чтобы это проверить, создаим рядом с "Main.java "еще один файл — "Bot.java" в котором будет происходить обработка сообщений.
У gradle будут проблемы со сборкой этого файла, а именно — из за 11 строки. Модификатор "sealed", как и "record", является экспериментальным. Проверим, соберем проект.
Еще немного борьбы и мы запустим этот код. Нужно настроить сборку gradle и добавить аргумент "--enable-preview" при запуске.
Рис. 16 Gradle java 15 settings
Нужно добавить новую секцию, в которой будут задаваться флаги сборки "--enable-preview" и "-Xlint:Preview". Второй флаг не обязательный, нужен для отображения новых warnings. В комментарии пример, как можно задать все флаги одной строкой. Кроме этого, нужно добавить строку "jvmArgs(['--enable-preview'])" в секцию "test". На этом с gradle закончили.
Далее, нужно добавить аргумент для виртуальной машины java. Отрываем настройки.
Рис. 18 Открыть меню "Add VM options"
После чего у вас появится поле редактирование опций виртуальной машины.
Рис. 19 Редактор опций виртуальной машины
В пустое поле вписываем "--enable-preview". Также проверьте, что у вас стоит "java 15". Сохраняем настройки и собираем проект. У меня сборка и запуск прошли успешно. Теперь настроим прием сообщений и ответы.
Добавляем следующий код в файл "Bot.java". В нем два метода, хотя можно было обойтись и одним, выбранная мною библиотека присилает обновления в виде массива, а не по одному. Ах да, я забыл показать, как добавить эту библиотеку.
Рис. 21 Добавляем зависимость в "build.gradle"
В секцию "dependencies" добавьте строку "implementation 'com.github.pengrad:java-telegram-bot-api:5.0.1'" как показано на рисунке (13 строка). И финальный штрих, обновляем Main класс, чтобы запустить бота.
Здесь я читаю BOT_TOKEN из переменных среды, это значит, ее нужно как то добавить. Это можно сделать глобально в системе или задать в IDEA. Я выбираю второй вариант.
Рис. 23 Снова открываем "Edit configurations"
Рис. 24 Редактирование переменных среды
В поле "Environment variables" вставьте строку "BOT_TOKEN=123", где 123 — ваш токен. А я вставлю свой :) Сохраняем настройки и запускаем проект.
Бот работает! Пруф:
Скорее всего, если вы захотите проверить моего бота, он вам не ответит. Потому что программа, которую мы написали, запущена локально, у меня на компьютере. Чтобы бот работал 24/7, программу нужно разметить на удаленном сервере (или просто держать компьютер всегда включенным всесте с запущенной программой). Это материал для другой статьи. Я также могу рассказать, как сделать ответы на команды в чате, отображать динамическую информацию, информировать клиентов. Или как написать бота на scala >_<. Пишите в комментариях, что у вас не получилось. До встречи в других статьях!