ECDLogger – автоматический монитор и логгер отчётов античит-системы ECD с игрового портала
- Что делает программа?
Программа периодически опрашивает AJAX-интерфейс раздела репортов (жалоб на читеров), парсит данные о каждом новом отчёте и сохраняет их в локальную базу данных SQLite. При обнаружении нового отчёта (которого ещё нет в БД) программа выводит в консоль подробную информацию:
Все данные дублируются в лог-файл
- Для чего подходит?
- Как использовать?
- Какие библиотеки нужны?
- Что лучше не трогать?
Редактировать разрешено только словарь
Внимание: в случае если вы используете данную программу для улучшения своего Бота/Сайта (см. инструкцию по добавлению ниже) будьте аккуратны, актуальность программы может пропасть..
Изменение
Прямой доступ к базе данных (проще всего)
В файле
У вас нет разрешения на просмотр ссылки. Вход или Регистрация
У вас нет разрешения на просмотр ссылки. Вход или Регистрация
- Что делает программа?
Программа периодически опрашивает AJAX-интерфейс раздела репортов (жалоб на читеров), парсит данные о каждом новом отчёте и сохраняет их в локальную базу данных SQLite. При обнаружении нового отчёта (которого ещё нет в БД) программа выводит в консоль подробную информацию:
- ID отчёта
- Ник игрока
- Статус проверки (чист / подозрительный / читер)
- Время создания отчёта
- Название сервера
- IP-адрес пользователя
- Прямую ссылку на отчёт
Все данные дублируются в лог-файл
ecd_logger.log и сохраняются в БД database/reports- Для чего подходит?
- Администраторам игровых серверов – для автоматического отслеживания новых жалоб на читеров без необходимости вручную заходить на сайт
- Для анализа активности нарушителей – можно накопить статистику по читерам за длительное время
- Для мониторинга нескольких серверов – программа умеет фильтровать отчёты по имени целевого сервера, принимать все отчёты или только отчёты с целевого + скрытых серверов
- Как использовать?
- Установить зависимости
Программа написана на Python 3.x.
Установка библеотек:pip install requests bs4
Примечание:
SQLite3,random,logging,json,time,os,sys,datetimeвходят в стандартную библиотеку Python
- Настроить конфигурацию – отредактировать файл config.py:
- mode – режим сканирования (1 – только целевой сервер, 2 – все сервера, 3 – целевой + скрытые)
- target_server – точное имя сервера (с учётом регистра и доп. символов), которое используется для фильтрации
- min_interval / max_interval – интервал между проверками в секундах (случайное значение из диапазона, рекомендуемые значения 120/300 из-за вредности FG к запросам, иначе сервер будет в блоке на 30-60мин)
- max_reports_per_scan – максимальное количество отчётов, обрабатываемых за одну проверку (0 – без лимита, не более 50)
- request_delay – пауза между обработкой отдельных отчётов (чтобы не перегружать сервер)
Остальные параметры (_DB_NAME,_FUA_USE,_FUA_RANDOM) лучше не менять без необходимости - Запустить программу:
Работа будет продолжаться до принудительной остановкиBash:python ECDLogger.pyCtrl+C
- Какие библиотеки нужны?
- requests – для HTTP-запросов
- beautifulsoup4 – для парсинга HTML-фрагментов внутри JSON-ответа
- Остальное (sqlite3, logging, random, time, json, os, sys, datetime) – встроенные модули Python
from fake.ua import ua, но файл ua.py сам содержит список User-Agent’ов, это означает, что библиотека fake-useragent не требуется – используется встроенный список- Что лучше не трогать?
- В файлах
config.pyиECDLogger.pyпомечены зоны «НЕ ТРОГАТЬ». К ним относятся: - Все глобальные переменные, начинающиеся с подчёркивания (
_S_B_FG,_S_A_FG,_FUA,_VERIFY_SSL,_LOG_FILE,_SCAN_MODESи т.д.) - Классы
Database,ECDParser,ReportFormatter,Monitor– их внутренняя логика завязана на структуру ответа сервера - Любые строки с комментариями
# НЕ ТРОГАТЬи участки кода ниже них
Редактировать разрешено только словарь
SCAN_SETTINGS в config.py и, при необходимости, переменную _DB_NAME (путь к БД)Внимание: в случае если вы используете данную программу для улучшения своего Бота/Сайта (см. инструкцию по добавлению ниже) будьте аккуратны, актуальность программы может пропасть..
Изменение
ua.py не рекомендуется, но допустимо – это просто список User-Agent строк
Дополнение: интеграция с вашим сайтом или Telegram-ботом
Поскольку программа сохраняет все обнаруженные отчёты в локальную базу данных SQLitedatabase/reports, вы можете легко интегрировать её с внешними системами двумя способами:
Значения в базе данных и их описание:
report_id | Уникальный ID отчёта |
nick | Ник игрока |
result_status | Статус (success, warning, danger) |
report_time | Время создания отчета на сайте |
hostname | Имя сервера |
user_ip | IP-Адрес |
url | Прямая ссылка на отчёт |
created_at | Дата и время сохранения в БД |
Прямой доступ к базе данных (проще всего)
Интеграция с сайтом (PHP):
$db = new SQLite3('/path/to/database/reports');
$results = $db->query("SELECT * FROM reports ORDER BY created_at DESC LIMIT 10");
while ($row = $results->fetchArray()) {
echo "Читер: {$row['nick']}, сервер: {$row['hostname']}<br>";
}
Интеграция с Telegram-ботом (Python):
import sqlite3
import requests
conn = sqlite3.connect('database/reports')
cursor = conn.cursor()
cursor.execute("SELECT nick, result_status, hostname, url FROM reports WHERE created_at > datetime('now', '-1 hour')")
new_reports = cursor.fetchall()
for nick, status, host, url in new_reports:
text = f"🆕 Новый репорт!\n👤 {nick}\n📊 {status}\n🖥 {host}\n🔗 {url}"
requests.post(f"https://api.telegram.org/bot<TOKEN>/sendMessage", json={"chat_id": "<CHAT_ID>", "text": text})
Модификация кода для отправки уведомлений в реальном времени
В файле ECDLogger.py внутри метода _process_batch, после успешного сохранения нового отчёта self.db.save(rep) вы можете добавить свой код отправки.
Отправка сообщение через Telegram бота (Python):
# Добавьте эту функцию в начало ECDLogger.py
def send_to_telegram(report):
token = "YOUR_BOT_TOKEN"
chat_id = "YOUR_CHAT_ID"
text = (f"🚨 Новый репорт #{report['report_id']}\n"
f"👤 {report['nick']}\n"
f"⚠️ {report['result_status']}\n"
f"🕐 {report['time']}\n"
f"🌐 {report['hostname']}\n"
f"🔗 {report['url']}")
try:
requests.post(f"https://api.telegram.org/bot{token}/sendMessage",
json={"chat_id": chat_id, "text": text}, timeout=5)
except Exception as e:
logger.error(f"Telegram: {e}")
# В методе _process_batch, после self.db.save(rep) добавьте:
send_to_telegram(rep) # после 200 строки (201)
Отправка на ваш сервер через Webhook (Python):
def send_webhook(report):
import requests
webhook_url = "https://example.com/api/ecd_hook.php" # ссылка на ваш WebHook
payload = {
"report_id": report['report_id'],
"nick": report['nick'],
"status": report['result_status'],
"server": report['hostname'],
"ip": report['user_ip'],
"url": report['url']
}
requests.post(webhook_url, json=payload, timeout=5)
Важно:
- При интеграции не меняйте логику разбора отчётов и работы с БД – это нарушит функциональность
- Все добавления кода делайте только после строки
self.db.save(rep)и доtime.sleep(SCAN_SETTINGS["request_delay"])