Делаем Телеграм-бота в Cursor AI без знания кода

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

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

Возможное решение: Дуров, верни стену ленту! Да, мне нужна лента новостей/постов в телеграме, вот такой я странный. И в идеале, чтобы ленты были разбиты по категориям. И в идеале, чтобы это работало автоматически при создании новой папки и добавлении туда каналов — то есть папки это и есть категории, по которым мне нужна лента.

С учетом моего ТЗ, стало понятно, что стандартные способы автоматизации типа IFFTS не подойдут, а существующие боты (наверняка они уже есть) мне искать лень. Поэтому я решил сделать бота сам.

Недавно услышал про Cursor AI от Claude и уже успел протестировать его на другой задаче, поэтому был уверен, что он справится.

a68c104764dc804d2deb18b77c907754.png

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

b9f35912f42a4f0776c25cbf47172b2b.png

Шаг 1. Установка и регистрация

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

bd444e2e0c60330b91574a50158ab72e.png

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

Ну или обновляемся до Pro версии за $20 в мес.

ce4562675d2a3e5587365b566c9697f6.png

Шаг 2. Готовимся к первому промту

Чтобы Cusror с первого промта сработал эффективнее, лучше сразу показать ему файлы и ссылки, на которые он должен ориентироваться. В нашем случае, это документация Telegram. Добавляем ссылку на документацию и лишний раз напоминаем, что надо смотреть на код, который он уже написал — через ввод контекста @Codebase

Я о таком подходе узнал уже после того, как сделал этого бота. В этот раз я просто дал ему ссылку на документацию в первом промте. Но в других проектах использую этот подход — Cursor меньше ошибается и галлюцинирует.

Шаг 3. Пишем первый промт

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

ec32095015dd0f01ac6ad8c7ef1981c6.png

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

f9fb46f4749fef20ffdfdd2c5197b3d9.png

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

000f333bdc86017cbdd9c5ddf6f718fe.png

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

41698a06a361d9382ff3205e1cd617c6.png

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

df7dd4d56cb6d875c37c648199d62ef3.png

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

0638580027d50000ee9946e163b2b202.png

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

49d4ac026e6d6be6a198ef757372559e.png

Теперь мы готовы тестировать первую версию бота.

Шаг 4. Тестируем


Спрашиваем у Cursor как запустить бота:

1f8db6d578e3b1d74cb85b86eddda9bb.png

Принимаем все исправления и пытаемся запустить бота через команду python3 bot.py

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

Поэтому после получения ошибки, Cursor исправляет это и переименовывает основной файл.

187f6d1bf496c0047f5c158fef18eb6b.png

И наконец, бот запустился.

Шаг 5. Исправляем ошибки

Открываем нашего бота в Телеграме и понимаем, что ничего не работает. Так и пишем:

4c190ee5fadbafc462dad621b63fac8f.png

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

И вуаля, бот заработал. Он создал каналы по моим папкам:

d452f4453cb61800ab3d5f495f90961a.png

Шаг 6. Добавляем весь функционал

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

0af54071cde8f0dd3474a3dbb2c65de8.png

Но тут лучше придерживаться правила «работает — не трогай», поэтому можно дополнительно попросить Cursor не трогать код рабочего функционала, чтобы он не сгаллюцинировал и все не испортил

Шаг 7. Деплой

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

Так как я до этого ни разу ничего сам не деплоил, так и спрашиваем у Cursor:

88cb2a58852977cf9e4534509a247bf8.png

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

41bcfdf03ee3699ae2b0ff3c5a1007fd.png

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

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

Вот и все!

Когда мы запустили стабильный деплой и все функции работают как надо (ну или почти), можно сказать, что проект выполнен.

Бот создает каналы по нужным мне папкам (выбирается в самом боте) и пересылает туда сообщения из каналов, которые находятся в этих папках. После этого можно спокойно переименовывать каналы и менять им фотографию.

На все про все времени заняло около 6 часов, и то, это был только мой второй проект в Cursor, поэтому, думаю, клепать похожих по объему ботов можно часа за 2.

Кстати, для автоматического деплоя также нужна интеграция с GitHub, поэтому Cursor любезно все настроил и подготовил проект, включая инструкции по подключению. Поэтому если вам просто нужен такой же бот, скопируйте его и запустите по инструкции.

https://github.com/mikhailmurzak/tg-smart-folders-bot

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

Спасибо, что прочитали до конца! Надеюсь, кому-то это оказалось полезным, а главное показало, что как-то специально готовиться к разработке с Cursor не надо — надо просто брать и спрашивать у него что делать — он сам подскажет, и большинство работы сам и сделает.

© Habrahabr.ru