Random Vinchik Bot - Telegram-бот для регулярных "рандом-винчиков": собирает желающих из нескольких чатов и формирует честные команды по 4–5 человек, минимизируя повторы встреч.
Что умеет:
• Панель администратора (/vinchik): статус раунда, запуск рассылки опросов по выбранным чатам, закрытие раунда, просмотр истории.
• Опросы в чатах: "Да, локально" (только свой чат) и "Да, глобально" (межчатовые группы). Учитываются только пользователи с публичным @username.
• Распределение команд: отдельно по каждому чату + "фруктовые" межчатовые группы; учёт пар предыдущих встреч.
• Публикация результатов: локальные - в соответствующие чаты, глобальные - во все.
• Логи и устойчивость: неблокирующая запись апдейтов/сущностей в БД, отправка трассировок ошибок в служебный чат.
• История: список всех раундов с деталями и пагинацией.
Технологии:
• Python 3.13+, aiogram 3 (polling/webhook), asyncio.
• MongoDB с автоматической инициализацией коллекций/индексов (mongojet/mongospec), модели на msgspec.
• Конфигурация через YAML, строгая валидация.
• Собственный FSM-storage на MongoDB.
• Алгоритм подбора групп с 10 000 итераций и "умным" финальным распределением (без одиночек, опциональное заполнение до 5).
• Трекер членства бота в чатах и прав админа.
Результат: готовое решение для комьюнити-менеджмента и нетворкинга - админ запускает раунд, участники голосуют, бот считает "честные" команды и публикует их по чатам. Гибкая конфигурация, безопасный деплой, подробные логи и удобная поддержка.