Skip to content

About

Телеграм бот для сообщества "Android Krasnodar" https://t.me/androidkrd

Resources

Stars

17 stars

Watchers

1 watching

Forks

Repository files navigation

🤖 Telegram-бот для сообщества Android Krasnodar

androidkrdbot — это Telegram-бот-модератор для Android Краснодар сообщества.
Он проверяет новых участников группы с помощью простых (но коварных) вопросов, и удаляет тех, кто не прошёл проверку.

Создан в духе строгой, но ироничной модерации.
Во главе — товарищ Берия. Он всё видит. Он всё фиксирует. Он не даст спамерам и случайным людям войти без боя.


🧠 Возможности

  • ✅ Проверка новых участников по контрольному вопросу.
  • 🛠 Возможность перезагрузки вопросов без перезапуска бота.
  • 🔒 Только администраторы могут управлять ботом.
  • 📥 Ответы обрабатываются внутри чата.
  • ⏳ Таймер — если пользователь не ответил, он будет удалён.
  • 📖 Ответы по книгам «Государство и революция» и «Чистый код» в двух режимах.

⚙️ Установка

Требуется: JDK 17+, Gradle, Python 3.10–3.14, Telegram Bot Token

  1. Клонируй репозиторий:

    git clone https://github.com/i-redbyte/androidkrdbot.git
    cd androidkrdbot
  2. Создай .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
  3. Установи зависимости 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 уже установлен.

  4. Убедись, что у тебя есть файл с вопросами:
    src/main/resources/questions.json

    Пример:

    [
      {
        "text": "Назови любой цвет радуги.",
        "correctAnswers": ["красный", "red", "orange", "оранжевый"]
      }
    ]
  5. Запусти бота:

    ./gradlew run

🔐 Настройка Telegram

Чтобы бот работал в группе:

  1. Добавь бота в группу.
  2. Назначь его администратором.
  3. Через @BotFather:
    • Открой настройки бота
    • Group Privacy → Turn off (обязательно!)

💬 Команды

Команда Описание
/start Подсказка для общения с ботом в личке
/startVerification Включить режим проверки новичков
/stopVerification Выключить режим
/verificationStatus Узнать статус режима
/reload_questions Перезагрузить файл с вопросами

🧪 Поведение

  1. При включённом режиме проверки:
    • Новый участник получает вопрос в чате.
    • Если он отвечает правильно — остаётся.
    • Если неправильно или не отвечает — удаляется.
  2. Ответы принимаются в чате, а не в ЛС.
  3. Вопросы выбираются случайно из файла 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. На машине сборки нужен этот файл, иначе бот сообщит об отсутствии корпуса при запуске.

📡 Логика команд доступна только администраторам

Если неадмин попытается управлять ботом, он получит предупреждение, что:

🚫 Только администрация может отдавать приказы товарищу Берии. Ваше поведение записано в досье.


🤝 Contributing

Буду очень рад, если вы захотите поучаствовать в развитии этого проекта!

Если вы нашли баг, хотите внести улучшение, добавить новые вопросы или поправить структуру — не стесняйтесь открыть pull request или создать issue.
Проект открыт для развития и будет только лучше с вашей помощью.

Что можно улучшить:

  • Добавить новые вопросы в questions.json
  • Расширить функциональность (например, логирование, отчёты, фильтры)
  • Обновить документацию и тексты
  • Провести рефакторинг или тестирование

Требования к изменениям:

Пожалуйста, придерживайтесь принципов, уже использованных в проекте:

  • Чистая архитектура:
    • data/ — репозитории
    • domain/ — use cases, модели, состояние
    • presentation/ — Telegram-интеграция и запуск
  • Kotlin DSL + Gradle
  • Логическая изоляция слоёв
  • Минимум магии, максимум читаемости
  • Вопросы хранятся в resources/questions.json

🙌 Спасибо всем, кто захочет внести вклад!


📄 Лицензия

Этот проект распространяется под лицензией Apache License 2.0.
Вы можете свободно использовать, изменять и распространять код, соблюдая условия этой лицензии.

About

Телеграм бот для сообщества "Android Krasnodar" https://t.me/androidkrd

Resources

Stars

17 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages