есть скрипт"import socket
import re
import time
import argparse
import threading
import os  # Импорт для проверки существования файла

# Функция для загрузки команд из файла
def load_commands(filename):
    if filename and not os.path.isfile(filename):  # Проверка, существует ли файл
        print(f"WARNING: Файл команд '{filename}' не найден. Будет запущено без команд.")
        return []  # Возвращаем пустой список, если файл не найден
    elif filename is None or filename == "":
        return []  # Возвращаем пустой список, если передан None или пустая строка

    with open(filename, 'r') as file:
        return [line.strip() for line in file if line.strip()]

# Загружаем целевые сообщения из файла
def load_target_messages(filename):
    if not os.path.isfile(filename):  # Проверяем, существует ли файл
        raise FileNotFoundError(f"ERROR: Файл целевых сообщений '{filename}' не найден.")

    with open(filename, 'r') as file:
        return [line.strip() for line in file if line.strip()]

# Подключение к серверу
def connect_to_econ(host, port, password):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    while True:
        try:
            s.connect((host, port))
            print(f"Подключено к серверу {host}:{port}")
            s.sendall((password + '\n').encode())
            time.sleep(1)  # Небольшая пауза для обработки
            return s
        except Exception as e:
            print(f"ERROR: Не удалось подключиться к {host}:{port}: {e}. Попробуйте снова через 5 секунд.")
            time.sleep(5)

# Отправка команды на сервер
def send_command(sock, command):
    sock.sendall((command + '\n').encode('utf-8'))
    print(f"Команда отправлена: {command}")
    time.sleep(60)  # Ожидание перед следующей командой

# Основная функция для работы с одним сервером
def server_handler(host, port, password, target_messages_file, commands_file):
    try:
        TARGET_MESSAGES = load_target_messages(target_messages_file)
    except FileNotFoundError as e:
        print(e)
        return  # Если файл не найден, просто выход из функции

    last_processed_time = {}
    REPROCESS_INTERVAL = 600

    # Загружаем команды из файла
    commands = load_commands(commands_file)
    command_index = 0

    s = connect_to_econ(host, port, password)

    while True:
        try:
            data = s.recv(4096)
            if not data:
                print(f"WARNING: Соединение с {host}:{port} потеряно. Пытаюсь переподключиться...")
                s.close()
                s = connect_to_econ(host, port, password)
                continue

            message = data.decode('utf-8')
            print(f"[{host}:{port}] Получено сообщение: {message.strip()}")

            # Проверка целевых сообщений
            for target_message in TARGET_MESSAGES:
                # Проверка на whisper
                whisper_pattern = re.compile(r'\[whisper\]: (\d+):\d+:.*? -> \d+:.*?:.*' + re.escape(target_message) + r'.*', re.IGNORECASE)
                whisper_match = whisper_pattern.search(message)

                # Проверка общего сообщения
                general_pattern = re.compile(
                    r'\[chat\]: (\d+):\d+:[^:]+(?:<[^>]+>)?:\s.*' + re.escape(target_message) + r'.*', re.IGNORECASE
                )
                general_match = general_pattern.search(message)

                if whisper_match or general_match:
                    player_id = whisper_match.group(1) if whisper_match else general_match.group(1)
                    current_time = time.time()

                    if player_id in last_processed_time:
                        elapsed_time = current_time - last_processed_time[player_id]
                        if elapsed_time < REPROCESS_INTERVAL:
                            continue

                    last_processed_time[player_id] = current_time

                    # Команда ареста
                    command_to_send = f'jail_arrest {player_id} 1200;say Читер арестован;sound 19;sendmotd {player_id} 0 Ты был арестован за читы. ВОЗМОЖНЫЕ ПРИЧИНЫ АРЕСТА: 1. Нечестная игра. 2. Ты пользуешься KRX клиентом. 3. Рекламируешь читы. 4. Не используешь чистый DDNet клиент. 5. Шутишь/говоришь за читы. Если ты сюда попал то по факту. Античит работает в автономном режиме\n'
                    s.sendall(command_to_send.encode())
                    print(f"[{host}:{port}] Отправлено: {command_to_send.strip()}")

            # Отправка команд из списка
            if commands:  # Проверяем, не пуст ли список команд
                if command_index < len(commands):
                    send_command(s, commands[command_index])
                    command_index += 1
                    if command_index >= len(commands):
                        command_index = 0  # Сброс индекса для повторной отправки команд

        except (socket.error, Exception) as e:
            print(f"ERROR: Произошла ошибка с {host}:{port}: {e}. Пытаюсь переподключиться...")
            s.close()
            s = connect_to_econ(host, port, password)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Подключение к ECON серверам')
    parser.add_argument('--hosts', type=str, nargs='+', required=True, help='Список IP-адресов серверов')
    parser.add_argument('--ports', type=int, nargs='+', required=True, help='Список портов серверов')
    parser.add_argument('--password', type=str, default='2000ublocker', help='Пароль к серверу ECON')
    parser.add_argument('--target_messages_file', type=str, required=True, help='Путь к файлу с целевыми сообщениями')
    parser.add_argument('--commands_files', type=str, nargs='+', required=True, help='Список файлов с командами для каждого сервера')

    args = parser.parse_args()

    # Проверяем, что количество хостов, портов и файлов с командами совпадает
    if len(args.hosts) != len(args.ports) or len(args.hosts) != len(args.commands_files):
        print("ERROR: Количество хостов, портов и файлов с командами должно совпадать.")
        exit(1)

    # Создаем и запускаем потоки для каждого сервера
    threads = []
    for host, port, commands_file in zip(args.hosts, args.ports, args.commands_files):
        thread = threading.Thread(target=server_handler, args=(host, port, args.password, args.target_messages_file, commands_file))
        thread.start()
        threads.append(thread)

    # Ждем завершения всех потоков
    for thread in threads:
        thread.join()
" . Нужно его модифицировать и добавить новые функции. Есть строчки которые нужно отслеживать вот пример "[2024-12-16 18:48:56][server]: player has entered the game. ClientID=41 addr=<{188.165.192.99:50828}>
[2024-12-16 18:48:56][game]: team_join player='41:5871' team=0
[2024-12-16 18:48:56][chat]: *** '5871' entered and joined the game" Где 41 - это id, addr- это ip, 5871 это никнейм. Нужно чтобы при появлении этих строк  с определенными параметрами была использована команда в данном случае ban 188.165.192.99. Срабатывала в том случае когда будет какой то специфическое имя которое надо считывать из файла. Если имя состоит из цифр или только из цифр автоматом выводить команду в бан