Недавно мне пришла идея воссоздать механику Reddit внутри Telegram.

Телега — отличная и популярная платформа для общения и ведения блогов, но, на мой взгляд, это ужасное место для создания настоящих сообществ.

До этого я никогда не писал ботов или мини-аппов. У меня был только некоторый опыт в веб-разработке. Давно хотел разобраться, как всё это работает... И вот появилось немного свободного времени, звёзды сошлись и я запилил свой мини-Реддит в Телеге :)

Что не так с сообществами в Телеграм

В телеге есть группы (чаты) и каналы. К каналу можно привязать группу и тогда пользователи смогут обсуждать посты в комментариях.

Написать пост в канал может только ограниченный круг админов канала. Широкому кругу пользователей постинг в канал недоступен.

Обсуждения ведутся в прикрепленном чате. И хотя там можно отвечать на другие сообщения, все это имеет линейную структуру чата. Линейная структура весьма неудобна для чтения и отслеживания, кто, кому и на что отвечает.

Кроме того, отсутствует возможность анонимного постинга / комментинга.

У кого-то в профиле фамилия, у кого-то фото с детьми. Анонимности, как таковой нет. Это автоматически накладывает ограничения на формат общения. Ведь нет гарантии, что ваши посты или комментарии не прочтет ваш родственник, начальник, коллега или партнер по бизнесу.

Без анонимности не хватает открытости. А ведь порой хочется "излить душу", поделиться наболевшим, попросить совета и так далее.

Я решил исправить все эти недостатки при помощи комбинации бота и мини-апп.

Так родился бот с рабочим названием CommunityFatherBot. По сути, он превращает любой публичный канал в сабреддит.

Как работает механика Реддит в Телеге

Сообщества создаются на базе публичных каналов.

Владелец канала добавляет бота в админы.

После этого бот создает пост в канале и закрепляет его.

Пример закрепа
Пример закрепа

Админ канала может редактировать текст закрепа на свое усмотрение. Главное тут — это ссылка на топ постов недели и кнопка создания поста.

Так как у поста только одна кнопка, для закрепа эта кнопка будет всегда доступна непосредственно в шапке канала.

Любой пользователь телеграм (при условии подписки на канал) может нажать кнопку Create Post и написать пост в канал.

При нажатии кнопки бот генерирует пользователю уникальный псевдоним (он один на все сообщества) и пишет сообщение в личку.

Пользователю надо написать свой пост в личку прямо боту. Сообщение может включать картинки и другие медиа — поддерживается всё.

После отправки сообщения боту в личку, бот копирует это сообщение в канал проставляя наверху псевдоним пользователя. То есть пост публикуется в канале от имени псевдонима.

Пост в канале выглядит так:

Пример анонимного поста
Пример анонимного поста

Пост можно редактировать, редактируя свое оригинальное сообщение в личке бота. Бот отслеживает эти изменения и зеркалит правки в посте в канале.

Если админ отредактирует пост в канале, бот пометит его у себя как "заблокированный", и пользователь больше не сможет ничего менять. Но он всё ещё сможет удалить пост, отправив команду боту.

За посты можно голосовать. Бот считает отдельную карму за посты и за комментарии.

Пока ограничений на постинг нет и можно постить с нулевой кармой, но в будущем можно будет разрешать постинг только пользователям с определенной кармой за комменты. Например, +10 коммент-кармы. Это можно будет настраивать владельцу канала на свое усмотрение.

Обсуждение постов происходит в мини-апп.

Тут все очень похоже на Реддит или Хабр: древовидные комментарии с возможностью голосования.

Корневые комменты, набравшие больше голосов, всплывают в списке наверх.

Дерево комментариев в мини-апп
Дерево комментариев в мини-апп

По отдельной ссылке можно смотреть недельный топ постов канала.

Недельный топ
Недельный топ

Важный момент.
Анонимность в сообществах не абсолютна, так как реальный Telegram ID псевдонима известен боту. Без этого было бы невозможно сохранять историю, считать карму и так далее.

Как я это создавал

План решения

Бот

Реализует основную бизнес-логику сообществ.

Он общается с пользователем через личку, публикует / редактирует посты в каналах, считает голоса.

Мини-апп

Мини-апп выполняет роль интерфейса для комментирования и просмотра топов с постами.

Это маленькое React-приложение, но с полноценным роутингом.

Авторизация в нем происходит автоматически за счет использования userData — это такой объект, предоставляемый телеграм и содержащий данные пользователя, запустившего мини‑апп.

Данным на стороне клиента нельзя доверять, поэтому все действия на бекенде проходят валидацию (проверяется валидность userData с помощью проверки подписи токеном бота).

API-сервер

Сервер с API необходим для обработки запросов мини-аппа. Он позволяет выгрузить данные о посте и комментариях для рендеринга в мини-апп, а также принимает новые комментарии или голоса.

Подготовка

Мне понадобились следующие платные вещи:

Всё остальное — бесплатно.

Домен подключил к бесплатной админке CloudFlare. Также использовал их туннели при разработке (удобно).

