Как сделать бота для ставок в телеграмме?
Мессенджер Telegram становится все более востребованным среди беттеров. Появляются все новые каналы, посвященные ставкам на спорт, а также множество ботов, помогающих в беттинге. Причем количество ботов очень большое и у многих игроков букмекерских контор возникает логичный вопрос, как сделать бота для ставок на спорт в Телеграмме?
Как создать бота для ставок в телеграмме?
Какие боты бывают?
Чтобы ответить на этот вопрос, сначала необходимо понять, для каких именно целей вы хотите создать бот. Большинство из существующих на данный момент ботов для беттинга в Телеграмме проводят анализ определенной спортивной дисциплины по заранее заданному алгоритму, после чего они выдают прогнозы на предстоящие матчи. Насколько глубокий анализ проведен и насколько точные прогнозы дает бот зависит от того, как он был запрограммирован. Как правило, боты программируют на поиск «валуйных» коэффициентов, то есть недооцененных букмекерами событий. Причем этот алгоритм работает круглосуточно, обрабатывая большой объем информации.
По большому счету, боты для ставок на спорт в Телеграмме можно разделить на три вида:
- Аналитические, которые оценивают вероятности выигрыша по предложенным букмекерами коэффициентам и на основе статистических данных прошлых матчей.
- Боты для автоматических ставок, сканирующие линию букмекера и заключающие пари, когда находится валуйный коэффициент.
- Вилочные боты, выполняющие поиск арбитражных ситуаций.
Руководство по написанию бота в телеграмме
Как создать бота
Вы можете пойти по двум разным путям – попытаться создать бота самостоятельно или подготовить задание программисту, который сделает робота в соответствии с вашими пожеланиями. Сразу скажем, что для самостоятельного создания такого робота требуются хотя бы минимальные познания в языках программирования PHP или Python. Конечно, сам по себе бот может быть создан и без таких знаний. Для этого надо в Телеграмме найти @Botfather и отправить ему команду /newbot. После этого он присылает ответ с вопросом, какое имя надо присвоить новому боту. Вы вводите имя и все, робот создан. Вот только этот бот ничего не умеет делать, а для его «обучения» необходимо уже иметь навыки программирования.

Иногда различные специализированные ресурсы предоставляют возможность скачать бота для ставок на спорт бесплатно. Но в качестве таких бесплатных роботов есть большие сомнения. Если программа стоящая и приносит реальную пользу, вряд ли она предлагалась бы в свободном доступе всем желающим. Поэтому вариант с заказом написания робота программисту является оптимальным.
Бот для ставок на спорт: сигнализатор от Искусства Беттинга

