Продолжаю разбираться с javascript-ом. Ужасно непонятный язык программирования, но очень интересно. Сколько на нем уже написано. А так как я себя считаю мало мальским программистом, то разобраться обязательно нужно. Хотя бы основные понятия.
Вроде бы я разобрался с require и как это работает. Могу создавать простенькие классы, но не совсем допонимаю с template.
Боты
В качестве практических занятий я мучаю golos API. Уже написал одного голосовального бота, которого слизал с бота @vik.
Я писал несколько статей про Node-RED, на котором я написал простенького бота для Telegram-а повторяющего бота от @on0tole, извещающего об движении в моем аккаунте на голосе. Поэтому для упражнения с javascript-ом я решил написать такого же бота на javascript.
Бота я уже зачал, начал его писать как NPM модуль для Node.js. Исходники лежат здесь. Цель написать персонального мультибота. Пока внутри все бессистемно, с едва заметными зачатками архитектуры.
Пока что бот перебирает цепочку блоков и историю аккаунта пользователя.
Сообщает в чат telegram
- об отданных голосах за пост.
- о кураторских и авторских вознаграждениях
- подписывается на топики, в которых я комментировал или за которые голосовал и сообщает о новых комментариях этим темам. Удобно, если хочется быть в курсе развития дискуссии.
В планах
- добавить побольше оповещений
- добавить группировку оповещений
- встроить голосовального бота, в разных ипостасях
- добавить расширяемого бота отслеживающего переводы и выполняющего определенные действия (за оплату). Для монетизации наверное было бы неплохо.
Уставовка
Node.js
Для бота требуется Node.js 7 и более. Про установку можно почитать здесь
Собственно сводится к исполнению этих команд
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs
Git
Потребуется git для клонирования бота.
sudo apt-get install git
Клонирование репозитория
Что бы скачать исходники выполните
git clone https://github.com/gropox/golosbot.git
Теперь можно зайти в новую папку golosbot.
Зависимости. Прямо в папке с ботом выполните следующие команды.
npm install nedb
npm install steem
npm install telegram-bot-api-c
Должна быть создана папка с модулями "node_modules"
Теперь можно попробовать запустить бота командой
node .
остановить можно Ctrl-C
После первого запуска бот создает конфигурационный файл .golosbot.js
в домашней папке пользователя которым бот запускался. Собственно это json. Надо поменять пользователя, ввести токен для telegram бота и id чата. И можно запускать бота.
Бот Telegramm
Как создавать своего telegram бота можно поискать в интернете. Если коротко, то
- находите BotFather в мессенджере
- командой /newbot запускаете создание нового бота
- задаете имя бота и пользователя. К примеру coolbot и coolbot.
В ответ BotFather вышлет вам token такого вида
311111111:AAFM111111111SU-9Xj6Ai-7fPxXxXxX110
Сохраните его в конфигурацонном файле golosbot-а
В telegram найдите вашего свежеиспеченного бота и начните чат с ним. После чего, в корневой папке запустите
node getChatId
И в течении 10 секунд напишите в чате несколько сообщений. В консоли скрипт должен будет выдать chat_id. Можно остановить скрипт Ctrl-C
Сохраните chat_id в конфигурационном файле. Бот должен быть рабочим.
Я запустил его на своем снятом самом дешевом сервачке на digitalocean. В пику потребляет до 11% CPU, это если его запустить со старого блока. А так его даже top не показывает.
Пока что запускаю так, в ручном режиме
nohup node . >/dev/null &
Спасибо @vadbars за отладку инструкции :)
Тут пара примеров извещений
За меня проголосовали
Получено кураторское вознаграждение
Прокомментировали мой пост
Прокомментировали пост, к которому я тоже оставлял комментарий
Получено авторское вознаграждение. Правда только сейчас заметил, что линк на пост не работает. Надо будет поправить.
Попробовал. Выдает такую ошибку:
vadbars@vadbars-e ~/apps $ node .
module.js:472
throw err;
^
Error: Cannot find module '/home/vadbars/apps'
at Function.Module._resolveFilename (module.js:470:15)
at Function.Module._load (module.js:418:25)
at Module.runMain (module.js:605:10)
at run (bootstrap_node.js:425:7)
at startup (bootstrap_node.js:146:9)
at bootstrap_node.js:540:3
Я забыл сказать, что там три зависимости. "nedb", "steem" и "telegram-bot-api-c". Я их потом доставлял командами, прямо в папке golosbot.
Должна быть создана папка с модулями.
А где взять Id чата? И зачем в настройках postingKey?
Я закоммитил изменения.
выполните
git pull
комманду в папке с ботом. Должен появиться новый файл в корне getChatId.jsесли теперь запустить команду
То он будет ждать десять секунд сообщения в чате с ботом. Если теперь быстро написать несколько сообщений в чате, то если повезет скрипт выдаст chatid
При условии, что token для бота уже введен в конфиге.
И осторожно. Я добавил подписку на топики за которые вы отдали голос, может получиться, что будет часто выдавать сообщения. Еще не успел оттестировать.
Вот про чат ID не знаю. Сейчас придумаю что нибудь. Напишу скрипт и сообщу здесь. Posting Key пока не используется. Так на будущее.
Что-то я туплю. А как найти моего бота?
Отлично, это работает!
Это-то я сделал. А бота что-то не могу найти.
p.s. Завел нового бота - нашелся сразу. )
И chatid выдал после первого сообщения. Но извещений пока не шлет.
Спасибо, поправлю текст с учетом вашего опыта :)
@vadbars
Для отладки я выставляю ранешний номер блока, вместо последнего.
Для этого надо отредактировать исходник crawler/crawler.js
Найдите строку
Уберите вначале "//" и число поменяйте на 4493219. Следующим блоком вы голосовали за naminutku, за пост со статистикой.
Если сейчас запустите "node ." , то он должен будет выслать вам сразу горсть сообщений.
Не забудте потом закомментировать эту строку обратно, иначе он каждый раз будет слать эти сообщения после запуска.
Если он еще не создан, то в телеграмме найти бота BotFather и попросить его создать нового бота. Там надо будет придумать имя. BotFather сообщит вам токен вашего свежесозданного бота. Этот токен сохраните в конфигурации .golosbot.js. Потом в телеграмме по имени, которое вы задали, найдите вашего бота и начните с ним чат.В консолей запустите node getChatId и в чате пошлите несколько сообщений.
Интересно узнать подробнее, он автоматом подписывается на все статьи, где вы комментировали, или вручную? или оповещение приходит только если ответили на Ваш комментарий
Код тут, сумбурно, но думаю понятно. Там немного.
https://github.com/gropox/golosbot/blob/master/plugins/notifier/ops/comment_handler.js
Сам подписывается. Если встречает мой комментарий к чужой теме, сохраняет root_permlink и потом проверяет все комментарии, К подписанной теме или нет.