Привет, нация!
Недавно мы, команда @golosio, запустили бота, голосующего за посты написанные через сайт golos.io. Сегодня я бы хотел открыть исходный код и подробно рассказать про этот инструмент.
Приступим, исходный код данного бота можно найти здесь, ниже представлена общая архитектура данного бота. Я подробно расскажу про каждый отдельный модуль, и их взаимодействие.
Бот написан на node.js, и состоит из нескольких частей. Хочу обратить ваше внимание, что в данном сервисе используются внешние зависимости, например хорошо знакомый вам пакет golos.js. Поскольку данный бот это первая ласточка из множества сервисов, которые мы сейчас разрабатываем, мы в нем используем первую версию core-service. Loop, обозначенный на картинке ниже как раз является частью core-service. В текущий момент core-service уже значительно изменился, и был вынесен в отдельный репозиторий.
Если данная статья будет вам интересна, я приступлю к написанию целой серии статей о том, как мы сейчас перестраиваем архитектуру клиента golos.io, а пока проигнорируем абстракции верхнего уровня и приступим к описанию непосредственно бота.
Общая архитектура выглядит следующим образом.
Registrator
Представляет из себя сервис регистрации новых постов со встроенной системой фильтрации. Также в состав данного модуля встроена система автоматического восстановления при возникновении сбоев.
Разберем каждую часть по отдельности.
Listener работает постоянно, собирая данные приходящие в каждом новом блоке. В случае, если в блоке появляется новый пост, то данные отправляются по цепочке на проверку, во время которой сервис проверяет был ли опубликован пост через golos.io, является ли проверяемый пост первым за сутки от автора, и достаточно ли Силы Голоса у автора. Если пост прошел все необходимые проверки, то он добавляется в БД. Уже сейчас предусмотрена возможность подключать сторонние валидаторы, которые могут быть как отдельно написанной функцией, так и сторонним сервисом. Однако пока подобного рода валидаторы отсутствуют и метод всегда возвращает true.
В случае если что то пошло не так, в сервисе предусмотрено автоматическое восстановление после сбоев. Механизм работает следующим образом. Во время сбора данных из БЧ, помимо всего прочего бот записывает номер последнего обработанного блока. При старте проверяется номер последнего обработанного блока и сравнивается с текущим номером блока. Если данные не совпадают, то бот начинает обрабатывать все пропущенные блоки, до тех пор, пока не дойдет до последнего актуального, после чего продолжается работа в штатном режиме.
Planner
Данный сервис предназначен для агрегации собранных данных, составления плана на день и расчета Силы Голоса с которой бот будет голосовать за посты. Принципиальная схема выглядит следующим образом.
При запуске планировщика происходит проверка на наличие сбоев. Планы создание которых было прервано удаляются, планы которые были выполнены частично продолжат свое выполнение с места остановки. Так же запускается составление нового плана, в процессе чего рассчитывается Сила Голоса, с которой бот будет голосовать за посты и интервалы, с которыми будет происходить голосование и запускается процесс раздачи лайков.
Liker
Пожалуй самая простая часть бота. Данный сервис работает ровно сутки, выставляет лайки, согласно составленному плану, с заранее рассчитанной Силой Голоса и интервалами голосования. После того как голос за пост был отдан, сам пост помечается как “готовый”, как только в плане заканчиваются необработанные посты, сам план также помечается как завершенный.
В следующей статье я расскажу как установить и настроить бота.
Я всегда открыт для конструктивного диалога, со мной можно связаться и обсудить волнующие вас задачи в телеграмме в нашей группе, посвященной разработке клиента golos.io, либо лично.
Голосуйте за мою делегатскую ноду, если вам интересны подобные статьи, а я, вне зависимости от вашего голоса, направлю все свои силы для улучшения и развития проекта Голос.
@nickshtefan спасибо за бота!!!
@vista это работа всей команды, скоро будет гораздо больше интересного
@nickshtefan Скорей бы уже..
@nickshtefan , классно вы это придумали, молодцы!
Я об этом давно уже говорил - более полугода назад: когда только началась вся эта возня с бустерами и перекос пула начался.
Говорил, что надо фаундерам создавать такого бота, чтобы он поддерживал новичков и тех, кто в бустеры не может или не хочет.
@aleos соглашусь, и лучше поздно, чем никогда.
Я скоро напишу статью, как этого бота модифицировать и запустить на своем сервере, и каждый желающий сможет запустить своего бота со своими параметрами
@nickshtefan согласен) Лучше позже, чем никогда. Поддержка новичкам и небустероманам очень помогает и стимулирует их пользоваться Голосом чаще, да и постить именно через Голос.ио.
Статья может пригодится кому-нидь, тоже полезное дело.
лайк
@nickshtefan а есть инструкция для чайников, как пользоваться этой штуковиной?)
@zaebooka чтобы получать лайки надо соблюдать правила, мои описаны в тут, здесь же описано как его установить и настроить, если хочется тоже раздавать голоса. Правила по которому лайкает аккаунт @golosio описаны в этом посте.
@nickshtefan тест
Бот апает непрерывно в течении суток при достижении заряда батареи ~100%?
@nickshtefan
Бот — хорошо, но лучше бы бенифициагство отменили. Тогда и пользователи начнут вновь использовать golos.io. А пока суть да дело, привыкнут к клонам и ни какими пряниками не заманишь.
Но, эт я так, с обывательской точки зрения. Ведь если пост написать, то это -10% бениф...(тьфу, налог) + (-25%) кураторских = -35% ...
Лично я с радостью постил бы с golos.io. Но, с моим мизером...эх, придется заморачиваться и дальше.
@nickshtefan Поймал уже 2 лайка от него)) по баксу за пост! Очень неплохо учитывая что мои общие вложения в голос 20$ ))
@serjo101 рад, что тебе нравится :)
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
vict0r, larks500, aleos
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
dobryj.kit теперь стал Делегатом! Ваш голос важен для всего сообщества!!!
Поддержите нас: