Дисклеймер: я полный ноль в разработке, поэтому этот гайд написан для таких же нулей — заранее извиняюсь перед знатоками за фактические и терминологические ошибки. И еще, другие способы создания ботов я не исследовал, поэтому если знаете более простой и изящный — напишите о нем в комментариях.
Содержание
Итак, проблема: мне не удобно читать миллион чатов в телеге в моменте или заходить потом в каждый канал — это обычно просто превращается в нажатие кнопки "прочитать все", поэтому чтобы не получать лишние уведомления и не мозолить глаза каунтером уведомлений, я их все отключил и разбил каналы по нужным папками - по темам. Но все равно неудобно заходить в каждую папку, а потом и в каждый канал, чтобы почитать, что там за весь день понаписали.
Возможное решение: Дуров, верни стену ленту! Да, мне нужна лента новостей/постов в телеграме, вот такой я странный. И в идеале, чтобы ленты были разбиты по категориям. И в идеале, чтобы это работало автоматически при создании новой папки и добавлении туда каналов — то есть папки это и есть категории, по которым мне нужна лента.
С учетом моего ТЗ, стало понятно, что стандартные способы автоматизации типа IFFTS не подойдут, а существующие боты (наверняка они уже есть) мне искать лень. Поэтому я решил сделать бота сам.
Недавно услышал про Cursor AI от Claude и уже успел протестировать его на другой задаче, поэтому был уверен, что он справится.

Cursor AI по сути похож на GitHub Copilot, то есть это такой помощник при написании кода, только у Cursor свой собственный текстовый редактор и он не просто помогает, а пишет код с нуля по твоему запросу и потом исправляет ошибки (свои же) и дополняет код новыми функциями. Основное преимущество Cursor перед другим No-code AI инструментами в том, что этот код в конце концов принадлежит тебе, хранится локально и ты можешь делать с ним что хочешь — при регистрации даже можно попросить Cursor не анализировать код для обучения модели.

Шаг 1. Установка и регистрация
Скачиваем Cursor с официального сайта. Регистрируемся с любой почты и получаем 14 дней тестового периода на Pro аккаунте. Он дает 250 генераций на Claude, после чего можно пользоваться «медленными» gpt4-mini и cursor-small (хотя по факту результат примерно такой же, но Cursor заточен именно на Claude). Чтобы оценить объем доступных генераций — на этот бот ушло где-то 50.

Когда заканчивается тестовый период, можно регистрироваться с новой почты сколько угодно раз. Но у меня Pro аккаунт с новой почты заканчивается уже на следующий день — видимо смотрят по IP, поэтому возможно с включенным VPN будет работать все 14 дней, не проверял.
Ну или обновляемся до Pro версии за $20 в мес.

Шаг 2. Готовимся к первому промту
Чтобы Cusror с первого промта сработал эффективнее, лучше сразу показать ему файлы и ссылки, на которые он должен ориентироваться. В нашем случае, это документация Telegram. Добавляем ссылку на документацию и лишний раз напоминаем, что надо смотреть на код, который он уже написал — через ввод контекста @Codebase
Я о таком подходе узнал уже после того, как сделал этого бота. В этот раз я просто дал ему ссылку на документацию в первом промте. Но в других проектах использую этот подход — Cursor меньше ошибается и галлюцинирует.
Шаг 3. Пишем первый промт
Так как второй шаг я не выполнял, я просто сразу написал ему что я хочу сделать:

И соглашаемся со всем, что он написал и создал, нажав на Accept. Также обращаем внимание на то, что он сразу предложил скачать расширение Python — скачиваем и устанавливаем его.

Cursor также попросил нас создать бот через @BotFather
в Телеграме и получить API_ID
и API_HASH
. Как их получить, я естественно не знаю, поэтому спрашиваем:

И получаем подробную инструкцию:

Дальше пробуем установить зависимости в терминале, как он и предложил, но сталкиваемся с первой ошибкой, которую Cursor сразу предлагает решить установкой еще одного расширения.

Пробуем еще раз, и снова ошибка. Просто копируем ее и вставляем в запрос.

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

