Евгений Храмов 6a7df9bc55 Улучшение системы фильтрации мата и управления кармой
Фильтрация бранных слов:
- Добавлена полная транслитерация латиница→кириллица (все 26 букв)
- Добавлен маппинг цифр→буквы (0→о, 3→з, 4→ч, 6→б, 8→в и др.)
- Добавлено определение ASCII-art паттернов (><→х, }|{→ж и др.)
- Реализована 3-уровневая система категоризации паттернов:
  * whole_word - только целые слова с границами \b
  * word_start - только начало слова (новая категория)
  * contains - любое вхождение (минимум 4 буквы)
- Добавлен расширенный список исключений для предотвращения ложных срабатываний
  (требует, употреблять, скребу, гребу, республика, документ и др.)

Система кармы:
- Добавлен штраф за эмодзи клоуна 🤡 (-20 кармы тому, кто добавил)
- Карма не возвращается при снятии клоуна
- Реализована возможность отключения кармы в конкретных топиках:
  * Новая таблица disabled_karma_topics в БД
  * Методы: is_karma_disabled_in_topic(), disable/enable_karma_in_topic()
- Перенесены команды управления кармой из /badwords в /karma:
  * /karma disable - отключить карму в текущем топике
  * /karma enable - включить карму в текущем топике
  * /karma status - показать статус кармы во всех топиках
- Убраны упоминания пользователей в команде /top (используется <code>)

Аудит и логирование:
- Добавлена отправка в канал аудита для операций со словами:
  * Добавление/удаление бранных слов
  * Добавление/удаление исключений
- Расширен action_reporter для поддержки операций без привязки к пользователю
2025-11-18 18:16:59 +03:00
2025-07-11 12:42:16 +00:00

LGBot

Бот-администратор для @linux_gaming_ru

Установка зависимостей (pyenv)

pyenv install 3.11.0

~/.pyenv/versions/3.11.0/bin/python3 -m venv .venv

source .venv/bin/activate

pip install -r requirements.txt

Настройка

Создайте файл .env и внесите в него токен бота, ID админ-чата и топика.

Запуск

python src/main.py

Используется Python 3.11.0

Обновление на сервере

Для обновления бота на продакшн-сервере используйте скрипт update.sh:

./update.sh

Скрипт автоматически:

  • Проверит наличие обновлений в git-репозитории
  • Загрузит изменения (git pull)
  • Перезапустит службу бота (systemctl restart LGBot.service)
  • Покажет статус работы бота

Система автоматического мьюта

Бот автоматически отслеживает использование нецензурной лексики и применяет прогрессирующие наказания.

Как работает

  1. Обнаружение нарушений:

    • Каждое текстовое сообщение проверяется на наличие бранных слов
    • Проверяются только группы и супергруппы (не личные сообщения)
    • Команды (начинающиеся с /) не проверяются
  2. При обнаружении мата:

    • Сообщение удаляется автоматически
    • Нарушение фиксируется в базе данных
    • Пользователь получает мут соответствующего уровня
    • Уведомление отправляется в чат и админ-чат
  3. Прогрессирующие наказания:

№ нарушения Длительность мута № нарушения Длительность мута
1 5 минут 9 1 день
2 15 минут 10 2 дня
3 30 минут 11 3 дня
4 1 час 12 5 дней
5 2 часа 13 7 дней
8 12 часов 16+ НАВСЕГДА
  1. Накопительный эффект:
    • Нарушения учитываются за последние 30 дней
    • Старые нарушения автоматически удаляются из базы
    • Администраторы освобождены от автоматических мутов

Управление списком бранных слов

⚠️ Все команды доступны только администраторам чата

Основные команды

# Показать справку
/badwords help

# Показать список бранных слов (первые 50)
/badwords list

# Статистика
/badwords count

# Добавить слово в список
/badwords add <слово>

# Удалить слово из списка
/badwords remove <слово>

Исключения

Исключения — слова, содержащие бранные корни, но не являющиеся матом (например: "республика", "документ"):

# Показать исключения
/badwords exceptions

# Добавить исключение
/badwords add_exception <слово>

# Удалить исключение
/badwords remove_exception <слово>

Служебные команды

# Перезагрузить списки из файла
/badwords reload

Рекомендации

  1. Используйте корни слов, а не полные формы:

    • Правильно: ебал (поймает все формы)
    • Неправильно: ебала (пропустит другие формы)
  2. Избегайте коротких корней (могут давать ложные срабатывания)

  3. Тестируйте после добавления нового слова

Хранение данных

Все списки хранятся в файле src/data/bad_words.json:

{
  "bad_words": ["слово1", "слово2", ...],
  "exceptions": [сключение1", сключение2", ...]
}

Изменения через команды применяются немедленно, перезапуск бота не требуется.

Логирование

Все действия записываются в:

  • bot.log - файл логов
  • Админ-чат - уведомления о мутах

Примеры логов:

[INFO] Пользователь 123456789 получил автоматический мут на 5 минут за нецензурную лексику (нарушение #1)
[INFO] Нарушение пользователя 123456789 зафиксировано в чате -100123456789
[INFO] Администратор 987654321 добавил бранное слово: спам

База данных

Таблица violations хранит все нарушения:

  • id - уникальный идентификатор
  • user_id - ID пользователя
  • chat_id - ID чата
  • violation_date - время нарушения (unix timestamp)
  • violation_type - тип нарушения ('bad_language')

Настройка системы

Изменение уровней мутов

Откройте src/modules/auto_mute.py и измените массив MUTE_LEVELS:

MUTE_LEVELS = [
    300,        # 1. 5 минут
    900,        # 2. 15 минут
    # ... добавьте или измените уровни
    None,       # Перманентный мут
]

Изменение периода накопления

Измените VIOLATIONS_PERIOD в src/modules/auto_mute.py:

VIOLATIONS_PERIOD = 2592000  # 30 дней в секундах

Требования

  • Python 3.7+
  • pyTelegramBotAPI (telebot)
  • SQLite3
  • Права бота в чате:
    • Удаление сообщений
    • Ограничение пользователей

Устранение проблем

При возникновении проблем проверьте:

  1. Логи бота в файле bot.log
  2. Права бота в чате (удаление сообщений, ограничение пользователей)
  3. Корректность настроек в .env
  4. Наличие файла src/data/bad_words.json
Description
No description provided
Readme MIT 584 KiB
Languages
Python 99%
Shell 1%