Подготовка рабочего места в Windows и Linux. Virtual Environment (venv). Ответы на вопросы
Весь текст ниже появился как попытка дать универсальный ответ на те вопросы, которые дорогие читатели присылали и продолжают присылать раз за разом. Здесь не будет кода, связанного с ботами напрямую, а лишь советы по организации процесса написания. И, конечно же, не нужно воспринимать это как истину в последней инстанции, напротив, выбирайте те инструменты и подходы к разработке, которые лично вам кажутся удобными. Важная деталь: текст написан в конце 2019 года. Достаточно вступительных слов, поехали!
Предположим, вы уже немного знаете язык Python 3 (забудьте про Python 2.7, он мёртв), умеете писать простенькие программы и хотите взяться за разработку ботов. Где это делать? В чём писать код? Как правило, у большинства начинающих программистов основной операционкой используется Microsoft Windows. С неё и начнём, но сперва…
Virtual environment
Вы когда-нибудь пользовались VirtualBox? Например, чтобы «пощупать» другие операционные системы или просто установить какой-нибудь подозрительный софт. Python Virtual environment (далее — venv) чем-то напоминает «виртуалку». При его использовании создаётся копия выбранного интерпретатора Питон, а все устанавливаемые модули хранятся изолированно от общесистемных, тем самым, упрощается их обновление, удаление или изменение. Часто venv позволяет избежать ошибок, связанных с обратной совместимостью некоторых библиотек, а также обойтись без конфликтов с системными модулями. Работа с venv будет подробнее описана ниже в разделе Linux, но использовать его мы будем везде.
Windows
Первым делом, разумеется, нужно скачать сам интерпретатор Python. На момент написания этого текста актуальной версией является Python 3.8.1. В качестве каталога установки я рекомендую использовать что-то простое, вроде C:\Python38. Где писать код — личное дело каждого, конечно, но я всё же рекомендую использовать специальную среду разработки под названием PyCharm Community Edition. Бесплатной версии (та самая Community) более чем достаточно. После установки и первичной настройки выберите пункт File -> New Project. Укажите имя вашего первого проекта, а ниже укажите «New environment using virtualenv», ниже в качестве интерпретатора путь к python.exe каталога с Питоном (например, C:\Python38\python.exe).
Создание нового проекта в PyCharm
После запуска откройте вкладку Terminal в левом нижнем углу и установите библиотеку pytelegrambotapi (не telebot!). Для любителей тыкать мышкой есть более запутанный вариант: File -> Settings -> Project <имя проекта>-> Project Interpreter -> кнопка «+» в правой части экрана.
Установка библиотеки через терминал в PyCharm
Прекрасно, теперь начинайте творить! Создайте первый файл с исходником, нажав правой кнопкой мышки по имени проекта в списке файлов, затем New и Python File.
Создание нового файла кода в PyCharm
Запустить код можно, выбрав сверху пункт Run, затем снова Run…, но с многоточием, и затем выбрав созданный ранее файл.
Как залить файлы на сервер?
Для копирования файлов на удалённый сервер (обычно там стоит Linux), я использую замечательную бесплатную программу WinSCP, причём в ней присутствует режим автоматической синхронизации файлов, чтобы при любом изменении в локальном каталоге обновлялось содержимое на удалённой машине, избавляя вас от необходимости копировать всё вручную.
Скриншот программы WinSCP
При помощи WinSCP можно даже просто подключиться к серверу и подправить файл «на лету», не забудьте только потом перезапустить бота!
Linux
Если Linux у вас используется вместо Windows, то работа с PyCharm будет точно такой же, поэтому второй раз писать не имеет смысла. Далее рассмотрен процесс запуска в терминале на удалённом сервере. Прекрасно, вы написали бота и хотите где-то его запустить. Например, арендовали сервер у Scaleway/DigitalOcean/AWS/etc. Запустили сервер, подключились к нему по SSH, а там чёрный экран и терминальная Linux-сессия. Во-первых, давайте посмотрим, какой интерпретатор у нас выбран по умолчанию, введя команду python3 .
Хорошим правилом будет иметь на сервере ровно ту же версию Python, что и на своей локальной машине, во избежание различных неприятностей. Если версия на сервере ниже 3.7 и/или ниже той, что установлена локально, лучше всего будет установить её отдельно. Очень рекомендую вот эту статью, по которой я для себя написал простой скрипт для автоматизации рутинных действий. Итак, интерпретатор установлен, теперь пора создать каталог, куда положим файлы бота. Выполните по очереди следующие команды:
В результате должно получиться примерно то же самое, что на скриншоте ниже, с той лишь разницей, что я прервал процесс установки библиотеки для читабельности. Обратите внимание, что после подгрузки файла venv/bin/activate, перед названием пользователя и текущего каталога появится приписка (venv), означающая, что мы «вошли» в виртуальное окружение и устанавливаем библиотеки именно в него.
Создание venv в Linux-терминале
Что произошло выше? Во-первых, мы создали каталог с названием mybot и перешли в него. Во-вторых, мы использовали Python версии 3.7 (в вашем случае это может быть не так), чтобы создать виртуальное окружение в подкаталоге venv. В-третьих, мы «активировали» venv и выполнили в нём нужную нам команду. Внутри venv команды pip и python точно знают, к какому именно интерпретатору они относятся, поэтому путаницы вроде «я установил библиотеку для Python 3.5, а запускаю из-под Python 3.7» попросту не будет. Наконец, в-четвёртых, мы деактивировали venv, поскольку он напрямую нам больше не нужен. Чтобы сделать жизнь ещё приятнее, давайте настроим автозагрузку бота, чтобы при возникновении ошибок или при перезапуске сервера он вновь запускался, избавляя нас от необходимости постоянно проверять всё вручную. Для этого мы воспользуемся подсистемой инициализации systemd, которая всё больше распространена в современных Linux-дистрибутивах. Прежде, чем описать службу systemd, откройте главный файл с ботом, в котором прописан его запуск и добавьте в качестве первой строки следующий код: #!venv/bin/python
Сохраните файл, закройте его и выполните команду chmod +x имяфайласботом.py , чтобы сделать его исполняемым. Теперь создайте файл mybot.service, и скопируйте туда следующий текст:
Отредактируйте поля Description , WorkingDirectory и ExecStart , сохраните и закройте файл. Далее скопируйте его в каталог /etc/systemd/system , введя свой пароль при необходимости (если сидите не из-под рута, что правильно, то ваш юзер должен иметь возможность выполнять команды от имени sudo). Затем выполните следующие команды для включения автозагрузки и запуска бота (опять-таки, требуются права суперпользователя):
Наконец, проверьте состояние вашего бота командой systemctl status mybot . Его статус должен быть Active (running) зелёного цвета (если поддерживается разноцветный режим).
Проверка статуса бота через systemd
Как редактировать файлы на сервере?
Если что-то нужно подправить небольшое, то неплохим вариантом остаётся старое доброе подключение по SSH и использование редакторов вроде micro, nano или даже vim с emacs. Но если вдруг у вас в качестве локальной машины применяется Linux, то крайне рекомендую редактор Visual Studio Code (https://code.visualstudio.com) с дополнением Remote-SSH. В этом случае, вы сможете прямо в VS Code открывать каталоги на сервере и редактировать файлы в удобном окружении и с подсветкой синтаксиса. К сожалению, насколько мне известно, расширение Remote-SSH не работает в Windows, но впоследствии этот недочёт будет устранён.
Ответы на часто задаваемые вопросы (FAQ)
Хочу научиться писать ботов. С чего мне начать?
Прежде всего, пожалуйста, изучите хотя бы немного сам язык Python. Он довольно простой, но перед созданием ботов стоит понять азы. Конкретнее: переменные, циклы, функции, классы, обработка исключений, работа с файлами и файловой системой.
Можно ли писать ботов на телефоне?
Да кто ж вам запретит-то? Но лучше от этого никому не будет, поверьте. Будет трудно, неудобно и контрпродуктивно. Используйте нормальный компьютер.
[pyTelegramBotAPI] Ошибка AttributeError: module ‘telebot’ has no attribute ‘TeleBot’!
На 99% уверен, что вы установили библиотеку telebot вместо pytelegrambotapi. С учётом всего вышесказанного проще создать новое окружение venv, перенести туда нужные файлы и установить именно pytelegrambotapi, при этом в исходниках должно остаться import telebot.
Как мне держать бота запущеным в Windows?
Запустите бота в PyCharm, не закрывайте приложение и не выключайте комп. Почти шутка. По-моему, Windows — не самая лучшая операционка для подобных вещей, проще арендовать сервер у европейских провайдеров, заодно не будет геморроя с варварами из Российского Консорциума Неадекватов.
Библиотека pyTelegramBotAPI не поддерживает новые фичи Bot API!
К сожалению, упомянутая библиотека в 2019 году развивалась гораздо медленнее, чем хотелось. Если вы уже чувствуете себя уверенным ботописателем, подумайте о переходе на альтернативы вроде aiogram.
В завершение хочется напомнить, что если у вас возникли замечания, предложения или вопросы, вы всегда можете открыть issue на Github или прийти к нам в чатик.
Telegram-бот на Dart + Docker + VDS
В этой статье я хочу поделиться своим опытом создания Telegram-бота написанного на Dart и запущенного через Docker на VDS.
Оригинал статьи размещён тут.
В конце у вас будет работающий Telegram-бот, написанный на Dart, запущенный в контейнере Docker и размещенный на VDS. Вы сможете отправлять сообщения боту и получать ответы, а также отправлять фотографии, хранить их на VDS и удалять, при необходимости.
Эта статья представляет собой реальный кейс, когда мне пришлось загружать фотографии на VDS (которые пользователь отправил боту), отправлять их в базу данных, а затем удалять их с VDS.
И так, для того, чтобы все это сделать, нам нужно следующее:
- Создать нового бота с помощью BotFather;
- Создать новый dart-проект и написать код бота;
- Настроить все необходимые пакеты и плагины на VDS;
- Запустить контейнер Docker и протестировать бота.
Telegram-бот и VDS, которые использовались для этой статьи, удалены, поэтому все данные, такие как токен Telegram API или IP-адрес VDS, должны быть заменены.
Это самая простая часть, все, что нам нужно сделать, это перейти к BotFather, нажав на эту ссылку, и создать нового бота.
Выберите в меню «Создать нового бота» или введите команду /newbot в текстовом поле.
Вас попросят указать имя бота (оно может быть не уникальным) и имя пользователя бота, которые должны быть уникальными и содержать «_bot» в конце.
Для этой статьи я выбрал имя пользователя ak_medium_bot. BotFather дал мне токен для доступа к Telegram API (пример на скриншоте). Вы всегда можете получить его или сбросить с помощью BotFather.
Сначала установите Dart на вашу машину. Все шаги описаны на официальном сайте, и это довольно просто, поэтому у вас не должно быть никаких проблем.
После установки Dart откройте терминал на компьютере Mac или Linux, перейдите в папку в которой вы хотите сохранить проект и выполните следующую команду (у вас должны быть права администратора):
(для получения дополнительной информации о создании проектов Dart посетите этот сайт).
Теперь откройте созданную папку в любой IDE, которой вам нравится. Например, я использую VS Code.
В терминале вашей IDE (или просто в терминале) выполните следующую команду для установки пакета Teledart:
Перейдите в папку bin, откройте bot_medium.dart и замените его содержимое следующим:
Важно! Не храните ключи API, как это было сделано в этой статье! Всегда держите их в секрете и подальше от гита!
Приведенный выше код запускает Telegram-бота и ждет, когда пользователь введет определенные ключевые слова. Если какое-либо ключевое слово будет отправлено боту, он запускает соответствующие действие.
Далее создадим новый файл в корне папки проекта и присвоим ему имя Dockerfile, без какого-либо типа или точки в конце. Заполните его следующим:
Dockerfile создает образ Docker из нашего проекта Dart.
Теперь пришло время создать новый репозиторий, например, на GitHub. Перейдите в терминале в папку проекта и выполните следующие действия:
Обратите внимание! Ваш git remote add origin https://github.com/kharitonovAL/bot_medium.git будет отличаться.
Отлично! Двигаемся дальше!
Чтобы бот был доступен 24/7, мы должны запустить его на сервере. Вы можете использовать любого поставщика услуг VDS, которого хотите. Что касается меня — я использую сервис reg.ru, он не дорогой, стабильный и имеет предварительно настроенные образы операционной системы.
Если вы используете другого поставщика услуг VDS, я рекомендую вам установить Ubuntu с версией 18.04 или 20.04, как показано на скриншоте:
Я выбираю версию 20.04 для этой статьи.
Так, теперь у нас есть VDS, работающие на Ubuntu со следующими параметрами:
Пароль root пользователя был отправлен на мою электронную почту.
Теперь нам нужно подключиться к нашему серверу и установить Dart и Docker.
Используйте любой ssh-клиент или терминал для подключения к серверу. Если вы используете терминал, запустите следующее: ssh [email protected]. Вас попросят ввести пароль пользователя root.
Если вы все сделали правильно, вы будете подключены к серверу:
Теперь давайте установим Dart на ваш VDS. Все шаги описаны на официальном сайте.
После установки вы можете ввести в терминале dart —version, чтобы проверить, что Dart установлен:
# dart — version Dart SDK version: 2.14.4 (stable) (Unknown timestamp) on “linux_x64"
Далее установим Docker, как описано на официальном сайте.
Убедитесь, что Docker Engine установлен правильно, запустив образ hello-world:
Эта команда загружает тестовый образ и запускает его в контейнере. Когда контейнер запускается, он печатает сообщение и выходит.
Теперь давайте установим официальный контейнер Dart, как описано здесь.
И еще нам нужно создать нового пользователя для Ubuntu, чтобы позже собрать и запустить бота в контейнере Docker. Для этого запустите в терминале следующее:
Выходные данные будут похожи на то, что показано на скриншоте:
Важно! Добавьте нового пользователя в группу Docker, как описано здесь. Там описано всего два шага:
1. Создайте группу docker:
2. Добавьте своего пользователя в группу docker:
Далее нам нужно создать папку, которую мы прикрепим к нашему контейнеру, чтобы сохранять там фотографии. Это необходимый шаг, если вы хотите пробрасывать данными в контейнер. Если вы не создадите и не присоедините папку к контейнеру, вы не сможете сохранить файлы. Другими словами — вы не можете сохранить файл внутри контейнера. Вы должны сделать это в файловой системе хоста. Вы можете прочитать больше об этом здесь и здесь.
Если вам нужно сохранить файлы, вы можете соответствующим образом изменить код бота. В моем случае мне нужно сохранить фотографии (или изображения, если хотите), поэтому сделайте следующее:
- Перейдите в корневой каталог, когда вы сделаете путь в терминале, он должен выглядеть следующим образом: [email protected]–108–70–91:/# (начинается с /);
- Перейдите в каталог var, выполнив cd var;
- Создать новую папку с загрузкой имени, выполнив mkdir upload в терминале;
- Введите ls и нажмите Enter.
Вы должны увидеть что-то подобное в терминале:
Если вы хотите сначала протестировать своего бота на локальной машине, создайте папку загрузки с тем же путем.
Если вы видите папку загрузки, вы можете двигаться вперед.
Хорошо, теперь давайте клонируем наш репозиторий из GiHub. Перейдите в папку home и выполните следующее:
Отлично, следующий шаг!
Итак, теперь вы все настроили.
Теперь войдите в систему со своим новым пользователем (в моем случае duser). Перейдите в папку вашего бота-проекта (в моем случае он находится по пути /home/bot_medium) и создайте образ Docker следующей командой:
Выходные данные будут аналогичны следующему:
$ cd .. [email protected]:/home$ cd bot_medium [email protected]:/home/bot_medium$ docker build -t dart-server . Sending build context to Docker daemon 100.9kB Step 1/12 : FROM dart:stable AS build —> 91437c5c4a32 Step 2/12 : WORKDIR /app —> Using cache —> d9119631358f Step 3/12 : COPY pubspec.* ./ —> Using cache —> 2c5d1335e912 Step 4/12 : RUN dart pub get —> Using cache —> 0a673e765734 Step 5/12 : COPY . . —> 7c7f640d4fa1 Step 6/12 : RUN dart pub get —offline —> Running in 40222d0387df Resolving dependencies. Got dependencies! Removing intermediate container 40222d0387df —> ef8bfd2f84b3 Step 7/12 : RUN dart compile exe bin/bot_medium.dart -o bin/server —> Running in ab4c98041acc Info: Compiling with sound null safety Generated: /app/bin/server Removing intermediate container ab4c98041acc —> bbb20f1d1a4e Step 8/12 : FROM scratch —> Step 9/12 : COPY —from=build /runtime/ / —> c4a23b9f77c4 Step 10/12 : COPY —from=build /app/bin/server /app/bin/ —> 4b9c61aa381b Step 11/12 : EXPOSE 8080 —> Running in 1a434ab35272 Removing intermediate container 1a434ab35272 —> e47cf083a71f Step 12/12 : CMD ["/app/bin/server"] —> Running in 761123b25035 Removing intermediate container 761123b25035 —> 98ba199f8aca Successfully built 98ba199f8aca Successfully tagged dart-server:latest
Важно! Если вы попытаетесь запустить docker build -t dart-server. с правами root пользователя, вы получите AOT ошибку компиляции.
Хорошо, теперь нужно сообщить системе, что бот должен быть онлайн 24/7. Для этого выполните следующее в терминале (сделать это нужно root пользователем):
Теперь давайте запустим наш контейнер! Выполните следующее (сделайте это с помощью duser):
Вывод будет примерно следующим:
$ cd .. [email protected]:/home$ cd bot_medium [email protected]:/home/bot_medium$ docker run -d —restart=always -p 8080:8080 \-v /var/upload:/var/upload \dart-server 2d46670198864b4adef9afa126c1e0b5c9917657b69aae7a5b01d0335700b1e2 [email protected]:/home/bot_medium$
Чтобы убедиться, что наш контейнер запущен, выполните docker ps в терминале, и вывод будет следующим:
Наконец-то наш бот теперь онлайн. Но это еще не конец. Выполните следующее, чтобы обновить настройки контейнера Docker:
Этой командой мы говорим Docker перезапускать этот контейнер каждый раз, когда он отключается.
Имя моего контейнера в данном случае — vigorous_khayyam. Имя вашего контейнера может быть другим. Выполните команду docker ps. Вы увидите список запущенных контейнеров Docker и сможете увидеть имя вашего.
Давайте протестируем нашего бота!
Мы отправили фото! Теперь давайте сделаем паузу и проверим, все ли идет как надо после того, как мы отправили фото. Перейдите в каталог /var/upload и введите команду ls, вы увидите вложенную папку с именем chat_id:
Круто, фото есть! Теперь давайте нажмем кнопку «Удалить изображение» в действиях бота и еще раз проверим содержимое /var/upload:
И теперь фото нет!
Теперь вы знаете как создать Telegram-бота с помощью Dart, Docker и VDS. Эта статья также будет полезна Flutter разработчикам.
Код bot_medium вы можете найти здесь.
Telegram-бот и VDS, которые использовались для этой статьи, удаляются, поэтому все конкретные данные, такие как токен Telegram API или IP-адрес VDS, должны быть заменены.
abritov/telegram-bot-example1-java
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Как сделать бота для telegram на java?
Как вы выбираете кандидата, кому доверить задание? Я задался этим вопросом, после того, как отклонили мое предложение о разработке бота для «вконтакте». Это задело мое самолюбие. На работе я делаю куда более сложные вещи, чем разработка ботов. Как доказать тому человеку, который находится по ту сторону экрана, который незнает меня и не доверяет, что я могу сделать простейшего бота информатора? Ответ есть — сделать этого бота и задокументировать процесс его создания. Статья расчитана на новичков, желающих познакомится с новым стандартом java 15 и простейшим ботостроением. Итак, нам понадобятся:
- IntelliJ IDEA CE
- Java JDK_15_PREVIEW
- Библиотека для взаимодействия с телеграмом
С какими трудностями мы столкнемся? Для меня, самым сложным было настроить среду разработки для работы с джавой 15 превью версии. Нужно отдельно настроить gradle и выставить в настройках запуска проекта аргумент «—enable-preview».

Начнем по порядку с создания проекта: Рис. 1 Создание нового проекта
Нажимаем на кнопку «New Project». Следом увидим вот такое меню:

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

Рис. 3 Задаем имя проекта
Теперь нужно дать имя проекту. В моем случае это «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.

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

Рис. 8 Тестовый запуск
Проверим, что все ок, запустив проект.

Рис. 9 Успешный запуск
Если все хорошо, вы должны увидеть «done». У меня он есть, значит, можно продолжать.

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

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

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

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

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

Рис. 15 Gradle error
Еще немного борьбы и мы запустим этот код. Нужно настроить сборку gradle и добавить аргумент «—enable-preview» при запуске.

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

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

Рис. 18 Открыть меню «Add VM options»
После чего у вас появится поле редактирование опций виртуальной машины.

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

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

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

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

Рис. 23 Снова открываем «Edit configurations»

Рис. 24 Редактирование переменных среды
В поле «Environment variables» вставьте строку «BOT_TOKEN=123», где 123 — ваш токен. А я вставлю свой 🙂 Сохраняем настройки и запускаем проект.

Рис. 25 Бот успешно запущен
Бот работает! Пруф:

Рис. 25 Телеграм чат
Скорее всего, если вы захотите проверить моего бота, он вам не ответит. Потому что программа, которую мы написали, запущена локально, у меня на компьютере. Чтобы бот работал 24/7, программу нужно разметить на удаленном сервере (или просто держать компьютер всегда включенным всесте с запущенной программой). Это материал для другой статьи. Я также могу рассказать, как сделать ответы на команды в чате, отображать динамическую информацию, информировать клиентов. Или как написать бота на scala >_<. Пишите в комментариях, что у вас не получилось. До встречи в других статьях!