[БЕЗ_ЗВУКА] В этом видео мы рассмотрим, каким образом можно создать 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 писать такого рода сервисы довольно просто и быстро.