Теперь мы готовы тестировать первую версию бота.
Шаг 4. Тестируем
Спрашиваем у Cursor как запустить бота:

Принимаем все исправления и пытаемся запустить бота через команду python3 bot.py
Ну и если бы я что-то тогда понимал, я сразу бы понял, что это не сработает, потому что файла bot.py у нас нет:)
Поэтому после получения ошибки, Cursor исправляет это и переименовывает основной файл.

И наконец, бот запустился.
Шаг 5. Исправляем ошибки
Открываем нашего бота в Телеграме и понимаем, что ничего не работает. Так и пишем:

И так 4 и 5 шаг по кругу, пока бот не выдаст хоть какой-то результат. Это самая долгая фаза в создании продукта в Cursor, потому что ошибается он часто и иногда делает очень глупые ошибки, несмотря на подсовывание ему документации. Поэтому надо быть готовым бесконечно долго отправлять ему логи ошибок, исправлять (как он думает) код и повторять это снова и снова, пока наконец оно не заработает.
И вуаля, бот заработал. Он создал каналы по моим папкам:

Шаг 6. Добавляем весь функционал
Так как в первом промте мы описали только базовую идею бота и убедились что она работает, можно переходить к добавлению всего функционала, который мы задумали. Делаем это также поэтапно, чтобы Cursor не наделал ошибки в каждой фиче. Добавляем фичу, тестируем, исправляем ошибки и приступаем к следующей.

Но тут лучше придерживаться правила «работает — не трогай», поэтому можно дополнительно попросить Cursor не трогать код рабочего функционала, чтобы он не сгаллюцинировал и все не испортил
Шаг 7. Деплой
После того, как мы локально проверили что все функции бота работают как мы хотим, его нужно выпустить в свет. Иначе, работоспособность бота будет зависеть от работоспособности вашего компьютера.
Так как я до этого ни разу ничего сам не деплоил, так и спрашиваем у Cursor:

После нескольких подходов остановился на Railway, потому что там можно зарегистрироваться из РФ (в отличие от Heroku) и практически бесплатен. Они кладут 5 баксов на счет, и за неделю использования бота списалось только 40 центов.

И тут опять начинается цикл тестирования и исправления ошибок, потому что для постоянной работы бота уже требуется авторизация по API Telegram и другие тонкости, которые естественно не заработают с первого раз.
Кстати, я хотел сделать авторизацию по номеру телефона (как в других тг-ботах), но в финальной версии пришлось остановиться на авторизации по QR, потому что по ходу бесконечных тестов, я создал слишком много запросов кода и Телеграм меня забанил. Тоже учтите этот момент и заранее спросите у Cursor как этого избежать.
Вот и все!
Когда мы запустили стабильный деплой и все функции работают как надо (ну или почти), можно сказать, что проект выполнен.
Бот создает каналы по нужным мне папкам (выбирается в самом боте) и пересылает туда сообщения из каналов, которые находятся в этих папках. После этого можно спокойно переименовывать каналы и менять им фотографию.

На все про все времени заняло около 6 часов, и то, это был только мой второй проект в Cursor, поэтому, думаю, делать похожих по объему ботов можно часа за 2.
Кстати, для автоматического деплоя также нужна интеграция с GitHub, поэтому Cursor любезно все настроил и подготовил проект, включая инструкции по подключению. Поэтому если вам просто нужен такой же бот, скопируйте его и запустите по инструкции.
https://github.com/mikhailmurzak/tg-smart-folders-bot
Из багов пока найдены такие: при подписке на новый канал и добавлении его в папку, сообщения из него не начнут приходить в наш канал-папку — нужно отключить папку в боте и включить ее заново. И иногда сообщения перестают приходить, надо также выключить и включить любую из папок в боте. Главное, что при этом авторизация не сбрасывается и новые каналы не создаются — все уходит в существующие каналы-папки. Исправлю эти баги потом, а может и не исправлю.
Спасибо, что прочитали до конца! Надеюсь, кому-то это оказалось полезным, а главное показало, что как-то специально готовиться к разработке с Cursor не надо — надо просто брать и спрашивать у него что делать — он сам подскажет, и большинство работы сам и сделает.