🤖 Telegram-бот для сообщества Android Krasnodar
androidkrdbot — это Telegram-бот-модератор для Android Краснодар сообщества.
Он проверяет новых участников группы с помощью простых (но коварных) вопросов, и удаляет тех, кто не прошёл проверку.
Создан в духе строгой, но ироничной модерации.
Во главе — товарищ Берия. Он всё видит. Он всё фиксирует. Он не даст спамерам и случайным людям войти без боя.
- ✅ Проверка новых участников по контрольному вопросу.
- 🛠 Возможность перезагрузки вопросов без перезапуска бота.
- 🔒 Только администраторы могут управлять ботом.
- 📥 Ответы обрабатываются внутри чата.
- ⏳ Таймер — если пользователь не ответил, он будет удалён.
- 📖 Ответы по книгам «Государство и революция» и «Чистый код» в двух режимах.
Требуется: JDK 17+, Gradle, Python 3.10–3.14, Telegram Bot Token
-
Клонируй репозиторий:
git clone https://github.com/i-redbyte/androidkrdbot.git cd androidkrdbot -
Создай
.envв корне проекта:TELEGRAM_BOT_TOKEN=123456789:ABCDEFyourTokenHere API_ID=your_telegram_api_id API_HASH=your_telegram_api_hash # Необязательно: путь к python (по умолчанию ./venv/bin/python3 или python3 из PATH) # PYTHON_PATH=/usr/local/bin/python3
-
Установи зависимости Python для скриптов
script/(участники чата, дайджест). Вrequirements.txt— kurigram (поддерживаемый форк Pyrogram, тот жеfrom pyrogram import Client; работает на Python 3.14).python3 -m venv venv ./venv/bin/pip install -r requirements.txt
Если раньше ставили устаревший пакет
pyrogramс PyPI:./venv/bin/pip uninstall pyrogram -yи сноваpip install -r requirements.txt.На сервере продакшена обычно используется тот же каталог с
venv/рядом с jar. Локально можно вместо venv указать системный Python черезPYTHON_PATHв.env, если kurigram/pyrogram уже установлен. -
Убедись, что у тебя есть файл с вопросами:
src/main/resources/questions.jsonПример:
[ { "text": "Назови любой цвет радуги.", "correctAnswers": ["красный", "red", "orange", "оранжевый"] } ] -
Запусти бота:
./gradlew run
Чтобы бот работал в группе:
- Добавь бота в группу.
- Назначь его администратором.
- Через @BotFather:
- Открой настройки бота
Group Privacy→Turn off(обязательно!)
| Команда | Описание |
|---|---|
/start |
Подсказка для общения с ботом в личке |
/startVerification |
Включить режим проверки новичков |
/stopVerification |
Выключить режим |
/verificationStatus |
Узнать статус режима |
/reload_questions |
Перезагрузить файл с вопросами |
- При включённом режиме проверки:
- Новый участник получает вопрос в чате.
- Если он отвечает правильно — остаётся.
- Если неправильно или не отвечает — удаляется.
- Ответы принимаются в чате, а не в ЛС.
- Вопросы выбираются случайно из файла
questions.json.
- Упоминание бота в любом месте текстового сообщения выбирает цельное предложение по словам сообщения. Бот сравнивает подходящие фразы в обеих книгах и выбирает более близкую к запросу.
- Ответ (reply) на сообщение бота запускает цепь Маркова из книги, которая лучше подходит к запросу. Если в ответе есть и упоминание, используется режим Маркова.
- Когда в обеих книгах нет совпадений с запросом, бот чередует их; для цитат и цепей Маркова счётчики отдельные.
- В личном чате бот отвечает цитатой на любое обычное текстовое сообщение без упоминания. Ответ (reply) на его сообщение запускает режим Маркова;
/startпоказывает краткую подсказку. - Во время проверки нового участника ответы по книге не отправляются.
Корпус Ленина хранится в src/main/resources/markov/lenin_sentences.txt. Его можно обновить командой python3 markov/prepare_corpus.py.
Корпус «Чистого кода» создаётся из локального PDF и не хранится в Git. Перед сборкой установи pdfplumber в Python, затем выполни:
python3 markov/prepare_clean_code.py /path/to/Chisty_kod_Sozdanie_analiz_i_refaktoring.pdf
./gradlew test shadowJarСкрипт создаст src/main/resources/markov/clean_code_sentences.txt; Gradle включит его в локальный JAR. На машине сборки нужен этот файл, иначе бот сообщит об отсутствии корпуса при запуске.
Если неадмин попытается управлять ботом, он получит предупреждение, что:
🚫 Только администрация может отдавать приказы товарищу Берии. Ваше поведение записано в досье.
Буду очень рад, если вы захотите поучаствовать в развитии этого проекта!
Если вы нашли баг, хотите внести улучшение, добавить новые вопросы или поправить структуру — не стесняйтесь открыть pull request или создать issue.
Проект открыт для развития и будет только лучше с вашей помощью.
- Добавить новые вопросы в
questions.json - Расширить функциональность (например, логирование, отчёты, фильтры)
- Обновить документацию и тексты
- Провести рефакторинг или тестирование
Пожалуйста, придерживайтесь принципов, уже использованных в проекте:
- Чистая архитектура:
data/— репозиторииdomain/— use cases, модели, состояниеpresentation/— Telegram-интеграция и запуск
- Kotlin DSL + Gradle
- Логическая изоляция слоёв
- Минимум магии, максимум читаемости
- Вопросы хранятся в
resources/questions.json
🙌 Спасибо всем, кто захочет внести вклад!
Этот проект распространяется под лицензией Apache License 2.0.
Вы можете свободно использовать, изменять и распространять код, соблюдая условия этой лицензии.