Всем привет. В этом материале я расскажу о том, что такое бот для ставок на спорт от проекта Искусство беттинга, который станет не просто помощником, но и основным инструментом для получения прибыли в букмекерских конторах. С его помощью, вы сможете создать своего бота бесплатно, который поможет зарабатывать на вашей стратегии или закономерностях в футбольных матчах.
Что такое бот для ставок
Сигнализатор Искусство Беттинга – это сервис, который позволяет создать своего ставочного бота, который будет отправлять на ваш телеграмм сигналы о футбольном матче, в котором сошлись нужные условия, выбранные вами.
Думаю, каждый из вас знает о том, что в футбольных матчах то и дело происходят какие-либо закономерности, с помощью которых можно неплохо зарабатывать. Однако, большинство закономерностей очень трудно отследить, так как они происходят в лайве. По этой причине, у беттеров нет времени для того, чтобы самостоятельно отслеживать статистику и следить за ходом игры, из-за чего многие теряют шанс на хороший заработок.
К примеру, если вы хотите использовать стратегию на ТМ в тех матчах, где счет после первого тайма стал 2:1 или 1:2, а количество ударов по воротам не превысило 3, да и атак было не больше 40, то можете с легкостью выставить данные параметры и ждать наступления подобного поединка. При этом, можете добавить в данную стратегию размер коэффициента, который нужен для основной ставки, или же владение мячом, желтые карточки и неограниченное количество других условий – все зависит от вашей фантазии.
О том, как пользоваться и настроить бот для ставок бесплатно я расскажу далее, а пока, хотел бы обратить ваше внимание на основные функции нового сервиса.
Чем сигнализатор отличается от других ботов
Разумеется, сигнализатор не единственный бот для ставок, который работает по описанному выше принципу. Однако, из всех продуктов, которые представлены в интернете, вы не сможете найти лучше. Чтобы не казаться голословным, посмотрите на сравнительную таблицу сигнализатора с другими ботами.
| Название бота | Преимущества и недостатки |
| Footbet V | Бот анализирует статистику последних и очных противостояний играющих команд, и на основе данной информации вычисляет вероятность исхода на победителя. Однако, помимо математического анализа, здесь вы не сможете оценить развитие событий в режиме лайв, а также задать свои параметры |
| ValueFF | Позволяет находить валуйные ставки с очень выгодными коэффициентами по собственным алгоритмам. Проблема в том, что бот работает примитивным образом – следит за коэффициентами всех БК на один исход и в случае отклонения от стандарта выдает валуй, что вообще не обоснованно и приводит к минусу на дистанции |
| Marline | Неплохой инструмент, который позволяет находить наиболее высокую вероятность выигрыша аутсайдера. Однако, учитывается только статистика, а о лайве не идет и речи. К тому же, здесь нельзя настроить свои параметры |
| Buker | Данный бот позволит вам оценить футбольный матч с точки зрения букмекера используя распределение Пуассона. Проблема в том, что бот е может оценить реальное развитие событий по ходу матча, из-за чего становится бессмысленно использовать его в лайве |
| Minebet | Отличный инструмент, который позволяет создать своего бота, однако, вы столкнетесь с тем, что здесь слишком мало возможностей в плане условий, которые можно задействовать по сравнению с сигнализатором |
| Hochuprognoz | Популярный инструмент, который выдает прогнозы на лайв ставки. Проблема в том, что бот не настраивается вручную и ориентируется только на статистику |
Если сделать общий вывод, то становится понятно, что благодаря огромному функционалу и возможностям, наш бот для ставок заслуженно выделяется на фоне остальных и называется лучшем. К тому же, в нашем сигнализаторе именно вы выбираете условия, по которым пойдет работа бота, а не программист, который уже решил то за вас, что повысит проходимость в беттинге.
Какие условия можно добавлять в сигнализатор
На данный момент, бот для ставок дает возможность включать в свою стратегию огромный набор статистических показателей, среди которых можно выделить:
- Голы;
- Желтые карточки;
- Красные карточки;
- Точный счет;
- Количество созданных атак;
- Количество созданных опасных атак;
- Угловые;
- Удары по воротам;
- Удары в створ ворот;
- Штрафные;
- Владение мячом.
При этом, стоит добавить, что каждое из написанных выше условий можно использовать не только на весь матч, но и на первый и второй тайм, а также есть возможность задать свой интервал времени.
Однако, самое главное, на чтобы я обратил ваше внимание – коэффициенты на исходы. Да, с помощью сигнализатора, вы можете обозначить величину коэффициента на нужный исход. Среди доступных на данный момент исходов в росписи матчей доступны такие, как:
- Исход на победителя;
- Двойной шанс;
- Против ничьи;
- Тотал;
- Фора;
- Обе забьют.
Как видите, многофункциональность сигнализатора поражает, так что самое время перейти к делу, и далее я расскажу о том, как зарегистрироваться на сайте, а также покажу, как настраивать условия.
Регистрация через телеграмм бота
На данный момент есть возможность зарегистрироваться на сайте бота для ставок двумя способами. Предлагаю рассмотреть один из самых простых вариантов – через телеграмм. Напоминаю, что при использовании бота для ставок, все сигналы будут приходить именно в ваш телеграмм в личные сообщения, так что обязательно скачайте или установите на свой компьютер данный мессенджер. Как только сделали это, переходите в бот – @sports_uvedomlator_bot.
Далее, вам нужно будет нажать на кнопку запустить.

