Перейти до вмісту

Проєкти03 / 07 · платформа спільнот · 2023–дотепер

WardyBot 03

Модерація, антиспам та ігрові механіки для великих Telegram-чатів — 2,1 мільйона користувачів на одному сервері за $24 на місяць.

Техлід · архітектор · product owner · devops
Одразу до інженерної частини
Простими словами

Чат на 28 000 людей людина не вимодерує

Уявіть Telegram-чат на 28 000 людей. Хтось спамить рекламою, хтось лізе в конфлікт, хтось запускає ботів. Людина-адмін фізично не встигає.

WardyBot забирає цю роботу: ловить спам, фільтрує ботів на вході, модерує токсичність і веде статистику. А далі — друга половина продукту: втримати людей. Внутрішня валюта, репутація, ачівки, колекційні предмети з маркетплейсом, дуелі, розіграші й AI-асистент дають спільноті причини повертатися, а її власнику — що продавати.

Цифра, яка мені важлива, — це співвідношення: два мільйони користувачів, одна віртуалка за $24, тисяча днів без перерви. Не тому, що дешевий хостинг сам собою чеснота, — а тому, що кожне архітектурне рішення нижче ухвалене під цим обмеженням, і саме обмеження робить їх цікавими.

Для інженерів

Один Rails-процес, N ботів, чотири валюти й леджер, який не розсинхронізується

950 сервісних об’єктів, 52 тис. рядків коду проти 110 тис. рядків тестів, один VPS на 2 vCPU і 3,8 ГБ RAM.

Одне ядро, багато ботів — поки це було потрібно

Один Rails-процес обслуговував головного бота через webhook і клієнтських — через полери, підіймаючи клієнта для довільного bot id прямо з бази, сесії ізольовані по bot · chat · user. Він тримав 17 white-label ботів, доки у червні 2026-го модель оренди не звели на сам чат — спрощення, яке трафік уже дозволяв.

Агрегувати, а не архівувати

23 млн повідомлень стиснуто в 1,5 млн рядків-лічильників (юзер × чат × день). Свідома відмова зберігати кожне повідомлення — тому база 2,9 ГБ, а не ~300, і тому сервер за $24 досі правильного розміру.

Незмінний фінансовий леджер

Транзакції не можна видаляти й не можна змінювати, крім двох типів. 26 видів операцій, чотири валюти, знак суми валідується проти типу — 82 тисячі транзакцій без розсинхрону балансів.

Рефлективний роутер команд

Замість таблиці роутів диспетчер знаходить контролери через glob і зіставляє команду з методом рефлексією — новий модуль команди це новий файл і більше нічого. Саме те, що потрібно, коли десять людей додають команди паралельно. 73 зареєстровані команди.

Модерація перед роутингом

Вісім валідаторів послідовно; синхронно виконуються лише ті, що мусять видалити негайно. Антиспам розкриває 64 гомогліфи в regex-класи, тож ПpNB1т усе одно ловиться.

Міжмовний RPC · AI за собівартістю

Рендер цитат живе в іншому сервісі, іншою мовою, на іншому сервері: request-reply через федеровані черги RabbitMQ з транспортом zlib+base64. Собівартість інференсу читається з відповіді провайдера й конвертується у внутрішні токени — ціна їде за ринком, а не за хардкодом. Кешування Telegram file id у Redis під версійованими ключами прибрало найдорожчу частину вихідного трафіку.
196
деплоїв без простою
2:1
тестів до коду · 12 800+ прикладів
2,9 ГБ
база при 2,1 млн юзерів
2 / 3,8
vCPU / ГБ — увесь сервер
Інженерна культура — бо відповідати за неї мені: 110 тис. рядків тестів проти 52 тис. коду, жодного RuboCop todo, pre-commit гейт на Ruby і TypeScript, CI на кожен пуш, AI-рев’ю на кожен pull request. 196 деплоїв без простою — усі мої.

Хто над цим працював · 7 учасників

Даниїл Шкоропад

техлід · архітектор · product owner · 2023–2026
  • Продукт і архітектура з чистого аркуша; незмінний леджер і всі 196 деплоїв.
  • Поставив процес, у якому працюють десять розробників: тікет-бранчі, рев’ю, CI, обов’язкові тести.

Олександр Шемберко

фулстек · 2024–2026
  • Скіни — колекційні предмети з магазином, дропами, продажем і модерацією, — а ще дуелі та капча-вікторина на вході.
  • Веб-адмінка на Vue 3 + TypeScript і переїзд Mini App на React разом із преміум-магазином.

Олексій Міхно

фулстек · 2024–2025
  • Шар інтерфейсу Mini App і флоу донатів за ним.
  • Працював над механіками розіграшів і ачівок.

Владислав Фоменко

фулстек · 2024–2025
  • Поверхня цитат — меню, категорії, фони — і API-ендпоінт, який віддає цитату в рендер-сервіс.
  • Зміцнив шляхи помилок: збої Telegram-клієнта, падіння джоби AI-фільтрів, Rollbar під рейт-лімітом.

Наталія Макаренко

бекенд · дані · 2024–2026
  • Функції на OpenRouter, фонові джоби за ними і рутина бекапів.
  • Тримала обидві мови інтерфейсу в синхроні, поки росла поверхня команд.

Михаїл Юн

співзасновник · продукт · 2023–2026
  • Перетворює скарги власників чатів на тікети — більшість правил модерації почалися з дзвінка клієнта.
  • Продав і завів 17 white-label ботів, які працювали на спільному ядрі.

Claude

рев’ю pull request’ів · 2026
  • Рев’ю в момент, коли pull request відкривається на рев’ю — ніколи на драфті й ніколи двічі на той самий пуш.
  • Найкорисніший на леджері: позначає будь-яку міграцію, що може змінити транзакцію.

Дочитали до кінця й хочете обговорити?

rubyco.in