Sunday, September 30, 2018

"Hello, world!" бот за 10 минут

Вступление


С каждым новым ботом приходится повторять одни и те же действия для создания стартового шаблона. Есть необходимость создать базовый шаблон для всех ботов и всегда его использовать для ускорения разработки.

Шаблон, собственно, уже создан. Вот он:
https://github.com/VadimCpp/myfirstbotbot

Ниже будет инструкция как запустить шаблон на сервере Heroku. Если вы программист и начинаете изучать программирование телеграм ботов, этот пост именно для вас.


Инструкция


0. Предусловия


Прежде чем перейти к пункту 1, проверьте чек-лист:

  1. У вас есть аккаунт Github (если нет - зарегистрироваться);
  2. Вы умеете работать в командной строке (если нет - изучить навигацию по системе, выполнение команд, создание/копирование/удаление файлов);
  3. У вас установлен Telegram (если нет - установить);
  4. Уметь создавать боты в Telegram (если нет - изучить @BotFather);

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


1. Скачать исходники


Открыть командную строку перейти в рабочий каталог и выполнить команду:
git clone https://github.com/VadimCpp/myfirstbotbot.git

После этого исходники с сервера будут скачаны на компьютер. Примерно лог будет выглядеть так:



После этого необходимо убедиться в том что файлы скачаны. Перейти в папку проекта и вывести список файлов. 
Выполнить команды для OS X:
cd fxswap_bot/
ls -l

Выполнить команды для Windows:
cd fxswap_bot/
dir

Результат примерно такой:



2. Создать телеграм бот


Запустить бот для создания ботов. Перейти по ссылке:
Или открыть бот непосредственно в приложении: @BotFather

Необходимо создать бота и получить его токен. Пример:



3. Создать приложение Heroku


Теперь необходимо создать приложение Heroku.



4. Настроить приложение Heroku


Теперь необходимо настроить приложение. Первым делом нужно на вкладке “Deploy” выполнить указания раздела “Deploy using Heroku Git”:


Необходимо связать исходники с локального компьютера с приложением Heroku. Выполнить команды:
heroku git:remote -a your_heroku_app_name
git push heroku master

Первая команда установит связь между исходниками и приложением, а вторая команда отправит локальные исходники на сервер приложения Heroku.

Результат команд должен выглядеть примерно так:




5. Прописать переменные


Далее на странице Settings необходимо прописать переменные:


Сначала пример, а ниже - какое значение прописывать для каждой переменной. Пример:


5.1. Токен бота


BOT_ACCESS_TOKEN - токен бота. Получить значение в Телеграмме у бота @BotFather.
Пример:


5.2. Ссылка для мессенджера телеграм.


HEROKU_URL - это ссылка на сайт. Ее можно узнать нажав на кнопочку “Open app”.
Вот она:


Пример:

https://myfirstbotbot.herokuapp.com/

5.3. Тип деплоя


NODE_ENV - всегда “production”

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


6. Запустить бот


Необходимо запустить бот и убедиться что он работает. Открыть вкладку “View logs” и затем нажать кнопку “Restart all dynos”



На скрине видно запись:
[MyFirstBotApp]: Create Application...

Это означает что бот запущен. Еще совсем чуточку…

...


Откройте бота и убедитесь что он работает:


Поздравляем!
Вы только что создали свой первый телеграм бот на node.js


Итого


Исходники бота:
https://github.com/VadimCpp/myfirstbotbot

Бот:
https://t.me/myfirstbotbot

Update 2019-08-11:
Бот построен на основе библиотеки https://github.com/yagop/node-telegram-bot-api
Есть еще другая библиотека: https://github.com/telegraf/telegraf , но до нее руки пока так и не дошли. 🙂

Thursday, September 20, 2018

Календарь-калькулятор

Вступление


Так исторически сложилось, что в календарь записывали расходы/доходы. 😐
Необходимо создать веб-приложение, которое получает и обрабатывает данные календаря Google.

Пользователь записывал в календаре каждый прием посетителя и в коротком описании события просто указывал цену услуги. Таким образом в календаре накопились финансовые данные. И теперь появилась потребность их рассчитывать.


