Запуск Телеграм-бота на смартфоне в Termux
Инженерия себя- Что такое Termux
- Установка Termux
- Установка Node.js и npm
- Даем доступ приложению к файлам
- Как загрузить файл своего бота в Termux?
- Навигация в командной строке
- Копируем файлы с кодом бота в нашу папку
- Запуск бота
- Запуск бота как сервис
Что такое Termux
Termux - симулятор linux для Android смартфонов.
Работать с ним придется через командную строку. Поначалу это непросто, но эти навыки могут очень пригодиться в будущем, например, если понадобится настроить собственный сервер.
Общая информация: (к этому можно вернуться позже)
Установка Termux
Официальная инструкция: Установка
Скачайте и устанавливаем Termux. Скачиваем с сайта: https://f-droid.org/en/packages/com.termux/ (прокрутите вниз до ссылки Download APK)
Можно установить Termux прямо из Google Play Store, но тогда понадобится дополнительно обновить его через командную строку:
apt-get update apt-get upgrade (и пройти процесс обновления, подтверждая все запросы)
У меня это не получилось с первого раза (следующий пункт с установкой node.js не заработал) и я решил скачать и установить Termux из файла по ссылке выше.
Установка Node.js и npm
Официальная инструкция: Install Node.js
Запусти Termux и напиши в командной строке
npm
Появится информация об ошибке с предложением установить node.js и подсказками команд. Как раз одна из подсказанных команд нам нужна. Пишем в командной строке:
pkg install nodejs-lts
(lts в названии означает long time service - устанавливаем версию, которая будет поддерживаться долгое время)
Начинается процесс установки. Подтверждаем, если нужно: иногда в процессе установки нужно подтвердить нажатием ↵ enter, иногда согласиться, введя y (yes) и затем нажав ↵ enter
Даем доступ приложению к файлам
termux-setup-storage
Подтверждаем y ↵ enter
И соглашаемся дать доступ приложению к файловой системе
Как загрузить файл своего бота в Termux?
Файловая система Termux и файловая система, которую вы видите в своем обычном файловом менеджере на Android - не одно и тоже.
Они "пересекаются" только в некоторых папках, которые одновременно видны и в файловом менеджере, и в которые можно перейти в командной строке Termux (и то, только после того, как выдали доступ в пункте выше).
Навигация в командной строке
Основные команды: (симолы <> писать не нужно)
pwd показать полный путь к текущей папке ls показать содержимое текущей папки cd .. перейти на урвень выше (в родительскуюю папку) cd / перейти в корневой каталог (самый высокий уровень) cd <название папки> зайти в папку cd <первые буквы папки>* зайти в папку cd <папка>/<папка>/<папка> зайти по указанному пути mkdir <название папки> создать папку rm -rf <название папки> удалить папку и все содержимое
Если понадобятся другие действия (копирование и т.д.) - воспользуся гуглом. Например, можно написать запрос "как скоипровать файл в командной строке linux"
Запустите Termux. Скорее всего вы находитесь в корневом каталоге. Который условно корневой, а на самом деле, если ввести команду pwd, покажет: data/data/com.termux/files/home. Но сейчас это не важно. В этот условно-корневой каталог всегда можно вернуться командой cd $home
Выполни команду
ls
И тебе покажет наличие здесь папочки storage
Переходим в нее командой
cd storage
или
cd s*
Снова
ls
Здесь уже видно кое-что из системы файлов Android. Но нам нужно дальше. Заходим в shared
cd shared ls
Видим большой список папок. Это - то, что видно в корневом каталоге вашего файлового менеджера.
Создаем папку для нашего проекта, например bots (это можно сделать и в файловом менеджере)
mkdir bots cd bots
Папка создана (и мы перешли в нее)
Таким образом у нас есть папка, доступная и из файлового менеджера (или редактора кода), и из Termux.
В Termux ее путь соответствует (в укороченном виде) $home/storage/shared/bots. В терминале в нее всегда можно будет попасть командой
cd $home/storage/shared/bots
В файловом менеджере она будет видна в корневом (самом верхнем) каталоге.
Копируем файлы с кодом бота в нашу папку
Перенеси в эту папку файлы с кодом бота
(можно скачать примеры кода в статье: Примеры кода ботов. Если ты не в курсе - скачанные файлы, как правило, появляются в каталоге Download, который сам тоже находится в корневом).
Вместо этого можно создать файл с кодом программы прямо на смартфоне. Для этого понадобится редакторе кода. Мне понравился редактор кода Acode - скачать с Play Market. Немного о том, как им пользоваться, описано в этой статье.
Получить токен у Botfather
Если вы взяли код из примеров - не забудьте заменить текст СЮДА_ТОКЕН на токен вашего собственного бота. Как его получить?
Читайте здесь: Получить токен бота у Botfather
Запуск бота
Теперь нужно установить библиотеки. В моих примерах это библиотека grammy.
Перейди в терминале в папку, где находится файл программы (это можно сделать командой cd $home/storage/shared/bots (если твое название папки было таким же)
Если в вашей папке уже есть файл package.json с прописанными там зависимостями (dependencies), запускайте команду
npm install
Она автоматически установит все прописанные в dependencies модули.
Если файла package.json, сейчас мы создадим его. Для этого выполните команду
npm init
На все вопросы просто нажимайте ↵ enter, что-то писать не обязательно. По завершению наш файл будет готов.
Теперь устанавливаем нужные библиотеки. В моих примерах это API grammy:
npm install --save grammy
После выполнения этой команды библиотеки скачиваются в специальную папку node_modules, а в вашем файле package.json добавляется зависимость. Т.о, если вы переносите проект - можно будет с помощью этого файла быстро установить все зависимости - командой npm install
Все готово. Запускаем бота командой node <название файла с программой>, например:
node index.js
Бот запущен! Или вы получили какое-то сообщение об ошибке.
Остановить процесс можно комбинацией ctrl + c
ctrl можно выбрать на вспомогательной клавиатуре. Либо же нажать кнопку уменьшения громкости - в Termux она выполняет роль ctrl
Сразу нескольких ботов можно запустить, открывая несколько окон терминала (см в инструкции к интерфейсу Termux). Но возможно будет полезнее следующий пункт:
Запуск бота как сервис
Описанный выше вариант подходит для разработки и тестирования.
Если мы хотим запустить бота (или несколько ботов) надолго, чтобы он автоматически перезагружался в случае ошибок и "вылетов" - нужно запустить его как сервис.
Эта задача посложнее, но с инструкцией тебе будет проще (а мне пришлось повозиться часов 5 перед тем, как получилось запустить сервис).
Помогли мне эти статьи:
https://wiki.termux.com/wiki/Termux-services
https://blog.mobnia.com/using-runit-to-supervise-nodejs-applications/
Устанавливаем сам пакет сервисов:
pkg install termux-services
Дальше - нам нужно будет создать специальные папки и файлы для нашего сервиса
cd $PREFIX
$PREFIX - это переменная, в которой прописан путь. Поэтому нам удобно будет ею пользоваться
(работа в фоновом режиме и автоматический перезапуск).