Затем, вы получите сообщение с подробными инструкциями к дальнейшим действиям, а также свой айди в боте. Все, что от вас требуется сделать далее, так это придумать логин и отправить его в сообщении в бот.

Если вы правильно ввели логин и он вас устраивает, то отправьте в сообщении – да. Как только сохранили свой логин, то можете можете приступить к созданию пароля. Делается это точно также – придумываете пароль и отправляете его в бот, а затем подтверждаете.
На этом, процедура регистрации в боте для ставок телеграмм закончена, и вы можете перейти на сам сайт сигнализатора, ссылку на который получите в ответном сообщении в боте, или же перейдя на сайт по ссылке.
Обратите внимание, что на самом сайте также доступна регистрация через форму для заполнения данных, где вам нужно точно также придумать пароль и логин, а также указать свой айди в телеграмме, который можно получить в боте сигнализатора.

Вход в бот для ставок на спорт “Сигнализатор”
Как только закончили регистрацию, можете войти в свой личный кабинет, авторизовавшись путем ввода логина и пароля в соответствующих полях, как это показано на изображении.

Как создать бот для ставок
Перейдем к самому главному и интересному – настройке своего бота. Сразу хочется сказать о том, что мы постарались сделать сигнализатор наиболее простым и понятным на интуитивном уровне, чтобы вам было легче разобраться в нем, но на всякий случай, предлагаю рассмотреть все главные функции по порядку.
Выбор лиги
Для начала, вам нужно настроить список лиг. Для этого, нажмите на вкладку мои лиги, которая расположена в главном навигационном меню.

Здесь вам откроется список всех стран, в которых проходят соревнования по футболу, по которым возможно получать сигналы. Сразу стоит предупредить, что в футбол играют в каждом уголке нашей планеты, так что выбор невероятно огромен, и вы сможете получать сигналы из Бенина, Бангладеша или даже Суринами. По этой причине, настоятельно рекомендую отметить те лиги и турниры, на которые будете ориентироваться, чтобы не получать лишние уведомления.
Также, вы можете сделать свой список лиг, отметив каждую, а затем написать ее название, после чего она автоматически сохраниться и ее можно будет использовать в настройке бота для ставок телеграмм.
Как создать стратегию
Переходим к созданию своей стратегии ставок. Для этого, нажмите на соответствующую вкладку в главном навигационном меню.

Как видите, далее здесь будет расписан каждый ваш шаг, и самый первый – придумать название стратегии. Хочу отметить, что следует написать свою стратегию как можно понятней, ведь сигнал будет приходить вам в телеграмме с пометкой названия стратегии, и если у вас будут записаны боты 1, 2, 3 и так далее, то сможете легко запутаться.
Второй шаг в настройке бота – выбор лиг. Это то самое, о чем я рассказал выше – здесь вы можете выбрать:
- Для любого матча (осторожно, ведь сигналы будут присылаться с матчей, которые проходят во всем мире);
- Для всех матчей кроме ТОП-лиг;
- Только для ТОП-лиг;
- Для одной из ТОП-лиг;
- Мои лиги (можно будет выбрать тот список, который вы сделаете самостоятельно, о чем я рассказал выше).
Это самые простые шаги в настройке бота, но теперь я предлагаю перейти к самому интересному – условия бота для ставок.
Как настроить условия для бота
Первым делом, вы должны отметить то, к какой команде должно будет применимо условие – к домашней, гостевой или к обеим. Думаю, с этим и так все понятно, но затем, вам нужно будет отметить временной отрезок матча, в котором и должно случиться нужное условие. Здесь все также предельно просто, ведь можно выбрать весь матч, первый или второй тайм.
Однако, многие стратегии требуют конкретного отрезка времени, будь то с 1-й по 15-ю минуту или с 30-й по 77-ю. К счастью, мы об этом позаботились, и вы можете выбрать свой параметр, нажав на эту опцию и вписать с какой минуты должно случиться условия и до какой.