Исследование


Полезные ссылки:
Calendar API
Сайт позволяет тестировать методы API.

Getting Started with  JavaScript client library:
https://developers.google.com/api-client-library/javascript/start/start-js

People API:
https://developers.google.com/people/

При инициализации библиотеки необходимо указывать scope: какие именно API будут использоваться. В моем случае это будет срока:

profile https://www.googleapis.com/auth/calendar.readonly

Для получения данных о пользователе, и для получения данных о календарях.


Реализация


По шагам:


  1. Создаем проект на github (CalendarCalculator)
  2. Настроить npm + gulp: коммит
  3. В консоли google создаем проект "Calendar Calculator"
  4. Необходимо подключить People API
  5. Реализовать авторизацию: коммит

  6. Получить список календарей: коммит

  7. Реализовать получение событий: коммит

  8. Подсчет данных из событий в календаре: коммит



Вот и собственно все.
Далее остается фикс багов, затем расширение.

upd: после добавления стилей календарь выглядит так:




Итого


Календарь-калькулятор можно заценить на https://vadimcpp.github.io/calendarCalculator/
Веб-приложение подключается к календарю, читает данные календаря и проводит простую калькуляцию.


Friday, September 14, 2018

Подготовка к devfest 2018

Вступление


15 сентября 2018 года состоялось событие DevFest, в рамках которого рассказал историю одного цензор-бота.


Презентация и речь


Время - 25 минут.

Содержимое:

  • Вступление
  • Представление
  • История цензуры
  • Русский мат
  • Проблема
  • Хакатон KoenigHack-2018
  • Как работает алгоритм?
  • Как наполняли словарь?
  • Где уже внедрено?
  • Планы на будущее
  • Итого



1. Вступление




Технологии стремительно развиваются. Мир становится сложнее. Соцсети уходят в прошлое. Все пользуются мессенджерами. А уже совсем скоро наши карманные компьютеры, которые мы называем телефонами, заговорят.

Создается впечатление, что для создания стоящего продукта необходимо:

быть гением;
вложить массу усилий, денег и времени;
Но это не так... (интрига?)



2. Представление




Привет! Меня зовут Вадим. Я работаю фронтенд-разработчиком в компании РосКомпьютинг, которая занимается разработкой программного обеспечения на заказ, ИТ консалтингом, а также развивает собственную линейку продуктов.

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

Сегодняшняя история - это история как раз про социально полезный продукт. История о том, как простая идея и простая реализация приносит большую пользу. Это история цензор-бота.


3. История цензуры




Что такое «цензура»? Это слово в переводе с латинского означает «строгое суждение, суровый разбор, взыскательная критика». В современном мире цензура - это:
  1. надзор за печатью с целью недопущения распространения вредных с точки зрения правительства произведений печати
  2. учреждения, которым поручен этот надзор
  3. неотъемлемая функция любого государства



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

  1. Письменность массово появляется после Крещения Руси Владимиром в 988 году.
  2. Первый России список запрещённых к чтению книг вышел в 1073 году: «Изборник 1073 года»
  3. Первый русский литературный памятник — „Слово о полку Игореве“ — появился в конце XII в. (1185 году)



Парадокс!

Цензура в России развивалась по стопам материковой Европы и была предварительной, как в Европе. Французские законы были базой для российского цензурного законодательства в отношении отечественных изданий, а прообразом правил к иностранным изданиям - Пруссия и Австрия.

16 мая 1917 года в «Вестнике Временного правительства» было обнародовано законодательное распоряжение: «Печать и торговля произведениями печати свободны. Применительно к ним административных взысканий не допускается». В реальности подобная свобода полностью реализована не была.
В современной России цензура запрещена Конституцией Российской Федерации  — п. 5 статьи 29




4. Русский мат


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

Одна из распространенных версий – татаро-монголы. Но на самом деле к ним эта лексика никакого отношения не имеет. Русский мат славянского происхождения. Четыре известные каждому русскому человеку корня можно встретить и в македонском, и в словенском, и в других славянских языках.


