[БЕЗ_ЗВУКА] В этом видео мы рассмотрим,
каким образом можно создать Telegram бота, используя язык Go.
Мы не будем писать обработку совсем всех-всех-всех событий с нуля,
а воспользуемся готовой библиотекой.
Есть готовая библиотека Telegram Bot API.
Для начала нужно ее установить.
Устанавливается она через команду go get, либо, если вы будете
пользоваться каким-то пакетным менеджером, то используя его команды.
Запускаем, отлично, всё скачалось, установилось на gopath.
Теперь нам нужно где-то зарегистрировать нашего бота.
Где?
Это BotFather.
BotFather в Telegram — это специализированный бот,
который выдает вам других ботов.
Найти его можно в Telegram по имени BotFather.
Начнем с ним общаться.
Он нам предлагает несколько разных опций.
Выберем newbot, и он говорит, каким образом называть?
Назовем Coursera_golang_bot.
Хорошо, это было имя нашего бота, которое будет отображаться в списке контактов.
Теперь непосредственно сам логин, это будет то же самое.
[БЕЗ_ЗВУКА] Хорошо.
Мой бот создан, мне был выдан токен, вот такой.
Токен нужен для авторизации моего бота,
чтобы никто левый не мог от его имени ничего отправить.
Я возьму токен, скопирую его и вставлю в нужное место.
Бот почти зарегистрирован.
Теперь нам необходимо каким-то образом выложить этого бота в Интернет либо
еще как-то сделать, чтобы Telegram мог до него достучаться.
В этом примере мы воспользуемся сервисом ngrok,
который опрокидывает порт,
по имени которого он выдает.
Этот сервис, конечно, не стоит использовать в продакшене,
и вообще я бы не стал ему доверять никакие свои данные и держать постоянно
запущенным, однако для целей разработки он, пожалуй, подойдет.
Но если вы совсем ему не доверяете, можно воспользоваться каким-то сервисом
вроде Heroku, там есть бесплатный тарифный план, который позволяет разместить бота.
Итак, запустим ngrok, запустим ngrok.exe,
88, вот он подключился.
В тарифном плане не очень много количества запросов в минуту,
но нам даже этого хватит.
Итак, он выдал нам https-адрес, при обращении к которому
будет перенаправлен на мой локальный порт.
Итак, я его скопирую [БЕЗ_ЗВУКА]
и вставлю себе в Webhook.
Теперь у меня всё готово для того,
чтобы начинать работать с ботом.
Что наш бот будет уметь делать?
Наш бот просто будет выкидывать нам rss с Habrahabr.
Итак, у нас есть какой-то список rss,
но сначала мы посмотрим непосредственно на создание бота.
Итак, прежде всего мы создаем объект бота, указываем ему токен,
который мы создали в BotFather, он инициализируется,
отправит команды в Telegram, говоря, что я вот такой-то, а вот мой токен.
Потом мы говорим, что мы authorized таким-то аккаунтом,
и теперь мы начинаем слушать сервер.
НашWebhookURL — это тот URL, который как раз нам выдал ngrok.
Мы начинаем его слушать, устанавливаем Webhook.
Что это значит?
Это значит, что мы просто ставим https-handle там внутри,
которые будут обрабатывать нам по этому URL все команды,
которые приходят как сообщение от Telegram.
Там обычный json, он его парсит,
распаковывает и возвращает мне уже структуру.
Я создаю канал updates, который говорит, что вот на таком-то, пожалуйста,
URL всё обрабатывай и возвращай мне.
В отдельной горутине стартую веб-сервер,
который непосредственно будет обрабатывать https-запросы.
Updates — это канал, в который приходят сообщения.
Теперь я просто в range использую цикл,
буду висеть и слушать, когда там что-то приходит.
Если нам пришло сообщение и у нас есть такой rss url,
в данном случае только Habr, мы получим его новости.
Если всё плохо, то мы скажем, что извините, ошибка.
Если всё хорошо, мы увидим эти новости в виде сообщения.
Вывод используется при помощи команды bot.Send.
Я использую сразу простое сокращение для объекта нового сообщения,
где указываю мой идентификатор, кому отправить,
и просто URL и заголовок этой новости.
Если же такого rss feed у меня нет, я скажу об этом, что только Habr доступен.
Всё. Каким образом я буду получать новости?
Новости я получаю из URL, я просто иду get запросом
на этот URL, вычитываю и распаковываю xml,
что тоже очень просто, очень быстро используется, всего лишь две структуры.
Конечно, я распаковываю не всё, только совсем самый-самый минимум,
который мне нужен.
Давайте теперь это наконец запустим и посмотрим, как оно работает.
Итак, go run bot.
Хорошо, я авторизовался вот этим ботом,
на порту 88 я слушаю, теперь мне нужно его найти в Telegram.
Поищем, вот
нашелся мой бот,
теперь я могу написать, ещё ничего нет,
я должен первым инициализировать общение с ним, нажав кнопку старт.
Он мне говорит, что только Habr доступен, мы видим Habr,
и мне
вывелись последние новости уже с Habr.
Я выводил только URL и preview, а уже большой блок с красивым preview,
с красивым форматированием и картинками — это заслуга самого Telegram.
Я мог бы ограничиться только ссылками.
Такими простыми действиями буквально меньше 100 строк
можно создать Telegram бота, который будет отвечать на ваши команды и что-то делать.
Конечно, вы можете отсылать сообщения и офлайн, например,
для каких-то уведомлений или мониторинга других серверов.
Это довольно большой API, там есть много разных типов сообщений.
Вы можете послать картинку, документ,
и в целом на Go писать такого рода сервисы довольно просто и быстро.