У каждого человека есть желания, которые он не сообщает другим, и желания, в которых он не сознается даже себе самому.
Я вообще-то — врач
Я программировать и не собирался, но так уж вышло, что на всю группу одному мне оказалось доступно тайное знание: обход white‑lists при помощи того, чьё имя из трёх букв нам сегодня называть нельзя. Так что я быстро начал карьеру «Дяди Васи Компьютерщика» с объявления у подъездной двери и радостно ходил по гостям настраивать соответствующие «транспортные протоколы».
Благополучно закрыв сессию я оказался в ситуации, когда заняться нечем: домашние справляются с тем, чтобы я не умер от голода, друзья оказались воображаемыми, так что мне не придётся напрягать себя поиском подарков на эти праздники.
По большому счёту никого, кроме экрана компьютера и телефона и говорящих из них голов, в моей зоне досягаемости не оказалось.
Study smarter, not harder
Я учился явно не так, как остальные. У меня всегда был бесплатный репетитор, который ещё сыграет свою роль в том безумном приключении, которое мне предстоит. Пользуясь этим невероятным инструментом продуктивность моей учёбы была запредельной, а значит было время и ленту полистать, и постоять где-нибудь перекурить заместо адской спешки, которой были одержимы, казалось, все.

Мой главный инструмент был явно не учебник, а уж тем более не тетрадки. Я вёл Notebook, NotebookLM.
Обычно я использовал LLM Notebook, чтобы не сойти с ума перед анатомией. Предмет, знаменитый запредельной сложностью, оказалось вполне легко поддавался разделыванию на мелкие кусочки силами ИИ.
Буду краток:
Мыслительная карта — позволяет не рыскать в источнике в поиске контекста, а просто нажать на красивый прямоугольник с округлыми краями.
Аудиоподкаст/Видеообъяснения — в эпоху, когда мне нужно смотреть на паркур в Minecraft, пока на фоне я узнаю, что такое «Эукариотическая клетка» это произвело на меня большое впечатление. Голосовые объяснения под очень приятный, сгенерированный видеоряд. Большего было не нужно.
Работа с источником — отсутствие галлюцинаций — хороший признак у любого существа. Особенно у человека. Особенно у нейросети. Работая только по источнику я получаю данные не из странных мест (reddit‑подборка важных материалов от Perplexity), а из своего учебника, который мне удалось оцифровать и выгрузить.
В общем то говоря — промпт я составить смогу. Большего мне и не надо будет.
Новый год в бреду
С утра, конечно, заболело горло. С утра 30 декабря. К вечеру я столкнулся с суровой реальностью — температура. Озноб. Бред. Именно в этом бреду я вспомнил свой экзамен в Яндекс.Лицей. В целом тогда я подумал, что IT это для потных бородачей, которые настроят сервер из микроволновки, скачают туда Википедию и будут ждать конца света. Я не выбрал эту стезю и пожалел.
YouTube замер, скорость соединения предательски упала, Spotify перестал подгружать мои итоги года (ведь мне так хотелось узнать свой «музыкальный» возраст). Случилось страшное — у меня кончилась подписка на VPN.
БЕСПЛАТНО! БЕСПЛАТНО! БЕСПЛАТНО!
Я всегда знал как пользоваться Google-поиском, поэтому отыскать гору конфигов труда не составило, а отыскать рабочий...
Практически проделав дыру в экране телефона я сумел подсоединиться к, как я подумал, профилю Корпуса стражей исламской революции. Но это были мои 150 ms пинга, и я был счастлив.
Очень долго меня посещала мысль — заиметь свой VPN. Свои сервера, хорошая скорость, переключение регионов, можно не выключать и наслаждаться скоростью. Но я не мог совершить ничего грандиознее, чем настроить DNS или включить v2ray. Практически сразу я понял — в эпоху LLM я смогу это сделать, а что ещё важнее — я смогу это показать людям и получить «классы». Зависимость от чужого мнения заставляет переламываться даже, когда тело разъедает изнутри пламя гриппа.
Было решено — мне нужно перестать отдавать свои немногочисленные рубли за то, чтобы листать ленту 10 часов. Пора всё поменять.
Никаких полумер
Жалобы: повышенная потливость, ажитация, жар, сухость во рту, ломота, кашель, помутнение рассудка.
Анамнез жизни: рождение, учёба, работа, работа, инсульт, работа, смерть.
Назначенное лечение: парацетамол и все сезоны "Skibidi Toilet"
К сожалению, парацетамол у меня был, второго не было. Важность самостоятельности в сфере обхода блокировок была очевидна. Но как же перестать быть рабом Ctrl-C + Ctrl-V с очередного списка астрономических размеров?
С чего начать, если ничего не знаешь? Print, for, while, if-elif-else, а потом появляются они - ООП, asyncio, @dataclass и необходимость для исправления бага читать документацию (как можно докатиться до этого?) Решение было принято быстро, я посмотрел на ближайшего программиста в окружении - пишет Telegram Ботов. Значит и я напишу, только как?
Настроив огромным промптом, который мне удалось вытянуть из очередного "желтушного" новостного канала, Perplexity и Gemini 3 Pro (на LmArena), я посадил их рядом и сказал - учите. Мне важно было почувствовать себя не "вайб-кодером", я напишу всё сам - только расскажите.
До полудня. Первые помутнения
Концепция сформировалась быстро - мы скачаем все конфиги с сайта, вставим их в бота, отсортируем по скорости и будем наслаждаться автовыдачей, стабильностью и независимостью.
Я создал папку VPN_Bot, открыл PyCharm и замер. В моем представлении программирование выглядело так: ты пишешь команды, компьютер их делает.
— Скачай файл — Найди строку — Отправь мне — Profit
Особенно на Python. Это же не C++, о котором с ужасом рассказывали в интернетах, но это было только начало. Всё таки мне удастся использовать AI во благо, я верю в это.
Конечно моя гордость заставляла меня каждый раз кричать буквами на моих "учителей". Я заставлял объяснять каждую концепцию, но не прописывать кодом. Следом я получил очень сильный ответ. Без грубости и насмешек. Просто мне сказали, что делать:
"Нам нужна структура. Хендлеры отдельно, клавиатуры отдельно, логика отдельно. Базу данных сделаешь на SQLite"
Я не струсил и начались мои первые 3 часа ужаса. Оказалось, что нельзя перебрасывать что-то из папки в папку просто так, "импортировать" - это вообще всю жизнь про экономику, а если сделать лишний пробел, то это конец. Температура поднималась.
День. Зомби
-
Первая задача была простой: научить бота ходить на GitHub и воровать оттуда ключи.
Есть добрые люди (дай бог им здоровья), которые собирают бесплатные конфиги в огромные текстовые файлы. Это тайное знание и сделало меня таким востребованным среди одногруппниц (нет, дали только телефон в руки). Windows больше никто не переустанавливает, все хотят рабочий Instagram.Код выглядел примерно так:
requests.get(url)— скачать.text.split()— порезать на строки.if line.startswith("vless://")— найти нужное.
Я нажал
Run. Он скачал файл, нашел 500 ключей и... начал выплевывать их мне в чат по одному. Телеграм начал банить меня за спам.
Солнце давно зашло и вопреки всем законам оборотнем стать мне удалось. Смесь озноба и злости заставила меня пролистать всю документацию Aiogram 3.x, снова и снова, я выдавал божественные перлы.if text > 10: stopБыло бы хорошо добавить странички. Меня поправили - пагинацию. Это было началом нового круга ада.
-
Кто такой этот ваш
callback_data и filter()"Когда ты делаешь кнопки в Telegram ("Вперед", "Назад"), ты не можешь просто сказать: "Если нажали кнопку со стрелочкой".
Тебе нужно использовать Callback Data.
Это невидимая строка, которая летит на сервер, когда юзер тыкает в экран."
В целом лучшей аналогии от ИИ я и не ожидал.
Мне пришлось создать свой первый Класс.class PaginationCb(CallbackData, prefix="page"):
Теперь каждая кнопка знала свое место: page:next:1, page:prev:5.
На момент написания статьи я так и не понял, что эти "Классы" делают. Но главное - увидеть паттерн.
Я написал функцию, которая режет список на кусочки по 5 штук.
Нажимаешь "Вперед" - бот берет следующий кусок, стирает старое сообщение и пишет новое. Случилось ужасное - я вошёл в азарт. Теперь ЭТО должно быть "красивым".

