- обновляем пакеты
sudo apt update && sudo apt upgrade -y
- скачиваем репозиторий
git clone https://github.com/tarabukinivan/haqq_bot.git
- Устанавливаем nodejs и npm
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash - && \
sudo apt-get install nodejs -y && \
echo -e "\nnodejs > $(node --version).\nnpm >>> v$(npm --version).\n"
результат выполнения должен быть примерно такой:
- переходим в папку проекта
cd /$USER/haqq_bot
- устанавливаем необходимые модули
npm i
- создаем файл .env
nano .env
и вводим необходимые данные для работы бота в файл .env
BOT_TOKEN=TOKEN
VALOPER=valoper_address
CHATID=chat_id
INFOTIME=300
LASTPROPOSAL=155
TOKEN - телеграм токен
valoper_address - валопер адрес
chat_id - id чата
300 - задержка повторных отправок сообщений в секундах при критических ошибках (можно редактировать в самом боте)
155 - последний известный пропозал. Можно поставить 0, тогда бот уведомит о последнем пропозале и перезапишет значение.
где взять TOKEN и chat_id можете посмотреть в статье Настройка телеграм бота
- устанавливаем pm2 для запуска бота в фоне
npm i pm2 -g
- запуск бота (обязательно выполняется в папке бота)
pm2 start index.js
- для остановки бота выполняется команда: (расширение файла .js необязательна)
pm2 stop index
Бот каждые INFOTIME проверяет синхронизацию ноды, jailed, выход нового пропозала. В случае плохих результатов уведомляет пользователя.
А также имеет команды для проверки вручную:
/start - Приветствие
/info - Информация о валидаторе
/aprop - Список активных proposal
/allprop - Список всех proposals
/df - Информация о жестком диске
/free - Информация об ОЗУ
/vsync - Информация о синхронизации
/settime - Частота отправки сообщений при критических ошибках ноды
Функция loop() каждые infotime секунда запускает функцию prov()
Функция let valiki = await infop('infoval',valoper)
возвращает состояние валидатора:
если jailed
станет true
, то отправит сообщение valoper jailed
Функция let vsync = await infop('vsync')
возвращает состояние синхронизации ноды:
Если catching_up
станет true
, то отправит сообщение the node is not synchronized, check the synchronization information with the /vsync command
Функция let allprop = await infop('allprop')
возвращает список всех пропозалов:
Потом берется последний пропозал и сравниватся с LASTPROPOSAL
. Если последний пропозал больше, чем в LASTPROPOSAL
, то отправляется сообщение пользователю и LASTPROPOSAL
перезаписывается.