Мета-репо для движения "создай своего бота"
Python JavaScript PHP Go C# Java Other
Latest commit cc4533f Jan 17, 2017 @umputun committed on GitHub Merge pull request #185 from SimY4/master
Added logger configuration. Fixed response Content-Type headers problems. Added metrics endpoint. Library versions update
Permalink
Failed to load latest commit information.
5minphp-bot Fix issue #144 Dec 26, 2016
anek-bot Merge pull request #124 from terbooter/master Nov 20, 2016
bot-4-bots [bot-4-bots] Fix table formatting Jan 7, 2017
brackets-bot Fix bracket-bot tests Nov 17, 2016
ci Add message Dec 1, 2016
deploy unix:///var/run/docker.sock Nov 20, 2016
docker-bot Removed debug code and mistypes. Jan 1, 2017
doit-bot chore(doit-bot): fix typo, add author to readme Dec 11, 2016
etc Update nginx.conf Jan 15, 2017
excerpt-bot fix twitter link for excerpt Dec 21, 2016
gif-bot Check if /list location is actual Dec 1, 2016
giphy-bot Check if /list location is actual Dec 1, 2016
grabpage-bot Check if /list location is actual Dec 1, 2016
guido-bot Fix bot configs Nov 20, 2016
hcalendar-bot updated tests Nov 26, 2016
hello Fix bot configs Nov 20, 2016
karma-bot Fix bug in bot configparser Nov 17, 2016
ksenks-bot ksenks-bot: changed listening time Nov 30, 2016
loro-bot New bot configs Nov 20, 2016
memberberries Merge branch 'master' of https://github.com/umputun/rt-bot into fix_m… Nov 20, 2016
money-bot Update app.js Jan 16, 2017
noter-bot Fix broken noter-bot test Nov 20, 2016
random-bot chore: update readme Dec 29, 2016
rest-voter fix dockerfile Nov 20, 2016
rt-repl-bot improve tests Jan 17, 2017
rtnumber-bot Fixed a bug Jan 8, 2017
sample-go New configs Nov 20, 2016
search-bot Merge pull request #174 from alehano/master Jan 4, 2017
sovet-bot Check if /list location is actual Dec 1, 2016
stat-bot Add bot-spec.yml for stat-bot Nov 20, 2016
timezone-bot [ci fix][timezone-bot] Downgrade certifi package Jan 6, 2017
tweet-bot added tweet-bot Nov 20, 2016
wiki-bot Optimize dockerfile Nov 20, 2016
.env Remove DOCKER_REGISTRY_NAMESPACE var #129 Nov 20, 2016
.gitignore Add docker-bot Dec 26, 2016
.travis.yml [ci] Print docker-compose logs on tests falure Jan 6, 2017
README.md Update README.md Jan 8, 2017
docker-compose-deploy.yml add deploy service #130 Nov 20, 2016
docker-compose.yml Update docker-compose.yml Jan 15, 2017
run_local.sh Fix issue #178 Jan 10, 2017

README.md

Мета-репо для движения «создай своего бота»

Build Status

Боты для чата подкаста Радио-Т

  • Каждый бот представляет из себя полностью законченный микросервис с единой точкой входа /event
  • /event вызывается для любого сообщения через POST с телом {text: сообщение, username: id пользователя, display_name: имя пользователя} (json)
  • Бот может на это реагировать 2мя способами:
    • вернуть 417 (Expectation Failed) если ему нечего сказать на сообщение
    • вернуть 201 и body {text: сообщение, bot: имя/id бота} (json). Техт может быть markdown. EOL должны быть представлены как строки \n (в json должно быть \\n). Заголовок Content-Type в ответе должен быть application/json. В чат текст сообщения вставляется инлайном после имени бота, поэтому если в сообщении есть сложная разметка (например таблицы), то стоит начать сообщение с \n\n
  • Бот оформляется как контейнер с прилагаемым docker-compose.yml, для запуска которого должно хватить git clone ... && docker-compose up -d
  • Бот (внутри контейнера) слушает на порту 8080
  • Бот может вызывать внешние сервисы, если есть такая необходимость.
  • Нежелательно тянуть за собой внешние зависимости, типа баз данных, редисов и прочего.
  • На запрос бот должен ответить за какое-то фиксированное время. Предлагаемый максимум 5 сек.
  • Бот не получит след. сообщения пока не ответит на предыдущее.
  • Бот можно писать на всем, чем хотите/умеете. Однако, результат должен быть разумен по размеру контейнера и используемым ресурсам.
  • Бот должен быть полностью собираемым вашим Dockerfile. Не надо коммитить собранные бинарники и/или jar у прочее в этом роде.
  • UPD: После разговора с авторами решили добавить GET /info (200) с ответом {author: name, info: blah, commands: [xx, yyy]}
  • UPD: Бот не будет получать свои собственные сообщения
  • UPD: Для бота должен быть определен конфиг в файле bot-spec.yml. Он используется для автоматического тестирования бота.

Идеи для полезных и забавных ботов

  • ведение псевдо-разумной дискуссии по варианту сири/алексы/гугла
  • ответы над узкие вопросы, типа "какая погода в Москве сегодня"
  • функции поиска по подкасту (шоунотам и логам)
  • все остальное, что можете придумать

Идеи для вредных ботов, которые не будут приняты

  • разные бессмысленные гифки, особенно "анимационные"
  • болтливые боты, которые реагируют на все, или слишком многое
  • те, которые падают на ошибки и вместо того, что задумал автор, показывают эти ошибки в чат.
  • разговаривающие матом или другим "крутым" слэнгом
  • которые делают тоже самое, что и другие, уже реализованные боты

Зачем вам это надо?

  • для развлечения
  • для добавления в чат чего-то полезного
  • для славы и почета :) Мы расскажем о каждом вашем боте который будет принят и поощрим авторов, как минимум добрым словом.

Как в этом поучаствовать?

  • посмотреть на то, что сделали другие
  • почитать что пишут
  • сделать PR со своим ботом в отдельном каталоге. Это хозяйство должно собираться и подниматься локально, через compose build + up
  • в этом PR не забыть изменить etc/nginx.conf и docker-compose.yml для вашего бота
  • Приложить README.md для своего бота
  • Не забыть определить конфиг bot-spec.yml.

Как проверить бот в реальной жизни?

  • Ваш бот будет установлен на https://bot.radio-t.com
  • Можно убедиться, что он зарегистрирован сделав GET на https://bot.radio-t.com/list
  • Можно к нему обратиться, послав POST на https://bot.radio-t.com/api/:botname/event и это прийдет в ваш /event
  • Или послать GET на https://bot.radio-t.com/api/:botname/info и это прийдет в ваш /info

    > http POST https://bot.radio-t.com/api/hello/event text=Привет username=user123 display_name=Вася
    HTTP/1.1 201 Created
    Connection: keep-alive
    Content-Length: 31
    Content-Type: application/json;charset=UTF-8
    Date: Thu, 10 Nov 2016 19:46:38 GMT
    Server: nginx
    Strict-Transport-Security: max-age=63072000; includeSubdomains; preload
    
    {
      "bot": "hello",
      "text": "Hello!"
    }
    
  • Проверить как это работает end-to-end можно и нужно в тестовом чатике
  • UPD: запустить весь проект можно локально через run_local.sh в корне проекта. Доступен он будет на https://localhost.