Далее, переходим к выбору того самого условия. Для этого, нажимаем на вкладку что должно случиться и выпадет список всех описанных выше вариантов сигналом на голы, тотал, удары в створ и так далее. Выбираем нужный вариант, к примеру, возьмем количество атак, и вписываем какое количество атак должно быть в матче для нашего бота. Также, не забудьте отметить больше или меньше, так как это очень важно.

Вписываем нужные значения и нажимаем на кнопку сохранить тригер, после чего вы сможете получать сигналы о достижении нужного результата на свой телеграмм. Однако, я не просто так говорил о том, что наш бот для ставок является многофункциональным сервисом, ведь вы всегда можете нажать на кнопку добавить еще условия, и дописать в свою стратегию другие варианты сигналов, что сделает вашу стратегию более сложной и прибыльной. Впрочем, чтобы закрепить материал, я предлагаю вам прямо сейчас рассмотреть пример того, как создать свою стратегию и указать как можно больше сложных условий.
Пример стратегии по боту ставок
Давайте прямо сейчас сделаем стратегию, в которой будут такие условия:
- Количество опасных атак в матче меньше 60 с 50-й по 65-ю минуту;
- Удары в створ ворот в этот же промежуток времени меньше 4-х;
- Счет в матче 2:0;
- Коэффициент на ТМ 3.5 не меньше 1.8.
Теперь переходим к созданию бота – называем стратегию и выбираем нужные чемпионаты, после чего переходим к самим условиям. Первым делом отмечаем, что условия применимы к обеим командам и выбираем временной отрезок матча. Так как нужно с 50-й по 65-ю минуту, то вводим эти значения таким образом:

Далее, отмечаем статистические условия. Выбираем опасные атаки и указываем, что их должно быть меньше 60. Затем, нажимаем на добавить условие и нам снова откроется меню, в котором нужно будет выбрать команды и указать временной промежуток. Заполняем эти данные таким же образом (либо изменяем, если того требует стратегия) и указываем удары в створ ворот меньше 4-х. Выглядит это вот так:

Теперь нам остается добавить еще одно условие – коэффициент ТМ 3.5 не меньше 1.8. Для этого, снова нажимаем на добавить условие, выбираем команды и временной отрезок, а затем во вкладке линия нажимаем Тотал М. Откроется меню, в котором нужно указать дополнительный параметр – это значение тотала, которое нужно (будьте внимательны, ведь указывать нужно целое значение, а не дробное). Вписываем сюда 3 (имеется ввиду ТМ 3.5), а в дополнительном параметре события вписываем 1.8 (коэффициент нужной ставки) и указываем больше. Выглядит это вот таким образом:

Все, что остается сделать после этого – сохранить тригер и ждать сигнала о том матче, в котором произойдут те условия, которые указали в боте для ставок. Все сигналы буду приходить в телеграмм канал.
Как удалить или изменить стратегию
Не забывайте, что вы всегда можете удалить или изменить свою стратегию с помощью вкладки мои стратегии в главном меню сайта сигнализатора. После того, как перешли на данную вкладку, сможете изменить любое условие, которое задействовано в вашей стратегии.

Как создать интервал в коэффициентах
Напоследок, хотел бы ответить на один вопрос, который интересует многих беттеров – как создать интервал в коэффициентах. К примеру, вы хотите получать сигнал о том, что на какой-либо исход предлагают кэф от 2 до 2.5.
Для этого, заполняете те условия, которые нужны для стратегии, а затем во вкладке линия выбираете исход, к примеру, ТМ 1.5 и вписываете туда коэффициент 2, а затем добавляете еще одно условие с линией, где вписываете коэффициент на ТМ 1.5 меньше 2.5. Выглядит это таким образом:

Как видите, пользоваться ботом для ставок очень просто, а самое главное полезно и выгодно. Так что, обязательно начните тестировать и применять свою стратегию уже сейчас. При этом, пользоваться ботом для ставок можно совершенно бесплатно, так что настоятельно рекомендую перейти на сайт прямо сейчас.
Как я писал бота на теннисные ставки

Хочу поделится некоторой инфой по этой теме. Если у вас был подобный опыт с удовольствием бы прочел!
Тема довольна интересная, тем более что крупнейшие букмекерские конторы предоставляют API для ставок. У меня была пару подходов к этому. Сначала я наверно как и все решил что буду арбитражить на разных площадках ставки, подобные ставки называются «вилки», написал бота и попробовал. Однако Букмекеры подобных деятелей сильно не любят, и довольно легко вычисляют, после пары сделок мне на «Марафоне» порезали лимиты до 20 рублей на ставку.
После мне пришла идея попытаться использовать машинное обучение для направленной стратегии угадывания победителя в матче. Погулил и пришел сюда https://habrahabr.ru/post/306944/. Решил что с приемлемыми трудозатратами сделать это быстро не получится, решил воспользоваться готовым сервисом, который дает прогнозы на предстоящие матчи. Остановился на этом http://ohmybet.com, после регистрации доступна история сделок, однако, создатели ресурса конечно в качестве примера доходности показали лишь часть, где доходность была действительно впечатляющей.
После регистрации вы получаете доступ к полной истории, в общем написал парсер и посмотрел график доходности за весь период. История доступна с 2015 года, вот она. Вертикальной полосой отметил тот день до которго создатели ресурса используют в качестве примера доходности.
Просадки начиная с апреля 16 года конечно адские.
Как видно «что-то пошло не так», но не смотря на просадку все же решил попробовать потестить. Написал бота на R который по таймауту авторизовался получал прогнозы и делал ставки. В качестве букмекера выбрал www.pinnaclesports.com так как он дает хороший API и самые высокие коэффициенты на рынке, к тому же это один из самых надежных букмекеров с самым высоким рейтингом, и к которому написан интерфейс на R https://cran.r-project.org/web/packages/pinnacle.API/index.html. Погонял бота, получил небольшой плюс, но продлевать подписку не стал. Слежу за графиком и если что думаю подключится )
Бот для сборов. Собираемся на футбол с новыми технологиями
Всем привет. В этой статье я опишу своего чат-бота для сервиса обмена сообщениями telegram и социальной сети VK с использованием NodeJS.
На этом месте у многих читателей должно вырваться что-то вроде: «Доколе!» или «Что, опять ?!».
Да, похожие публикации уже были и на хабре в том числе. Но, тем не менее я считаю, что статья будет полезна. Кратко о том что с технической стороны представляет реализация бота:
- В качестве каркаса для приложения используется набирающий популярность фреймворк NestJS.
- Библиотека telegraf для взаимодействия с API Telegram.
- Библиотека node-vk-bot-api для взаимодействия с API VK.
- Библиотека typeorm для организации слоя хранения данных.
- Тесты с использованием mocha и библиотеки ассертов chai .
- CI с использованием Travis CI для тестирования и GitHub Actions для деплоя докер-образов.
В качестве побочного задания попробуем подружить нашего бота с Viber делая его таким образом универсальным для использования в нескольких сервисах обмена сообщениями.
Тем кто хочет узнать что из этого получилось добро пожаловать под кат.
Постановка задачи
В качестве полезной физической нагрузки я предпочитаю футбол. На любительском уровне разумеется. Являясь участником нескольких каналов и чатов в vk, viber и telegram часто приходится видеть такую картину:

Что мы здесь видим:
- «П» добавил себя.
- После него добавилось еще 3 человека среди которых был некто «С».
- «П» добавил своего товарища по имени «Димон».
- После этого «П» не поленился и подсчитал что на текущий момент уже есть аж 5 человек.
- Однако эта информация была актуальной недолго, так как я тоже решил побегать и добавил себя.
В особо запущенных случаях люди могут ставить «+» а потом отменять свое участие, приглашать друзей не из чата или отмечаться за других участников чата и делать прочие активности. В итоге это приводит тому, что когда все в итоге приезжают играть выясняется что:
- Вася поставил +1 имея ввиду не только себя, но и своего друга Гошу.
- Коля написал что прийдет, но организатор Спиридон посчитал глазами только плюсики.
В итоге имеем возможно неравные по кол-ву команды, «лишнего Гошу» и неожиданно возникшего Колю.
Для того, чтобы избежать таких коллизий я написал простого бота, который помогает наглядно отображать состав участников предстоящей игры и удобно в нее добавлять(ся)/удалять(ся).
Итак, в базовой реализации по моему мнению бот должен был уметь:
- Быть встраиваемым в произвольное кол-во чатов. Хранить свое состояние для каждого чата в отдельности.
- По команде /event_add создавать новое активное событие с определенной информацией и пустым списком игроков. Предыдущее активное событие должно становится неактивным.
- Команда /event_remove должна отменять текущее активное событие.
- Команда /add должна добавлять нового участника для текущего активного события. При этом если команда вызвана без какого-либо дополнительного текста, то добавляться должен тот, кто набрал команду. В противном случае добавляется человек чье имя указали при вызове команды.
- Команда /remove удаляет человека из списка участников по правилам, описанным для команды /add.
- Команда /info позволяет посмотреть кто уже записался на игру.
- Очень желательно, чтобы бот отвечал на том же языке который настроен у игрока (или на английском по умолчанию).
Чтобы быстро посмотреть что получилось в итоге, можно сразу перейти к последнему разделу «Результат и выводы». Ну а если интересуют детали реализации, то данная информация достаточно подробно изложена ниже.
Проектирование и разработка
При проектировании приложения в голове возникла примерно следующая схема:

Здесь основная идея состояла в том, чтобы вынести всю специфику работы с различными системами обмена сообщений в соответствующие адаптеры и инкапсулировать в них логику взаимодействия с библиотеками реализующими соответствующие API, обработку и приведение данных к единому виду.
Интерфейс и модели сообщений
Для сообщений получилось спроектировать следующий интерфейс IMessage, которому удовлетворяют классы, хранящие данные входящих сообщений для различных систем и методы для работы с этими данными:
Базовый класс BaseMessage, реализующий данный интерфейс имеет следующий вид:
Класс сообщения для Telegram:
На что здесь стоит обратить внимание:
chatId — уникальный идентификатор чата. Для Telegram он приходит в явном виде в структуре каждого сообщения. Однако в случае VK такого идентификатора в явном виде нет. Как же быть? Чтобы ответить на этот вопрос нужно понять как бот функционирует в рамках VK. В этой системе бот в групповой переписке выступает от лица сообщества для которого он заводится. Т.е. каждое сообщение бота содержит числовой идентификатор сообщества group_id. Кроме того, в сообщении приходит peer_id (более подробно можно почитать здесь) как идентификатор групповой беседы в нашем случае. На основании этих двух идентификатором можно построить свой идентификатор чата например таким образом:
Данный способ конечно не совершенен, но применим для текущей задачи.
fullText и text. Как следует из названия переменных, fullText содержит полный текст сообщения, в то время как text содержит только ту часть, которая идет после названия команды.
Это удобно, так как позволяет использовать готовое поле text для парсинга содержащейся в нем вспомогательной информации вроде даты события или имени игрока.
- В отличие от Telegram сообщения VK не поддерживают набор тегов для выделения текста вроде <b> или <i> , поэтому при ответе данные тэги приходится удалять с помощью использования регулярных выражений.
Адаптеры для приема и отправки сообщений
После создания интерфейса и структур данных для сообщений Telegram и VK пришло время для реализации сервисов обработки входящих событий.

