модифицируй скрипт чтобы удалял повторяющиеся ip адреса если такие есть "import os
import re
import time

# Папки для отслеживания
directories_to_watch = [
    '/root/servers/block/dumps/logs/copyloveubox',
    '/root/servers/block/dumps/logs/blockade',
    '/root/servers/block/dumps/logs/ddracedeface',
    '/root/servers/block/dumps/logs/hysteria',
    '/root/servers/block/dumps/logs/trainkog'
]

# Файл для записи хороших игроков
output_file = '/root/servers/block/whitelist.cfg'

# Регулярные выражения для поиска никнейма и IP
player_join_regex = re.compile(r"\[.*?\]\[game\]: team_join player='(\d+:\w+)' team=\d+")
ip_check_regex = re.compile(r'\{"ip":"([\d\.]+)".*?\}')

# Функция для загрузки существующих записей из good.txt
def load_existing_entries():
    if os.path.exists(output_file):
        with open(output_file, 'r') as file:
            entries = set(line.strip() for line in file)
            print(f"[DEBUG] Загружено {len(entries)} существующих записей из {output_file}.")
            return entries
    print(f"[DEBUG] Файл {output_file} не найден, создается новый.")
    return set()

# Функция для обработки файла
def process_file(file_path, existing_entries):
    print(f"[DEBUG] Обработка файла: {file_path}")
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            lines = file.readlines()
    except UnicodeDecodeError:
        # Если возникла ошибка декодирования, пробуем другую кодировку
        print(f"[WARNING] Ошибка декодирования файла {file_path}. Попробуем открыть с кодировкой 'latin-1'.")
        with open(file_path, 'r', encoding='latin-1') as file:
            lines = file.readlines()
    
    player_name = None
    player_ip = None
    
    for line in lines:
        # Проверяем, присоединился ли игрок
        join_match = player_join_regex.search(line)
        if join_match:
            player_name = join_match.group(1).split(':')[1]  # Извлекаем никнейм
            print(f"[DEBUG] Игрок {player_name} присоединился.")

        # Проверяем IP адрес
        ip_match = ip_check_regex.search(line)
        if ip_match:
            player_ip = ip_match.group(1)  # Извлекаем IP адрес
            print(f"[DEBUG] IP адрес игрока: {player_ip}")

        # Проверяем, был ли игрок забанен за VPN
        if player_name and player_ip:
            if "[server]: client dropped" in line and "VPN detected" in line:
                print(f"[DEBUG] Игрок {player_name} с IP {player_ip} был забанен за использование VPN.")
                player_name = None
                player_ip = None  # Сбрасываем, если игрок был забанен
            else:
                # Формат записи
                entry = f'whitelist_add "{player_ip}" "{player_name}-Freenter"'
                # Проверяем, существует ли запись
                if entry not in existing_entries:
                    with open(output_file, 'a') as output:
                        output.write(f'{entry}\n')
                    existing_entries.add(entry)  # Добавляем запись в множество
                    print(f"[DEBUG] Запись добавлена в {output_file}: {entry}")
                else:
                    print(f"[DEBUG] Запись уже существует в {output_file}: {entry}")
                player_name = None
                player_ip = None  # Сбрасываем после записи

# Основной цикл для отслеживания файлов
def watch_directories():
    processed_files = set()
    existing_entries = load_existing_entries()  # Загружаем существующие записи
    
    while True:
        print("[DEBUG] Начинаем проверку директорий...")
        for directory in directories_to_watch:
            if not os.path.exists(directory):
                print(f"[ERROR] Директория не найдена: {directory}")
                continue
            
            for filename in os.listdir(directory):
                if filename.endswith('.txt'):  # Измените на нужное расширение файла
                    file_path = os.path.join(directory, filename)
                    if file_path not in processed_files:
                        process_file(file_path, existing_entries)
                        processed_files.add(file_path)
                    else:
                        print(f"[DEBUG] Файл уже обработан: {file_path}")
        
        time.sleep(10)  # Задержка перед следующей проверкой

if __name__ == "__main__":
    watch_directories()

"