Запуск Телеграм-бота на смартфоне в Termux

Запуск Телеграм-бота на смартфоне в 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 - это переменная, в которой прописан путь. Поэтому нам удобно будет ею пользоваться



(работа в фоновом режиме и автоматический перезапуск).


Report Page