Ночь. Мёртвые души.
К глубокой ночи я понял страшное - я жму по конфигам целый час, но ничего не происходит
90% ключей, которые я так красиво упаковал в пагинацию - мертвые.
Нужно было проверять их. Что же, всё легко - пусть Python мне их сам и подключает, а я измерю пинг.
ИИ обнадёжил меня, ведь идея простая:
Бот стучится в порт сервера (
asyncio.open_connection).Если дверь открыли — засекаем время. Это пинг.
-
Если тишина или ошибка — сервер труп.
Нужна Асинхронность. Слово, которое я слышал в сотне видео включённых на фоне.
Мой мозг варился, измученный гриппом, а я сломался окончательно.async, await, gather...f_mother
— Представь, что ты заказал 100 пицц, — объяснял мне AI. — Ты не ждешь каждую по очереди. Ты звонишь в 100 пиццерий одновременно. И забираешь их по мере готовности.
Я хотел пиццу. И хотел, чтобы ужас кончился.
Мы написали checker.py.
Он запускал 50 маленьких "гонцов" одновременно. Мне казалось я видел их. Экран расплывался у меня, а они расплывались по интернету, тыкали сервера своей магической палочкой и возвращались с результатом.
1000 конфигов проверялись за 3 секунды.
Что же, это было неплохо для моего ноутбука возрастом с старшеклассника.
Теперь мой бот воровал и сортировал ворованное. Прекрасное ощущение, когда задуманное воплощается в реальность. Непонятные слова заставили что-то работать на меня.
Сверху - быстрые и живые (Reality + низкий пинг, наличие которых я проверял по разделению URL на сотни частей)
Снизу - медленные (обычно они и работают).
Мертвые - в мусорку (бедняги).
Утро. Новый год
Текст vless://... выглядит страшно. Во мне проснулась эстетика. Я прошёл путь от упрямства и желания смотреть brainrot до любви к этому коду. Я просил комментировать и объяснять его раз за разом, бедные языковые модели - слушались.
Обычный URL неудобно копировать на телефоне, я не хочу возится на компе. Мы любим QR-коды.
Я думал, это будет просто. Потом я узнал что-то из квантовой физики.
— Генерируем картинку, — говорит AI. — Сохраняем на диск qr.png, отправляем, удаляем.
Так я узнал про io.BytesIO. Поток байтов, байтовый буфер...чёрная дыра...наверное, на этом можно захлопнуть крышку ноутбука.
Однако мы начали создавать картинки прямо в оперативной памяти. Чёрт её знает насколько она была оперативная, но я соображал туго. AI подстраивалась под меня, так что мы вместе общались на исключительном жаргоне и метафорах.
Следом я захотел, чтобы User мог скачать сразу хоть 10 конфигов или даже все. Библиотека zip оказалась не самой сложной в освоении.

