Я создал Телеграм бота (FYTT), который ищет Телеграм каналы всех ваших подписок на ютубе. DELUXE-версия статьи.
Идея пришла, конечно же, после замедления ютуба. Многие блогеры стали активно кричать, мол переходите в тг, не потеряйте и я решил сделать удобный инструмент для быстро поиска тг-каналов своих любимых авторов.
Опыта мало в разработке, поэтому стек особо не выбирал:
- Node.js, библиотека telegraf.js
- MongoDB, mongoose
- Express.js
- Google API + Lemnos Api
Алгоритм работы бота, такой:
Пользователь пишет /start, ему выдается приветственное с 2 кнопками: "Найти Youtube-каналы в Telegram" и "Связаться Youtube-канал с Telegram-каналом". Также, пользователь сразу же добавляется в базу данных с сохранение его chatId, для дальнейшей связи, в случае чего и awatingChannels, о котором рассказал ниже.
При нажатие на первую, пользователь получает кнопку с ссылкой на авторизацию в Google, после авторизации отправляется ответ на сервер на "/oauth2callback", запуская функцию поиска:
Далее функция возвращает ответ и запускается функция, которая проверяет есть ли данный канал в базе данных бота (чтобы в будущем, с увеличением базы, ускорить выдачу каналов).
Если канал не найдется в базе данных, то запустится функция для парса телеграм каналов из раздела "ссылки" на ютубе. Хотелось бы использовать для этого Youtube API аж 3 версии, но там нет функционала, для получения этих данных 🙃, поэтому я нашел стороннее API - YouTube operational API (lemnoslife.com), с которым приятно работать. Автору респект!
Далее новый канал добавляется в базу данных, а после бот выдает несколькими сообщениями все ютуб-каналы, на которые он подписан и через тире их телеграм каналы. В первых версиях, бот рассчитывал только на отправку одного сообщения, но оказалось, что у моего тестового аккаунта подписок сильно больше, чем ограничение на длину сообщения в телеграм. Недолго подумав, я просто решил отправлять всю информацию несколькими сообщениями. (Других вариантов, как будто нет)
Была одна надоедливая проблема, которую я костыльно решил: при авторизации в google аккаунт запрос на сервер отправляется дважды, если пользователь дважды нажимает на выбор аккаунта. Сложно объяснить, но думаю, те кто работал сталкивался с этим. Эта проблема появляется только, если у человека несколько аккаунтов. Поэтому, чтобы сообщения не отправлялись дважды, я стал записывать в документ пользователя в базе данных переменную awatingChannels. При нажатии на кнопку найти каналы ее значение становилось true, а при получение каналов меняло на false, что решило проблему. Думаю, нужно было реализовать это через сессии, что я и пробовал изначально, но что-то пошло не так и я решил по-быстрому все сделать так.
Кнопка: "Связать Youtube-канал с Telegram-каналом" позволяет пользователю вручную добавить связку ютуб-канал + тг-канал, если автор ютуб-канала не оставил ссылку на свой тг в описании. (Сначала запрос отправляется на модерацию мне, а потом, при принятии попадает в общую базу данных).
Для логирования ошибок, впоследствии, стал использовать pino.
Теперь бот работает и выполняет свою функцию. У него есть еще несколько команд, такие как:
- /submit (text) - для связи со мной
- /faq - ответы на вопросы
- /send - чтобы я мог связаться с пользователем
Еще несколько системных и мой прикол - /jericho (иерихон)
Которая вызывает ошибку, а вместе с ней прекрасную гифку для меня: https://i.gifer.com/370.gif
Теперь есть работающий бот, но Google не дает доступ к API тем, про кого не знает (только для тестов). Поэтому нужно пройти проверку. У тебя должен быть сайт, политика, terms и прочее.
Начал я с логотипа и отправил им это
Google сказал, что это лого не отражает вашу индивидуальность. (видимо, из-за слишком явного использования автарок телеграма и ютуба).
Тогда я решил показать всю свою индивидуальность:
Они это приняли, я пошел быстренько сделал сайт, попросил ChatGPT написать политику и отправил. Оказалось надо быть владельцем домена, на котором размещен сайт, поэтому пришлось купить. Подключил сертификаты через certbot. И отправил снова.
На этот раз им не понравилась политика, они жестко ответили, мол: Вы написали, что "Google продает данные пользователей.". Я перечитал все, что ChatGPT написал, не нашел там такого, попросил переделать, отправил снова и теперь уже все приняли :). Еще надо было сделать им демо-видое работы, ну ладно без проблем - FYTT — Найди Ютуб каналы в Телеграмм (Полезный бот в Telegram) | @FYTTproject_bot - YouTube
Потом я решил продвинуть бота и записал два смешных shorts:
- https://youtu.be/N0IGLuufSCE - text to speech (elevenlabs)
- https://youtu.be/MlXEUIDBhE0 - Speech to speech моей записи на ии оригинального голоса Рика из Рика и Морти (сделал на этом сайте).
Ну и написал первую версии статьи: Я создал Телеграм бота (FYTT), который ищет Телеграм каналы всех ваших подписок на ютубе / Хабр (habr.com)
Получил много положительной реакции, до статьи у меня было 37 человек, которые запустили бота, а теперь 235 из которых 93+ использовали его функционал.
Ссылки:
Исходный код - https://github.com/VitoSperansky/FromYoutubeToTelegram
Сайт - fytt.tech:3000 (порт 3000, потому что порты ниже 1024 по умолчанию закрыты для установки серверов, их можно открыть, но это угроза безопасности. По-хорошему мне надо было сделать переадресацию с 443 порта (он дефолтный для https сайтов, поэтому скрыт в поисковой строке и пользователи его не видят) с помощью ngrok например, но я не стал тратить силы, так это все равно заглушка для гугла).
Связаться со мной по вопросам или просто - https://t.me/vitosperansky