Эти сервисы должны инициализировать сторонние модули для взаимодействия с API Telegram и VK запускать механизмы long-polling, а также иметь связь входящих команд и внутренних событий возникающих в системе при получении данных от сервисов обмена сообщениями.
На что здесь стоит обратить внимание:
- Из-за определенных проблем с доступом к сервису Telegram (привет Роскомнадзор) пришлось опционально использовать прокси который предоставляет пакет socks5-https-client.
- При обработке события в контекст добавляется поле со значением команды с текстом которой было принято сообщение.
- Для VK приходится отдельно загружать данные пользователя который отправил сообщение с помощью отдельного API вызова:
Модель данных
Для реализации заявленной функциональности бота было достаточно наличия трех моделей:
- Chat — чат или беседа.
- Event — событие для чате назначенное на определенную дату и время.
- Player — участник или игрок принимающий участие в событии.

Реализации моделей с помощью библиотеки typeorm имеют вид:
Здесь нужно еще раз проговорить механизм работы бота для различных команд с точки зрения манипуляции с моделями Chat, Event и Player.
- При получении любой команды происходит проверка существования в БД чата (Chat) с chatId . Если соответствующей записи нет, то она создается.
- Для упрощения логики в каждом чате может быть только одно активное событие (Event). Т.е. при получении команды /event_add в системе создается новое активное событие с указанной датой.
Текущее активное событие (если оно существует) становится неактивным. - /event_remove находит в текущем чате активное событие и деактивирует его.
- /info находит в текущем чате активное событие, выводит информацию по этому событию и список игроков (Player).
- /add и /remove работают с активным событием добавляя и удаляя из него игроков.
Соответствующий сервис для работы с данными получился следующим:
Шаблонизация ответов
Помимо описанного сервиса StorageService работы с данными также возникла необходимость в реализации выделенного сервис TemplateService задачами которого на данный момент являются:
- Загрузка и компиляция handlebars шаблонов для вариантов ответов на различные команды на разных языках.
- Выбор подходящего шаблона в зависимости от текущего события, статуса ответа и языка пользователя.
- Заполнения шаблона данными полученными в результате выполнения команды.
На что здесь стоит обратить внимание:
Файлы шаблонов лежат в отдельной директории ./templates в корне проекта и структурированы по языку, действию (команде) и статусу ответа.
При инициализации приложения все шаблоны ответов загружаются в память и заполняют Map с ключами которые однозначно идентифицируют шаблон:
В настоящий момент в системе есть 2 набора шаблонов: для русского и английского языков.
Предусмотрен fallback на дефолтный язык (английский) в случае отсутствия необходимого шаблона для языка текущего события.
Сами handlebars шаблоны, например:
содержат как традиционные placeholder-ы, так и набор допустимых тегов для форматирования ответов в Telegram.
Сервисы обработки команд (Actions)
Теперь, когда описаны основные вспомогательные сервисы пришло время перейти к реализации собственно бизнес-логики бота. Схематично связь между модулями представлена здесь:

В задачи базового класса BaseAction входит:
- Подписка на определенное событие от AppEmitter.
- Общая функциональность обработки событий, а именно:
- поиск существующего или создание нового чата в контексте которого будет обработана команда.
- Вызов шаблонного метода doAction реализация которого является индивидуальной для каждого класса наследующего BaseAction.
- Применение шаблонов к полученному в результате выполнения doAction ответу с помощью TemplateService.
Задачей дочерних классов BaseAction является выполнение метода doAction принимающего на вход:
- Chat который был создан или определен в базовом классе
- Объект удовлетворяющий протоколу IMessage.
В результате выполнения данного метода также возвращается IMessage, но с установленным статусом для выбора правильного шаблона и данными которые будут участвовать в шаблонизации ответа.
На что здесь стоит обратить внимание:
- Команды /add и /remove добавляют/удаляют игрока чье имя идет после команды. Если имя не указано, то добавляется/удаляется игрок вызвавший команду.
- В ответ на команды /add , /remove и /info выводится обновленный список игроков для активного события.
Функциональность, необходимая для реализации (1) и (2) была вынесена в специальный вспомогательный класс:
Собираем все вместе
Как было упомянуто в начале статьи, в качестве каркаса приложения используется фреймворк NestJS. Мне в свое время повезло лично присутствовать на докладе от создателя данной замечательной библиотеки.
Многие бойлерплейты, руководства и библиотеки NodeJS часто грешат тем, что не предлагают никакой вменяемой стратегии инициализации и связей между модулями. С ростом приложения, при отсутствии должного внимания, кодовая база превращается в мешанину из require-ов между модулями, зачастую приводя даже к циклическим зависимостям или связям там, где их в принципе не должно быть. Данные проблемы можно решить используя например продвинутые Dependency Injection контейнеры вроде awilix, но NestJS идет дальше.
Помимо собственного DI и средств для решения типичных задач, возникающих при разработке NodeJS сервиса, этот фреймворк предлагает по моему скромному мнению правильную парадигму формирования структуры модулей, сгруппированных вокруг тех или иных частей функциональности приложения.