Я осознал, что вышел за рамки простого скрипта. Я вообще вышел за рамки. Температура так и не спала, а я понял, что уже давно просто «вайбкожу» и прописываю словно под диктовку. Но я хотел красоты, смайликов, разметка HTML (кстати тоже не до конца разобрался с этим - это что?).
Я всем "друзьям" покажу!

Надо выложить в интернет. В интернете страшно. Я судорожно просил у ИИ обучить меня всему вот тому, что мы создали, чтобы я побеждал в комментариях, но до меня дошло только то, что в канун Нового Года я загрузил свой рассудок в интернет, а настоящий мозг уже сварился.
Я написал создателю конфигов: «Братишка, зацени бота». Ответ убил: «Только сложностей создаст». Это был удар по всей моей гордости и чести, надо было бросать перчатку, а значит — пора искать хостинг. Я знал, что такое хостинг, ведь у меня был сервер в Minecraft... локальный. Когда оказалось, что localhost это немного не про это, я просто решил положить на все принципы:
"Как сделать так, чтобы люди всегда могли моего бота смотреть, а мне не надо было включать на компьютере питон, на хостинг нет денег"
Мне сказали имя хостинга. Я загрузил туда папку. Я загружал её ещё 12 раз, а он даже не мог упасть, ведь и встать тоже не получалось.
Судьба сделала подарок и некий ютубер (классика жанра - 360p, 6 просмотров) научил меня ставить всё правильно.
И вот я сам выложил что-то на GitHub. Можно ли приводить аналогию про девственность? Я думаю я потерял её, когда нажал New Project. Авторизовался и случилось...

Вывод
Статья написана примерно в том же состоянии, что и код — всё ещё озноб, время 4:40 утра, наверное, ещё долго мучаться. Конечно же врач сам себя не вылечит, это закон.
Идею написать статью на Хабр, конечно же, я придумал не сам. Да и я вообще первый раз услышал, что это. Тем не менее, в процессе я уже не смог остановиться.
Я понял, что бот может в принципе быть хорошим хобби, как и программирование, как и держание сервера, даже без знаний и какого‑то «технарского» склада ума. Пусть он маленький, но я не потратил на него денег, так что не жалко. Бедняга работает на 500Мб ОЗУ, чтобы это на самом деле не значило, но это мало, точно знаю.
Ключевую роль во всей истории играет ИИ. Это больше философский вывод — неодушевлённый механизм, который просто «угадывает» как ему ответить провёл меня за ручку до результата, так что я могу и сам что‑то написать (ничего не понимая, но зато знаю в каком порядке и что там, что делает). Конечно я мучился куда сильнее и с памятью, и с FSM, и с расчётами, это всё можно было рассказать, но получилось, что получилось, это не гайд, а просто история. История про то, как кто‑то может сойти с ума, а ему помогут.
Ссылки на GitHub не будет.