762 lines
35 KiB
Markdown
762 lines
35 KiB
Markdown
# 🛡️ PrimoGuard Bot
|
||
|
||
**Умный бот-модератор для Telegram** с системой фильтрации спама, банвордов и защитой от флуда.
|
||
|
||
[
|
||
[
|
||
[
|
||
|
||
***
|
||
|
||
## 📑 Содержание
|
||
|
||
- [Возможности](#-возможности)
|
||
- [Быстрый старт](#-быстрый-старт)
|
||
- [Конфигурация](#-конфигурация)
|
||
- [Команды](#-команды)
|
||
- [Система фильтрации](#-система-фильтрации)
|
||
- [Middleware](#️-middleware)
|
||
- [Примеры использования](#-примеры-использования)
|
||
- [Troubleshooting](#-troubleshooting)
|
||
- [FAQ](#-faq)
|
||
|
||
***
|
||
|
||
## 🎯 Возможности
|
||
|
||
### Основные функции
|
||
|
||
✅ **Многоуровневая система фильтрации:**
|
||
- 🔤 **Substring** — фильтрация по подстрокам (например: `хуй`)
|
||
- 📖 **Lemma** — фильтрация по лемматизации (например: `пидорас` → `пидор`, `пидорасом`, `пидораса`)
|
||
- 🧩 **Part** — фильтрация по частям слов без спецсимволов (например: `@Astrixkeepbot` → заблокирует `astrix` и `bot`)
|
||
|
||
✅ **Временные правила:**
|
||
- ⏰ Банворды с истечением срока действия
|
||
- 🔄 Автоматическая очистка истёкших правил
|
||
|
||
✅ **Режимы модерации:**
|
||
- 🔇 **Silence Mode** — удаление всех сообщений (режим тишины)
|
||
- ⚔️ **Conflict Mode** — блокировка конфликтных слов (для предотвращения споров)
|
||
- ✅ **Whitelist** — исключения для разрешённых слов
|
||
|
||
✅ **Умный антиспам:**
|
||
- 🤖 Адаптивные лимиты (текст, пересылки, медиа, callback)
|
||
- 🧠 Детекция спам-паттернов (идентичные сообщения, спам кнопок)
|
||
- ⭐ Система репутации пользователей (0.5x - 2.0x к лимитам)
|
||
- 🚫 Прогрессивные блокировки (1 мин → 2 мин → 5 мин → 15 мин → 1 час)
|
||
|
||
✅ **Статистика и аналитика:**
|
||
- 📊 Топ-10 самых частых срабатываний
|
||
- 👥 Статистика по пользователям
|
||
- 📈 Общее количество удалённых сообщений
|
||
|
||
✅ **Администрирование:**
|
||
- 👨💼 Многоуровневая система администраторов
|
||
- 🔔 Уведомления админов о спаме
|
||
- 🎛️ Удобное управление через команды и callback-кнопки
|
||
|
||
***
|
||
|
||
## 🚀 Быстрый старт
|
||
|
||
### 1. Клонируйте репозиторий
|
||
|
||
```bash
|
||
git clone https://github.com/yourusername/primo_guard_bot.git
|
||
cd primo_guard_bot
|
||
```
|
||
|
||
### 2. Создайте файл `.env`
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
nano .env
|
||
```
|
||
|
||
**Минимальная конфигурация:**
|
||
|
||
```env
|
||
# === BOT SETTINGS ===
|
||
BOT_TOKEN=YOUR_BOT_TOKEN_FROM_BOTFATHER
|
||
|
||
# === ADMIN IDS ===
|
||
OWNER_ID=[123456789,987654321]
|
||
ADMIN_CHAT_ID=-1001234567890
|
||
|
||
# === WEBHOOK (если используете) ===
|
||
WEBHOOK=true
|
||
WEBHOOK_URL=https://yourdomain.com/webhook
|
||
SECRET_TOKEN=your_random_secret_32_chars_here
|
||
|
||
# === SERVER ===
|
||
WEBAPP_HOST=0.0.0.0
|
||
WEBAPP_PORT=3131
|
||
```
|
||
|
||
### 3. Запустите через Docker Compose
|
||
|
||
```bash
|
||
docker compose up -d
|
||
```
|
||
|
||
### 4. Проверьте логи
|
||
|
||
```bash
|
||
docker compose logs -f
|
||
```
|
||
|
||
### 5. Добавьте бота в группу
|
||
|
||
1. Добавьте бота в вашу группу
|
||
2. Выдайте права администратора (удаление сообщений)
|
||
3. Отправьте `/start` в группе
|
||
|
||
***
|
||
|
||
## ⚙️ Конфигурация
|
||
|
||
### Полный `.env` файл
|
||
|
||
```env
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
# 🤖 BOT TOKEN
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
|
||
# [ОБЯЗАТЕЛЬНО] Токен бота от @BotFather
|
||
BOT_TOKEN=1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
# 👤 АДМИНИСТРАТОРЫ И ID
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
|
||
# [ОБЯЗАТЕЛЬНО] ID владельцев бота (список через запятую)
|
||
OWNER_ID=[123456789,987654321]
|
||
|
||
# [ОБЯЗАТЕЛЬНО] ID чата для уведомлений админов
|
||
ADMIN_CHAT_ID=-1001234567890
|
||
|
||
# Дополнительные админы (необязательно)
|
||
ADMIN_ID=[111111111,222222222]
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
# ⚙️ ОСНОВНЫЕ НАСТРОЙКИ БОТА
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
|
||
# Имя бота
|
||
BOT_NAME=PrimoGuard Bot
|
||
|
||
# Описание бота (до 512 символов)
|
||
BOT_DESCRIPTION=Бот-модератор для защиты чата от спама и нецензурных слов
|
||
|
||
# Короткое описание (до 120 символов)
|
||
BOT_SHORT_DESCRIPTION=Тех.поддержка: @yourusername
|
||
|
||
# Автоматически обновлять настройки бота при запуске
|
||
BOT_EDIT=false
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
# 🌐 WEBHOOK SETTINGS
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
|
||
# Использовать webhook вместо long polling
|
||
# false = long polling (для локальной разработки)
|
||
# true = webhook (для продакшена, требует HTTPS)
|
||
WEBHOOK=true
|
||
|
||
# URL вебхука (обязателен если WEBHOOK=true)
|
||
WEBHOOK_URL=https://yourdomain.com/webhook
|
||
|
||
# Секретный токен для вебхука (генерируется автоматически если не указан)
|
||
SECRET_TOKEN=vK8mP2nQ7xR4wJ9sL6fY3tB5hN0cV1zA
|
||
|
||
# Хост для сервера (обычно 0.0.0.0)
|
||
WEBAPP_HOST=0.0.0.0
|
||
|
||
# Порт для сервера
|
||
WEBAPP_PORT=3131
|
||
|
||
# Уровень логов (debug, info, warning, error, critical)
|
||
LOG_LEVEL=info
|
||
|
||
# Включить access log
|
||
ACCES_LOG=false
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
# 📊 DATABASE
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
|
||
# Путь к базе данных SQLite
|
||
DATABASE_PATH=banwords.db
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
# 🔧 ДОПОЛНИТЕЛЬНЫЕ НАСТРОЙКИ
|
||
# ═══════════════════════════════════════════════════════════════════════════
|
||
|
||
# Префикс команд
|
||
PREFIX=/
|
||
|
||
# Таймаут между сообщениями (антиспам, секунды)
|
||
TIMEOUT=3
|
||
```
|
||
|
||
### Docker Compose
|
||
|
||
Ваш `docker-compose.yml` уже настроен оптимально:
|
||
|
||
```yaml
|
||
services:
|
||
primoguard:
|
||
image: whyverum/primo_guard_bot:latest
|
||
container_name: primoguard-bot
|
||
restart: unless-stopped
|
||
|
||
env_file:
|
||
- .env
|
||
|
||
volumes:
|
||
- ./banwords.db:/app/banwords.db
|
||
- ./Logs:/app/Logs
|
||
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
cpus: '1.0'
|
||
memory: 512M
|
||
reservations:
|
||
cpus: '0.25'
|
||
memory: 128M
|
||
|
||
logging:
|
||
driver: "json-file"
|
||
options:
|
||
max-size: "10m"
|
||
max-file: "3"
|
||
|
||
stop_grace_period: 30s
|
||
|
||
networks:
|
||
- proxy
|
||
|
||
networks:
|
||
proxy:
|
||
external: true
|
||
```
|
||
|
||
***
|
||
|
||
## 📝 Команды
|
||
|
||
### Основные команды
|
||
|
||
| Команда | Описание | Доступ |
|
||
|---------|----------|--------|
|
||
| `/start` | Запуск бота и главное меню | Все |
|
||
| `/help` | Помощь по командам | Все |
|
||
| `/stats` | Статистика модерации | Админы |
|
||
| `/id` | Информация о вашем аккаунте | Все |
|
||
| `/chatid` | ID текущего чата | Все |
|
||
|
||
### Управление банвордами (постоянные)
|
||
|
||
| Команда | Пример | Описание |
|
||
|---------|--------|----------|
|
||
| `/addword` | `/addword хуй` | Добавить подстроку |
|
||
| `/addlemma` | `/addlemma пидорас` | Добавить лемму |
|
||
| `/addpart` | `/addpart astrix` | Добавить часть слова |
|
||
| `/remword` | `/remword хуй` | Удалить подстроку |
|
||
| `/remlemma` | `/remlemma пидорас` | Удалить лемму |
|
||
| `/rempart` | `/rempart astrix` | Удалить часть |
|
||
|
||
### Временные банворды
|
||
|
||
| Команда | Пример | Описание |
|
||
|---------|--------|----------|
|
||
| `/addtempword` | `/addtempword спам 24h` | Добавить временную подстроку (24 часа) |
|
||
| `/addtemplemma` | `/addtemplemma флудить 12h` | Добавить временную лемму (12 часов) |
|
||
| `/remtempword` | `/remtempword спам` | Удалить временную подстроку |
|
||
|
||
**Форматы времени:** `1h`, `24h`, `7d`, `30d`
|
||
|
||
### Исключения (whitelist)
|
||
|
||
| Команда | Пример | Описание |
|
||
|---------|--------|----------|
|
||
| `/addexcept` | `/addexcept психология` | Добавить в whitelist |
|
||
| `/remexcept` | `/remexcept психология` | Удалить из whitelist |
|
||
|
||
### Конфликтные слова
|
||
|
||
| Команда | Пример | Описание |
|
||
|---------|--------|----------|
|
||
| `/addconflictword` | `/addconflictword политика` | Добавить конфликтное слово |
|
||
| `/stopconflict` | `/stopconflict` | Включить режим антиконфликта |
|
||
| `/unstopconflict` | `/unstopconflict` | Выключить режим |
|
||
| `/conflictstatus` | `/conflictstatus` | Проверить статус режима |
|
||
|
||
### Режим тишины
|
||
|
||
| Команда | Описание |
|
||
|---------|----------|
|
||
| `/silence 30m` | Включить тишину на 30 минут |
|
||
| `/unsilence` | Выключить режим тишины |
|
||
| `/silencestatus` | Проверить статус |
|
||
| `/extend_silence 1h` | Продлить тишину на 1 час |
|
||
|
||
### Администрирование
|
||
|
||
| Команда | Пример | Описание |
|
||
|---------|--------|----------|
|
||
| `/addadmin` | `/addadmin @username` | Добавить администратора |
|
||
| `/remadmin` | `/remadmin @username` | Удалить администратора |
|
||
| `/listadmins` | `/listadmins` | Список администраторов |
|
||
| `/checkadmin` | `/checkadmin @username` | Проверить статус |
|
||
|
||
### Статистика
|
||
|
||
| Команда | Описание |
|
||
|---------|----------|
|
||
| `/userstats` | Статистика по пользователю |
|
||
| `/resetstats confirm` | Сбросить всю статистику |
|
||
|
||
### Просмотр правил
|
||
|
||
| Команда | Описание |
|
||
|---------|----------|
|
||
| `/listwords` | Список всех подстрок |
|
||
| `/listlemmas` | Список всех лемм |
|
||
| `/listparts` | Список всех частей |
|
||
| `/listexcept` | Список исключений |
|
||
| `/listconflict` | Список конфликтных слов |
|
||
|
||
### Утилиты
|
||
|
||
| Команда | Описание |
|
||
|---------|----------|
|
||
| `/emoji текст` | Извлечь все эмодзи из текста |
|
||
| `/ping` | Проверить отклик бота |
|
||
| `/checkwebhook` | Проверить статус webhook (админы) |
|
||
|
||
***
|
||
|
||
## 🔍 Система фильтрации
|
||
|
||
### 1. Substring (Подстроки)
|
||
|
||
**Как работает:** Простой поиск подстроки в тексте.
|
||
|
||
```
|
||
Правило: "хуй"
|
||
✅ Заблокирует: "хуй", "хуйня", "похуй", "нахуй"
|
||
❌ Не заблокирует: "психология" (хотя содержит "хуй", но это безобидное слово)
|
||
```
|
||
|
||
**Когда использовать:** Для коротких и однозначных матов.
|
||
|
||
### 2. Lemma (Лемматизация)
|
||
|
||
**Как работает:** Приводит слова к нормальной форме и сравнивает.
|
||
|
||
```
|
||
Правило: "пидорас" (лемма: "пидор")
|
||
✅ Заблокирует: "пидорас", "пидораса", "пидорасом", "пидорасы"
|
||
❌ Не заблокирует: "пидор123" (не является словом)
|
||
```
|
||
|
||
**Когда использовать:** Для блокировки всех форм слова.
|
||
|
||
### 3. Part (Части слов)
|
||
|
||
**Как работает:** Удаляет ВСЕ спецсимволы и ищет часть.
|
||
|
||
```
|
||
Правило: "astrix"
|
||
✅ Заблокирует: "@Astrixkeepbot", "astrix.bot", "a-s-t-r-i-x"
|
||
❌ Не заблокирует: "astronomy" (не содержит точную последовательность)
|
||
```
|
||
|
||
**Когда использовать:** Для блокировки упоминаний ботов/каналов со спецсимволами.
|
||
|
||
### 4. Whitelist (Исключения)
|
||
|
||
**Как работает:** Проверяется ПЕРВЫМ, до всех фильтров.
|
||
|
||
```
|
||
Whitelist: "психология"
|
||
✅ Пропустит: "я изучаю психологию"
|
||
✅ Пропустит: "психолог"
|
||
```
|
||
|
||
**Когда использовать:** Для безобидных слов, содержащих мат.
|
||
|
||
### 5. Временные правила
|
||
|
||
**Как работает:** Автоматически удаляются после истечения срока.
|
||
|
||
```
|
||
Команда: /addtempword флуд 24h
|
||
Результат: Слово "флуд" будет блокироваться 24 часа
|
||
```
|
||
|
||
**Когда использовать:** Для временных мер (события, рейды).
|
||
|
||
***
|
||
|
||
## 🛡️ Middleware
|
||
|
||
### 1. BanWordsMiddleware (Основная защита)
|
||
|
||
**Приоритет:** Высокий
|
||
**Применяется к:** Все текстовые сообщения
|
||
|
||
**Функции:**
|
||
- Проверка на substring, lemma, part
|
||
- Проверка временных банвордов
|
||
- Проверка whitelist
|
||
- Режим тишины
|
||
- Режим антиконфликта
|
||
|
||
**Pipeline проверки:**
|
||
```
|
||
1. Пропуск админов
|
||
2. Проверка whitelist → ПРОПУСТИТЬ
|
||
3. Silence Mode → УДАЛИТЬ
|
||
4. Conflict Mode + конфликтные слова → УДАЛИТЬ
|
||
5. Substring → УДАЛИТЬ
|
||
6. Part → УДАЛИТЬ
|
||
7. Lemma → УДАЛИТЬ
|
||
8. Временные банворды → УДАЛИТЬ
|
||
9. ✅ Пропустить сообщение
|
||
```
|
||
|
||
***
|
||
|
||
### 2. AntiSpamMiddleware (Умный антиспам)
|
||
|
||
**Приоритет:** Средний
|
||
**Применяется к:** Все сообщения и callback
|
||
|
||
**Функции:**
|
||
- ⚡ Адаптивные лимиты по типам сообщений
|
||
- 🧠 Детекция спам-паттернов
|
||
- ⭐ Система репутации (0.5x - 2.0x)
|
||
- 🚫 Прогрессивные блокировки
|
||
|
||
**Лимиты по умолчанию:**
|
||
|
||
| Тип | Лимит | Окно | Описание |
|
||
|-----|-------|------|----------|
|
||
| 📝 Текст | 8 сообщений | 10 сек | Обычные текстовые сообщения |
|
||
| ↗️ Пересылки | 20 сообщений | 10 сек | Можно массово пересылать! |
|
||
| 🔘 Callback | 10 нажатий | 10 сек | Нажатия на кнопки |
|
||
| 📷 Медиа | 10 файлов | 10 сек | Фото, видео, документы |
|
||
| ⚡ Команды | ∞ | - | Не ограничены |
|
||
|
||
**Умная детекция:**
|
||
- ❌ 5 одинаковых текстов подряд → немедленная блокировка
|
||
- ❌ 8 нажатий одной кнопки → блокировка
|
||
- ❌ 7+ медиа подряд → предупреждение
|
||
|
||
**Система репутации:**
|
||
```
|
||
Новый пользователь: 1.0x (стандартные лимиты)
|
||
Хорошее поведение: до 2.0x (лимиты удваиваются!)
|
||
Плохое поведение: до 0.5x (лимиты снижаются вдвое)
|
||
```
|
||
|
||
**Прогрессивные блокировки:**
|
||
```
|
||
1 предупреждение → 2 мин блокировка
|
||
2 предупреждения → 4 мин
|
||
3 предупреждения → 8 мин
|
||
4 предупреждения → 16 мин
|
||
5+ предупреждений → 1 час (максимум)
|
||
```
|
||
|
||
***
|
||
|
||
### 3. LoggingMiddleware (Логирование)
|
||
|
||
**Приоритет:** Низкий
|
||
**Применяется к:** Все события
|
||
|
||
**Функции:**
|
||
- 📝 Логирование всех команд
|
||
- 📊 Логирование всех событий
|
||
- 🔍 Детальная информация для отладки
|
||
|
||
***
|
||
|
||
### 4. ErrorHandlingMiddleware (Обработка ошибок)
|
||
|
||
**Приоритет:** Последний
|
||
**Применяется к:** Все события
|
||
|
||
**Функции:**
|
||
- ❌ Перехват всех исключений
|
||
- 📧 Уведомления админов об ошибках
|
||
- 🔄 Graceful recovery
|
||
|
||
***
|
||
|
||
### 5. TimingMiddleware (Замер времени)
|
||
|
||
**Приоритет:** Первый
|
||
**Применяется к:** Все события
|
||
|
||
**Функции:**
|
||
- ⏱️ Замер времени выполнения
|
||
- 📊 Профилирование производительности
|
||
|
||
***
|
||
|
||
## 💡 Примеры использования
|
||
|
||
### Сценарий 1: Настройка для чата с матами
|
||
|
||
```bash
|
||
# 1. Добавляем основные маты
|
||
/addword хуй
|
||
/addword блять
|
||
/addlemma пидорас
|
||
/addlemma ебать
|
||
|
||
# 2. Добавляем исключения
|
||
/addexcept психология
|
||
/addexcept архитектура
|
||
|
||
# 3. Проверяем правила
|
||
/listwords
|
||
```
|
||
|
||
### Сценарий 2: Блокировка упоминаний ботов
|
||
|
||
```bash
|
||
# 1. Добавляем части названий ботов
|
||
/addpart astrix
|
||
/addpart keepbot
|
||
/addpart spambot
|
||
|
||
# 2. Проверяем
|
||
# ✅ Заблокируется: "@Astrixkeepbot", "astrix_bot"
|
||
```
|
||
|
||
### Сценарий 3: Временная блокировка темы
|
||
|
||
```bash
|
||
# Событие: выборы, запрещаем политику на 3 дня
|
||
/addtempword политика 3d
|
||
/addtempword выборы 3d
|
||
/addtemplemma голосовать 3d
|
||
|
||
# Через 3 дня слова автоматически разблокируются
|
||
```
|
||
|
||
### Сценарий 4: Режим тишины во время рейда
|
||
|
||
```bash
|
||
# 1. Включаем тишину на 1 час
|
||
/silence 1h
|
||
|
||
# Все сообщения от не-админов удаляются
|
||
|
||
# 2. Если рейд продолжается, продлеваем
|
||
/extend_silence 30m
|
||
|
||
# 3. Отключаем вручную
|
||
/unsilence
|
||
```
|
||
|
||
### Сценарий 5: Антиконфликтный режим
|
||
|
||
```bash
|
||
# 1. Добавляем конфликтные темы
|
||
/addconflictword политика
|
||
/addconflictword религия
|
||
/addconflictlemma спорить
|
||
|
||
# 2. Включаем режим
|
||
/stopconflict
|
||
|
||
# Теперь сообщения с этими словами удаляются
|
||
|
||
# 3. Выключаем после события
|
||
/unstopconflict
|
||
```
|
||
|
||
***
|
||
|
||
## 🔧 Troubleshooting
|
||
|
||
### Бот не отвечает в группе
|
||
|
||
**Решение:**
|
||
```bash
|
||
# 1. Проверьте права администратора
|
||
# Бот ДОЛЖЕН иметь право "Удаление сообщений"
|
||
|
||
# 2. Проверьте webhook
|
||
docker exec primoguard-bot python -c "
|
||
from configs import settings
|
||
import requests
|
||
url = f'https://api.telegram.org/bot{settings.BOT_TOKEN}/getWebhookInfo'
|
||
print(requests.get(url).json())
|
||
"
|
||
|
||
# 3. Проверьте логи
|
||
docker compose logs -f
|
||
|
||
# 4. Перезапустите
|
||
docker compose restart
|
||
```
|
||
|
||
### Ошибка 401 Unauthorized (Webhook)
|
||
|
||
**Причина:** Несовпадение SECRET_TOKEN
|
||
|
||
**Решение:**
|
||
```bash
|
||
# 1. Удалите webhook
|
||
curl "https://api.telegram.org/botYOUR_TOKEN/deleteWebhook?drop_pending_updates=true"
|
||
|
||
# 2. Проверьте .env файл
|
||
cat .env | grep SECRET_TOKEN
|
||
|
||
# 3. Перезапустите
|
||
docker compose down
|
||
docker compose up -d
|
||
```
|
||
|
||
### База данных заблокирована (database is locked)
|
||
|
||
**Решение:**
|
||
```bash
|
||
# 1. Остановите все контейнеры
|
||
docker compose down
|
||
|
||
# 2. Проверьте права
|
||
sudo chown -R $USER:$USER banwords.db
|
||
|
||
# 3. Запустите
|
||
docker compose up -d
|
||
```
|
||
|
||
### Бот не удаляет сообщения
|
||
|
||
**Проверьте:**
|
||
1. ✅ Бот — администратор группы
|
||
2. ✅ Есть право "Удаление сообщений"
|
||
3. ✅ Правила банвордов добавлены (`/listwords`)
|
||
4. ✅ Пользователь не в списке админов (`/listadmins`)
|
||
|
||
***
|
||
|
||
## ❓ FAQ
|
||
|
||
### Как узнать свой ID?
|
||
|
||
Отправьте `/id` боту или используйте @userinfobot
|
||
|
||
### Как узнать ID группы?
|
||
|
||
1. Добавьте бота в группу
|
||
2. Отправьте `/chatid` в группе
|
||
|
||
### Можно ли использовать без webhook?
|
||
|
||
Да! Установите в `.env`:
|
||
```env
|
||
WEBHOOK=false
|
||
```
|
||
|
||
### Как добавить несколько админов?
|
||
|
||
```env
|
||
OWNER_ID=[123456789,987654321,555666777]
|
||
ADMIN_ID=[111222333,444555666]
|
||
```
|
||
|
||
### Сколько правил можно добавить?
|
||
|
||
Ограничений нет, но рекомендуется до 1000 слов для оптимальной производительности.
|
||
|
||
### Работает ли на русском и английском?
|
||
|
||
Да! Поддерживаются все языки с Unicode.
|
||
|
||
### Как сделать backup базы данных?
|
||
|
||
```bash
|
||
# Создайте backup
|
||
cp banwords.db banwords_backup_$(date +%Y%m%d).db
|
||
|
||
# Или через Docker
|
||
docker cp primoguard-bot:/app/banwords.db ./backup/
|
||
```
|
||
|
||
### Как обновить бота?
|
||
|
||
```bash
|
||
# 1. Остановите
|
||
docker compose down
|
||
|
||
# 2. Обновите образ
|
||
docker pull whyverum/primo_guard_bot:latest
|
||
|
||
# 3. Запустите
|
||
docker compose up -d
|
||
```
|
||
|
||
### Влияет ли на производительность группы?
|
||
|
||
Нет! Бот обрабатывает сообщения за ~10-50мс. Для пользователей задержка незаметна.
|
||
|
||
***
|
||
|
||
## 📊 Мониторинг
|
||
|
||
### Просмотр логов
|
||
|
||
```bash
|
||
# Все логи
|
||
docker compose logs -f
|
||
|
||
# Только ошибки
|
||
docker compose logs -f | grep ERROR
|
||
|
||
# Последние 100 строк
|
||
docker compose logs --tail=100
|
||
|
||
# Логи за сегодня
|
||
docker compose logs --since $(date +%Y-%m-%d)
|
||
```
|
||
|
||
### Статистика Docker
|
||
|
||
```bash
|
||
# Использование ресурсов
|
||
docker stats primoguard-bot
|
||
|
||
# Информация о контейнере
|
||
docker inspect primoguard-bot
|
||
|
||
# Размер логов
|
||
docker logs primoguard-bot 2>&1 | wc -l
|
||
```
|
||
|
||
## 📄 Лицензия
|
||
|
||
MIT License - см. [LICENSE](LICENSE)
|
||
|
||
***
|
||
|
||
## 🙏 Благодарности
|
||
|
||
- [aiogram](https://github.com/aiogram/aiogram) - асинхронный фреймворк для Telegram Bot API
|
||
- [pymorphy2](https://github.com/pymorphy2/pymorphy2) - морфологический анализатор для русского языка
|
||
- [SQLAlchemy](https://www.sqlalchemy.org/) - ORM для работы с базой данных
|
||
|
||
***
|
||
|
||
**⭐ Если бот помог вам, поставьте звезду на GitHub!**
|