Warning
Документация находится в стадии разработки!
ChatProtect - NEO Organization - это чат бот для телерамм который модерирует сообщение на наличие запрещённых слов, с тонкой настройкой, а также имеет систему "шуток". Проект распространяется по лицензии GPL v3. Код рассчитан на работу в Termux (именно поэтому используется telebot, а не aiogram так как его установка очень проблематична на android).
Warning
Данный проект находится в Alpha! В коде есть функции с более раних этапов разработки, которые на данный момент ниакк не используются в коде.
- Android смартфон (16gb, 2gb ОЗУ)
- Termux (не из-за Google Play)
- python3
- loguru
- telebot
- requests
При появлении нового сообщения бот получает весь текст сообщения, и происходит не сколько проверок:
Первое сообщение ссылка? - бан (настраивается).
0 Этап - проверка напрямую, найдено запрещённое слово? - добавляем 1 нарушение.
1 Этап - убираем все символы (кроме алфавита и цифр), найдено запрещённое слово? - добавляем 2 нарушения.
2 Этап - убираем не все символы, а затем замена символов (например @ на а, а 0 на о), найдено запрещённое слово? - добавляем 3 нарушения.
Если сообщение было изменено то происходит повторная проверка в теже 3 этапа, найдено нарушение? - удаляем сообщение, добавляем x2 нарушения (в зависимости от этапа).
Note
Для всех этапов можно включить проверку на нечёткое совпадение через difflib (опечатки)
Так же по умолчанию если пользователь отправил больше 13 сообщений за минуту то получит нарушение или бан (настраивается), это рассчитано на группы с ограничением времени отправки (чтобы при спаме в личку бота пользователь получил бан)
Note
Есть система исключений, в DATA_DIR есть exception.txt в нём сожержатся слова ислючения (например оскорблять). Система исключений работает так: если слов исключений больше или столько же сколько и слов нарушений то сообщение пропускается.
В DATA_DIR есть trigger.json в котором содержится данные для конкретных слов (тригеров), на которые бот реагирует соответственно.
Бот может удалить сообщений, ответить на него текстом и отправить медиа файл (всё настраивается отдельно в triggers.json).
Так как отправка медиа может быть крайне затратной по ресурмсам в программе реализована система "кеширования", когда медиа файл был успешно отправлен в чат в базу данных записывается имя файла и id сообщения, в следующий раз при отправке того же медиа бот перешлёт старое сообщение. Для автоматического кеширования в личке с ботом напишите /cache_all - для кеширования не кешированых медиа и /cache_media all - для удаления старых id и кеширования всех медиа.
Общие команды:
- /help - Показать справку по командам
- /status - Статус бота (если команда отправлена в приватном чате и вы модератор будет выведена более подробная информация)
- /rules - Правила группы
- reputation_constants - Информация о константах для расчёта репутаций
- /data - Информация о пользователе
- /about - Информация о боте
Команды модератора: (где @user можно или @user_name или user_id)
- /rep @user (points) - Добавить репутацию пользователю
- /minus_rep @user (points) - Снизить репутацию пользователю
- /mute @user (minutes) - Заглушить пользователя
- /unmute @user - Размутить пользователя
- /ban @user - Забанить пользователя
- /unban @user - Разбанить пользователя
- /clear @user (points) - Очистить нарушения пользователя
- /reload - Перезагрузить базы данных
- /cache_media (опционально аргумент all) - кеширование не кешированых медиа файлов из MEDIA_DIR (если есть аргумент all - то принудительное кеширование всех медиа файлов)
В зависимости от настроек в config.py, бот будет делать бэкап DATA_DIR автоматически:
- при каждом запуске
- каждые INTERVAL_BACKUP секунд в BACKUP_DIR, а также автоматически удалить старые бэкапы.
В config.py можно настраивать эту систему более точно под ваши нужды. Здесь будет расписаны поведение при стандартных параметрах.
- 1 удалённое сообщение на 1 этапе проверки: 1 нарушение.
- 1 удалённое сообщение на 2 этапе проверки: 2 нарушения.
- 1 удалённое сообщение на 3 этапе проверки: 3 нарушения.
- Если сообщение было изменено то к выше перечисленные очки будут удваиваться.
- 1 репутация от пользователя: -3 нарушения.
- 1 репутация от модератора: -10 нарушений.
- ссылка в 1 сообщением: 9 нарушений.
- спам: 9 нарушений.
- мут: -1 очко репутации от модераторов. Для исправления возможных ложных срабатываний есть соответствующие команды.
Если система шуток включена то бот после проверки сообщения (если он не было удалено за нарушение), проверит на совпадение по TRIGGERS_FILE. структура TRIGGERS_FILE:
{
"replies": [
{
"keywords": ["че делать", "чё делать"],
"response": "Снимать штаны и бегать",
"media": null,
"delete_message": false
},
{
"keywords": ["ты бот", "бот ты"],
"response": "Сам ты бот.",
"media": "media/ты_бот/",
"delete_message": false
}
]
}- keywords - список слов на которые будет реагировать бот.
- response - текстовый ответ (null - чтобы было без ответа).
- media - путь к медиа файлу (если указан каталог будет выбран случайный медиа файл в нём).
- delete_message - удалить ли сообщение.
Note
В config.py можно увеличить задержку между кеширование медиа файлов.