Конфигурация
Данный бот имеет следующие параметры конфигурации которые задаются с помощью переменных окружения.
- TELEGRAM_BOT_TOKEN — уникальный токен для Telegram бота.
- TELEGRAM_USE_PROXY — флаг при включении которого задействуется прокси для доступа к TelegramAPI.
- TELEGRAM_PROXY_HOST — хост прокси сервиса для доступа к TelegramAPI.
- TELEGRAM_PROXY_PORT — порт прокси сервиса для доступа к TelegramAPI.
- TELEGRAM_PROXY_LOGIN — логин для прокси сервиса доступа к TelegramAPI.
- TELEGRAM_PROXY_PASSWORD — пароль для прокси сервиса доступа к TelegramAPI.
- VK_TOKEN — уникальный токен для VK бота.
- DATABASE_URL — строка подключения к БД. Используется для production окружения.
На что здесь стоит обратить внимание:
- TELEGRAM_BOT_TOKEN для получения этого токена достаточно воспользоваться общей инструкцией по созданию бота на стороне Telegram.
- VK_TOKEN — как было упомянуто выше, бот VK действует от имени сообщества. Т.е. для получения данного токена, необходимо сначала создать или взять существующее сообщество и в рамках него настроить бота. Более подробно об этом можно почитать в соответствующем разделе официальной документации.
- DATABASE_URL — в production окружении для хранения данных используется PostgreSQL. В моем случае я просто подключился к неожиданно хорошему DBaaS под названием elephantsql имеющему бесплатный план.
«Если что-то можно автоматизировать — это нужно автоматизировать». Я разделяю этот девиз, поэтому добавил традиционную интеграцию с замечательным TravisCI для прогона тестов с помощью типичной конфигурации:
Как здесь также можно заметить помимо собственно прогона тестов происходит сбор метрики покрытия кода тестами и отправка соответствующих данных в сервис codecov.
При реализации сбора Docker образа и отправки его в Docker Hub мне очень помогла отличная статься от пользователя Gonf здесь на сайте Строим домашний CI/CD при помощи GitHub Actions и Python. По аналогии с его решением я сделал свой Continuous Deployment, который запускается при публикации релиза в Github:
Результат и выводы
Что же получилось в итоге. Для Telegram работа бота выглядит примерно так:
Создаем новое событие на определенную дату и время.

Игрок решил принять участие.

Игрок отменил свое участие в игре.

Похожая картина и для VK за исключением выделения текста тегами <b> и <i> .
Создаем новое событие на определенную дату и время.

Игрок отменил свое участие в игре.

Что касается Viber, то неожиданно этот месенжер оказался в силу определенных ограничений непригодным для подключения такого бота. С технической стороны проблем не возникло за исключением того, что интеграция с Viber требует использования webhooks вместо long-polling. Настоящей проблемой оказалось то, что бот в Viber не может быть использован как полноправный участник групповой беседы. Про это в частности можно почитать здесь. Поэтому в итоге от интеграции с этим мессенжером пришлось (временно?) отказаться.
В Telegram готового бота можно добавить к себе в групповой чат под именем @Tormozz48bot .
Исходники моего проекта лежат на Github. Приветствуются любые правки, замечания и предложения.