Из основных библиотек использовал React для мини-аппа, Express для API сервера и node-telegram-bot-api для функционала бота.

Помимо этого понадобились:

  • MySQL для хранения данных

  • Redis для общения между node-процессами API-сервера и бота

  • Менеджер процессов pm2 для запуска и поддержания работы node-процессов

Написание кода

Дисклеймер

Вначале я хотел подробно написать шаги, как всё запускать и тестировать локально, но потом понял, что это не имеет особого смысла.

Если вы захотите, написать что-то подобное, просто спросите ИИ (например, ChatGPT). Он точно и детально всё объяснит.

Ниже лишь краткий обзор моего workflow, которого будет вполне достаточно в качестве отправной точки.

Для разработки и тестирования я локально поднял MySQL и Redis. Запускал бота и сервер через nodemon, а мини-апп через vite . Всё вместе это "хозяйство" запускал для удобства одной командой при помощи concurrently.

Также для разработки поднимал туннель через СloudFlare, чтобы можно было тестировать мини-апп прямо в телеге. CloudFlare предоставляет удобную и бесплатную CLI утилиту cloudflared.

Смысл туннеля в том, что благодаря ему вы можете открывать некий публичный домен (например, dev.tgcommunityfather.com) и попадать на ваше локальное React-приложение, запущенное через vite.

Это позволяет в телеге прописать мини-аппу данный урл и тестить изменения прямо в вашем локальном React-приложении. Будет работать даже hot reload. То есть делаете правки и сразу видите результат в окошке мини-апп в телеге.

Весь код я организовал в виде монорепы)

Монорепозиторий с кодом
Монорепозиторий с кодом

Как я взаимодействовал с ИИ

При написании кода я очень много использовал ИИ. Можно сказать, код проекта написан на 80-90% через ИИ.

С уверенностью могу сказать, что я бы написал всё это и без ИИ. Код был бы гораздо лучше и чище! ...но заняло бы это раза в 4 больше времени. А с ИИ у меня ушла примерно одна рабочая неделя на всё, включая отладку.

Было 19 прогонов через Lovable и порядка 50-60 промтов с ChatGPT. Чашки кофе не считал) При этом я бы не назвал это вайб-кодингом! Дело в том, что я понимал 100% кода, который пишет ИИ и мог его править сам на любом этапе.

Для хранения кода я использовал два репозитория: основной и вспомогательный.

В качестве главного ИИ‑инструмента я использовал Lovable.

В Lovable я создал проект, подключил к нему свой вспомогательный репозиторий и включил синхронизацию через GitHub.

Теперь можно было писать инструкции Lovable, а на выходе получать от него коммит в ветку main вспомогательного репозитория.

В ChatGPT я создал отдельный проект, куда в качестве инструкций написал, что я создаю и приложил дамп структуры таблиц базы данных для контекста.

В целом процесс разработки выглядел у меня так:

  1. Добавил локально оба репозитория, как отдельные remote в git: origin и lovable

  2. Пишу инструкцию для Lovable — он пушит код в ветку main своего репозитория

  3. Локально делаю git pull lovable main

  4. Тестирую, допиливаю (сам или с помощью ChatGPT)

  5. Если нужны более масштабные правки или рефакторинг, форс-пушу в lovable: git push lovable dev:main --force

  6. И дальше по кругу с пункта 2.

Наверное, можно было бы проще (просто с двумя ветками в одном репозитории). Также не исключаю, что Bolt, Replit, Cursor (или может Codex?) могли бы справится не хуже Lovable и с более простым воркфлоу.

Но у меня с Cursor в свое время не задалось. Мне сильно не понравилось качество его работы, и пока я не созрел пробовать еще раз. А другие инструменты еще попробовать просто не довелось.

Иногда Lovable пишет не очень хороший код. Иногда логика немного хромает. Но в большинстве случаев он пишет работающий код, который вполне решает поставленную задачу.

Ощущения такие, что ты пишешь код с напарником, который принял таблетку NZT-48. Любые изменения он выдает за 3-5 минут.

Бывало добиться нужной логики я подолгу не мог. Например, он никак не мог нормально построить маршруты в React-аппе. В этом случае я брал дело в свои руки. То есть без знания всех этих библиотек и умения кодить, делать проект все же было бы очень тяжело, особенно когда не получается добиться нужной функциональности через ИИ.

По большей части, такой формат разработки с ИИ — это прям вау.

Например, я изначально написал все интерфейсы на русском, а потом подумал, что лучше бы на английском. Сперва пригорюнился, так как правок довольно много. Но Lovable всё тщательно и корректно перевел всего за один прогон. Переход на английский занял буквально 3 минуты от мысли до продакшн.

Очень удобно, что можно diff изменений, который сделал ИИ, посмотреть прямо на GitHub. Если что-то пошло не так, всегда можно заресетить ветку Lovable и написать новую инструкцию.

В общем это полностью контролируемый процесс, примерно, как PR-ы в команде.

