Hubbabot

В 2004-2005 годах я жил в центре Желдора, где (в отличие от окраинного Павлино) работала очень крупная городская сеть Интрателеком. Это были времена дорогого интернета, и ресурсы (и скорости) локалки приводили меня в дикий восторг. Были правда и нюансы, связанные с низкой культурой участников и плоской архитектурой сети — до сих пор помню как поймал сетевого червя на с нуля перезалитую машину сразу после подключения и не понимал, откуда пришла беда. Тогда-то я начал применять хостовые файрволы (был такой Agnitum Outpost), и прочими способами заморачиваться с сетевой безопасностью — ну да рассказ сегодня про другое.

Direct Connect

Тогда уже существовали глобальные файлообменные сети, а устроить подобное в районной сети, где за трафик не нужно платить — было в новинку. Одним из таких решений был протокол Direct Connect — программы на компьютерах участников, обменивающиеся расшаренными файлами, и сервер, который это все объединяет и организует. Принцип работы peer-to-peer дал второе краткое название, p2p.

Не помню откуда возникла идея такой городской сети в Интрателекоме — то ли она уже была в зачаточном состоянии когда я подключился, то ли я её сам её где-то увидел и принёс, но в результате у меня в квартире на старом системнике прописался сервер (hub), управлявший сетью. Сеть быстро росла, и спустя время директор провайдера решил этот стихийно разрастающийся бардак возглавить — предложил мне переставить сервак к ним в офис, а заодно стать официальным админом, под обещание следить за порядком и всё такое.

Кроме админинья сервака я собирал через NSIS и выкладывал на форум сети дистрибутивы клиента DC++ c прописанными параметрами и прочей обвязкой для большей лёгкости вовлечения в файлообмен новых участников, писал инструкции и саппортил потребителей, поддерживал небольшой сайт (с резиновым дизайном, мама дорогая), короче фигачил на чистом энтузиазме полноценную вторую работу (иногда даже в ущерб настоящей)

PtokaX

Я всегда угорал по автоматизации и программированию, и как узнал что существует hub PtokaX, поддерживающий работающие внутри себя скрипты на базе Lua, перевёл сеть на него, а сам нырнул в программинг. Кстати, если вы сходите по ссылке, то увидите что проект жив и даже несколько лет назад выпустил юбилейный релиз к 20-летию.

Запускаю бинари 20-летней давности в 2026-м просто потому что могу

Никакой документации на lua и хаб не было, но я нашел в инете скрипт бота за авторством NRJ, и стал по крохам его реверс-инжинирить, подбирая синтаксис языка, параметры методов и апи с примеров кода или вручную. Титанический (и довольно нерациональный по усилиям) объём работы, буквально угадывая ключи и аргументы методов, без возможности нормальной отладки — но это давало мне возможность сделать робота, который будет трудиться за человеков, а значит игра стоила любых свеч.

Так в муках и бессонных ночах родился Hubbabot (HUB’s Big Ass Bot) от NoNick (такой у меня был ник на форуме ITCN)

Почему Big Ass? Да потому что делать боту приходилось в основном то, за что его не любили.

Hubbabot и Лев Толстой

Одной из фич DC (хабов и клиентов под неё) был общий чат, в котором малолетние герои считали своим непременным долгом обматерить всех и каждого. Для борьбы с этим был написан среднего качества антифлуд и анти-мат, который я отлаживал на текстах Войны и Мира и сборниках анекдотов.

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

тестирую запретительно-оградительные функции бота

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

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

Ноу-хау и изобретения

Вторая фича, которой я горжусь больше всего — выход за возможности и прорыв сквозь обстоятельства в парадигме КЭНК, которую я так люблю. Дело в том, что сеть Direct Connect архитектурно задумывалась как одноранговая и равноправная, траффик ходил между пользователями напрямую, и сам по себе обмен данными хаб не контролировал. При этом для развития сети важно чтобы в ней был контент, иначе зачем в неё будут приходить юзера.

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

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

Всё это классно работало на развитие проекта — и главное, бот рулил процессом сам, безустанно и неумолимо. Всё как я люблю!

Кроме анти-лича, были также пароли на чат (чтобы малолетние родственники не могли от твоего имени устраивать срач), блокировка персональных сообщений для забаненых, анти-реклама и анти-ОР, статистика шар и топ лучших участников, и прочая обвязка для порядка и красоты.

Спустя время скрипт устаканился — судя по документации в моих архивах, я еще перевёл его под конец на Lua5, а после оставил в интернете на сайте в поддомене провайдера, откуда он расходился потом по форумам и уже модифицировался комьюнити.

Закат

Сначала я переехал, и на новом месте не было сетевой связности с ITCN. Я изредка заезжал к друзьям за логами и разбором проблем (последние сохранившиеся у меня дампы чата — от февраля 2007 года), а управлял хабом новый админ. Потом времени и на это перестало хватать, и я совсем отошел от дел, а после и провайдера скупила более крупная рыба, переделав попутно инфру и убив старые ресурсы. Судя по интернет-архиву, визитка сети с ботом и другой инфой http://nonick.z-host.ru работала до лета 2009.

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

Возможно в новые чудные времена интерес к локальному файлообмену вспыхнет вновь, и мы расчехлим скриптомёты и инсталляторы, и снова сможем вбить в поисковую строку «Чилавек Поук» чтобы посмотреть или поиграть в артефакты из юности. Если что, все исходники у меня хранятся, а современные нейросети прекрасно понимают что там сделано (и сильно помогли мне вспомнить нюансы при подготовке поста), так что дело за малым.

Выложу пожалуй дистрибутив и отдельно описание — пусть индексируются

Всем ностальгия, посоны!