Древнейшие известные образцы — в берестяных грамотах XII-XIII веков из Новгорода и Старой Руссы. Вот они:



Сейчас использование мата считается неприемлемым в приличном обществе и в литературе, и обычно цензурируется в периодической печати, на телевидении, радио и в других СМИ. Почему?

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


5. Проблема


Согласно Кодексам об административных правонарушениях русскоязычных стран, а именно России (статья 20.1[32]), Казахстана (статья 330[33]), Белоруссии (статья 156[34]) и Киргизии (статья 364[35]), публичное употребление мата может расцениваться как мелкое хулиганство, наказываемое штрафом или административным арестом. Статья 20.1 Кодекса об административных правонарушениях Российской Федерации:

«Мелкое хулиганство, то есть нарушение общественного порядка, выражающее явное неуважение к обществу, сопровождающееся нецензурной бранью в общественных местах, оскорбительным приставанием к гражданам, а равно уничтожением или повреждением чужого имущества, — влечёт наложение административного штрафа в размере от пятисот до одной тысячи рублей или административный арест на срок до пятнадцати суток.»



Как бы странно не звучало, но чат - это общественное место! Из определения: общественное место — территория или пространство потенциального местонахождения людей.

В начале 2018 года я заметил, что маты в чатах доставляют боль. Почти в каждом чате присутствует список правил:
⛔️ не материться
⛔️ не спамить
⛔️ не оскорблять других участников
⛔️ не разжигать

Тогда совместно с Машей мы обсудили идею телеграм бота и на ближейшем хакатоне реализовали бота и внедрили в группу GDG Kaliningrad


6. Хакатон KoenigHack-2018


Собственно с этого момента начинается история цензор-бота.
17 февраля 2018 года в 5:35 утра был сделан первый коммит

Почитать про событие можно тут:


7. Как работает алгоритм?


Бот - это на самом деле обычный веб-сервер, который принимает запросы от мессенджера Telegram и обрабатывает их.



А как бот удаляет маты?

Тут схема чуть сложнее. Для каждого сообщения бот выполняет два действия:
Отмечает в сообщении слова, которые однозначно не являются нецензурными
Затем удаляет все нецензурные слова



8. Как наполняли словарь?


После внедрения бота в чат, начался период его совершенствования. Несколько человек (@MISTikus, @imfrombristol, @KlepikovKonstantin и др.) наполняли словарь матами. На сегодняшний день размер словаря составляет 1360 слов. Это почти все нецензурные слова русского языка,  с разными окончаниями и разными приставками.


9. Где уже внедрено?


Внедрено в игре Мафия, на моем сайте и в телеграмме. Для бота доступен REST API. Вы можете интегрировать свое приложение с ботом, предварительно получив ключ.




10. Планы на будущее


Недавно прошла тестирование фича антиспам. Цензор-бот также выполняет функцию антиспам в основной группе GDG Kaliningrad.

Чего хотелось бы еще?

  • Статистика
    Еще пока нет статистики. Кроме уровня загрузки сервера.
  • Цензура сообщений в бизнес чатах
    Цензура сообщений в бизнес переписке значительно повысит стрессоустойчивость сотрудников, которые вынуждены читать все сообщения от всех недовольных клиентов. Клиенту даже необязательно показывать что его сообщение подверглось цензуре. Тут важно то, что бот заботится о психологическом здоровье сотрудника.
  • Распознавание и предварительная цензура речевых оборотов, которые нарушают законодательство РФПредварительная цензура На текущей момент существует 7 статей УК, по которым могут призвать к ответственности:
    • 282 возбуждение ненависти
    • 280 экстремизм
    • 148 1 2 оскорбление чувств верующих
    • 205.2 оправдание терроризма
    • 280.1 призывы к сепаратизму
    • 354.1 реабилитация нацизма
Тогда можно будет не тратить деньги государства на цензуру и содержание аппарата, а заниматься более полезными делами, например, медициной.

11. Итого

Есть видео: 



Ссылки

Вики:

Отчет о хакатоне:

Приложение, в которое интегрирован бот:

Персональный сайт, в который интегрирован бот:

Сайт компании Роскомпьютинг: