Тема: менеджер задач в телеграм боте

Боты в месседжерах сейчас используются повсеместно и конечно же в рамках курса стоило бы написать одного :)

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

Здание ИМХО простое, сильно голову ломать не придётся! Объем кода 300-400 строк.
Управление происходит через текстовый интерфейс:

* /tasks
* /new XXX YYY ZZZ - создаёт новую задачу
* /assign_$ID - делаеть пользователя исполнителем задачи
* /unassign_$ID - снимает задачу с текущего исполнителя
* /resolve_$ID - выполняет задачу, удаляет её из списка
* /my - показывает задачи, которые назначены на меня
* /owner - показывает задачи которые были созданы мной

Подробности форматирования смотрите в тестах.

В этом задании вам надо будет разделить ваше приложение на слои, как было рассказано в лекции:
* delivery (handler в лекции) - в этом слое вам надо будет взаимодействовать с телеграмом
* service - в этом слое у вас будет бизнес логика. Про то что слой выше работает с телеграмом - тут знать нельзя. Если вы к примеру решите переехать в Slack или любой другой мессенджер - в этом слое ничего не поменяется
* repository (repo / storage в лекции) - тут у вас будут храниться данные, пока - в слайсе. Если вы будете использовать сначала слайс, а потом решите вкрутить базу - то в других слоях ничего поменяться не должно

Мы используем чуть-чуть подправленную библиотеку для работы с телеграм-ботом, чтобы можно было написать тесты, притворившись сервером телеграма. Она переопределена через replace в go.mod. Тесты запускаются с ней нормально через go test -v. Если вдруг вы получаете ошибку `./taskbot_test.go:172:23: cannot assign to tgbotapi.APIEndpoint (declared const)` - значит что-то у вас с переопределением сломалось

Посмотреть в реальной жизни ваш прошект можно при помощи следующих инструментов:
* ngrok (https://ngrok.com/) - пробрасывает порт к вам (после авторизации там будет команда для созранения токена в конфиге). Хорошо чтобы показать что-то на демо, для прода я бы не рискнул это использовать.

Для создания бота в телеграме стучитесь @BotFather

Для хранения данных сейчас можно использовать слайс и не пока заморачиваться с базой. Или заморачивайтесь :)

В помощь:
* телеграм бот из лекции в папке 4/bot

Бота надо стартовать на порту 8081 - именно туда шлются уведомления из моего эмулятора телеграма

у вас будет несколько слоев:
* `delivery` - взаимодействиt с телеграмом - другие слои не должны знать что они в телеге. в это слое вы получаете сообщения от телеги, вызываете следующий слой, получаете результат и возвращаете его в телегу. если вы захотите подменить телегу на ICQ-бота - поменяется только этот слой
* `router` - у нас несколько разных команд - вам надо распарсить команду и вызвать соответствующий метод. в хттп с этим было попроще, а тут придется делать это руками
* `service` - тут будет сосредоточена ваша бизнес-логика
* `repository` - в этом слое вы храните данные. в следующей части домашке сюда надо будет вкрутить БД и это должно пройти абсолютно безболезненно для остального кода

Поначалу можно все делать одной папке, но можете потом попробовать разнести по папкам в соответтсвии с https://github.com/golang-standards/project-layout - позже в лекциях будет про это расказано, можете потом вернуться и докрутить для практики.