Думаю, было бы круто, если бы Lovable умел просто открывать PR в нужном репозитории, но он пока это не умеет. Я думаю, что совсем скоро разработка с ИИ-инструментам выйдет на еще более высокий уровень. По-моему Codex как раз уже умеет открывать PR. С нетерпением жду, когда он станет доступен для Plus подписки, чтобы попробовать.

Нюансы

В процессе разработки на удивление было мало нюансов или мест, где я надолго застревал. Пожалуй, вот только пара моментов, которые стоит отметить.

Галлюцинации

ИИ порой галлюцинировал и предлагал API, которого в реальности нет в Telegram Bot API или наоборот говорит, что нельзя делать то, что на самом деле можно. Не скажу, чтобы это было большой проблемой, так как случалось довольно редко.

Однако, были случаи, когда приходилось возвращаться к истокам, так сказать, и гуглить, шерстить issues на GitHub вручную.

Органичения Bot API

Для меня было неожиданностью, что подписавшись на уведомления о сообщениях в канале, бот все равное не получал уведомления о всех сообщениях.

Например, если бот сам создал сообщение, то он не получает уведомления об его дальнейших изменениях. Это не поддается логическому объяснению, но факт.

Чтобы бот был в курсе изменений сообщений пришлось запускать второй бот CommunityWatcherBot, единственная роль которого — получать уведомления о всех изменениях сообщений в канале и передать эвент главному боту.

Реальные сообщества с механикой Реддит

Чтобы протестировать бота, я запустил пару пилотных коммьюнити:

  1. RU Frontend Devs: https://t.me/ru_frontend_devs

  2. RU Founders: https://t.me/ru_founders

Если тематика коммьюнити вам интересна, присоединяйтесь, протестируйте механику, помогите отладить.

Также при наличии канала вы можете подключить к нему бота и превратить свой канал в сабреддит.

Планы и мысли по развитию бота

Я хочу сделать реддит‑механику опциональным функционалом бота, чтобы ботом могли пользоваться больше автором каналов (механика реддит в канале нужна не всем).

Хочу реализовать в боте автоматизацию рекламы внутри телеги. Известно, что закупы и постинг в других каналах — главный инструмент продвижения в телеге.

При этом всё делается вручную. Владельцы каналов списываются с авторами других каналов, договариваются об условиях, переводят оплату, анализируют результаты и всё это вручную! На дворе всё же 2025!

Меня сильно удивило, что в телеге еще нет решения, которое бы автоматизировало весь этот процесс внутри самой телеги. Есть попытки автоматизации рекламы, есть сторонние биржи, но ими мало пользуются из‑за неудобства, конских комиссий и необходимости покидать телеграм.

Выводы

Telegram — очень крутая платформа для создания ботов и мини‑приложений.

По сути, вы получаете авторизацию и потенциальную огромную пользовательскую базу бесплатно. А дальше можно строить любой функционал поверх этого. Меня сильно это вдохновило.

Ну и в целом, я кайфанул в процессе работы над этим проектом. Изначально боты, мини‑аппы, различные API представлялись мне чем‑то сложным и запутанным.

На практике же это очень крутая инфраструктура для запуска любых решений поверх телеграм. Мини-апп запускается, по сути, внутри телеги и может предоставлять пользователям практически любой функционал.

PS. Если для написания кода проекта я использовал ИИ на 80-90%, то для статьи ИИ себя очень плохо проявил, поэтому статья написано на 100% человеком, то есть мной)

Комментарии (4)


  1. pnmv
    22.05.2025 09:09

    так что же это такое - "механика реддит"?


    1. gnemtsov Автор
      22.05.2025 09:09

      Хороший вопрос! Под "механикой реддит" я имею в виду способ построения общения в сообществе.

      Я бы сказал тут три ключевых компонента:
      1. Открытость (каждый может постить, комментировать и голосовать)
      2. Валидация (идет голосование и лучшие посты/комменты всплывают наверх)
      3. Анонимность (можно писать, не боясь осуждения).

      Думаю, всё это создает уникальную динамику живого сообщества. Именно эту идею я попытался реализовать в Telegram.


      1. pnmv
        22.05.2025 09:09

        Хабр устроен иначе?

        У такой "открытости", кстати,

        есть обратная сторона - если пришел без друзей, ты изгой, какое бы разумное-доброе-вечное ты ни выкладывал.

        Утверждение об уникальности крайне спорно.

        Вообще, нужно сильно верить в конкретную платформу, чтобы пытаться реализовать то, что показалось её принципами, где-либо ещё. Примерно, как верить в непогрешимость нейронных сетей и искуственного "интеллекта" в целом. Опасно, короче говоря, в первую очередь, для самих верующих.

        Как развлечение, годится, но в остальном... в конце концов, один реддит, ведь, уже есть.


  1. RulenBagdasis
    22.05.2025 09:09

    Основная проблема телеги, это отсутствие индексации поисковыми системами и, как следствие, невозможность нормально найти информацию. Вторая проблема в том, что данные телеги никак не архивируются и исчезнут вместе с ней.