{
    "users": [
        {
            "id": 7035424483,
            "username": "ghhhhhhhhhhhhlg",
            "is_admin": false,
            "servers": [],
            "balance": 6000
        },
        {
            "id": 7577326891,
            "username": "vegehg",
            "is_admin": false,
            "servers": [],
            "balance": 0
        }
    ],
    "server_counter": 0,
    "support_tickets": []
}



вот база данных



<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Управление серверами</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <header>
        <h1>Панель управления серверами</h1>
        <nav>
            <ul>
                <li><a href="#servers">Управление серверами</a></li>
                <li><a href="#server-plans">Тарифные планы</a></li>
                <li><a href="#support">Поддержка</a></li>
                <li><a href="#admin">Администрирование</a></li>
            </ul>
        </nav>
    </header>
    <main>
        <section id="servers">
            <h2>Управление серверами</h2>
            <div class="server-list"></div>
            <button id="manage-servers-btn">Управлять серверами</button>
        </section>
        <section id="server-plans">
            <h2>Тарифные планы</h2>
            <div class="server-plans"></div>
        </section>
        <section id="support">
            <h2>Поддержка</h2>
            <div class="support-tickets"></div>
        </section>
        <section id="admin">
            <h2>Администрирование</h2>
            <div class="admin-panel"></div>
        </section>
    </main>
    <script src="script.js"></script>
</body>
</html>



вот html код



body {
    font-family: Arial, sans-serif;
    margin: 0;
    padding: 0;
}

header {
    background-color: #333;
    color: #fff;
    padding: 10px;
    text-align: center;
}

nav {
    background-color: #444;
    color: #fff;
    display: flex;
    justify-content: center;
}

nav ul {
    list-style: none;
    padding: 0;
    display: flex;
}

nav li {
    margin: 0 20px;
}

nav a {
    text-decoration: none;
    color: #fff;
}

main {
    padding: 20px;
}

section {
    margin-bottom: 20px;
}

button {
    padding: 10px 20px;
    background-color: #4CAF50;
    color: #fff;
    border: none;
    cursor: pointer;
}

button:hover {
    background-color: #45a049;
}



вот css код



const serverList = document.querySelector('.server-list');
const serverPlans = document.querySelector('.server-plans');
const supportTickets = document.querySelector('.support-tickets');
const adminPanel = document.querySelector('.admin-panel');

const manageServersBtn = document.getElementById('manage-servers-btn');

// Функция для отправки запроса на сервер
function sendRequest(url, method, data) {
    return new Promise((resolve, reject) => {
        const xhr = new XMLHttpRequest();
        xhr.open(method, url, true);
        xhr.onload = () => {
            if (xhr.status === 200) {
                resolve(JSON.parse(xhr.responseText));
            } else {
                reject(new Error(xhr.statusText));
            }
        };
        xhr.onerror = () => {
            reject(new Error('Ошибка сети'));
        };
        if (method === 'POST' || method === 'PUT') {
            xhr.setRequestHeader('Content-Type', 'application/json');
            xhr.send(JSON.stringify(data));
        } else {
            xhr.send();
        }
    });
}

// Функция для регистрации пользователя
function registerUser() {
    const username = prompt('Введите имя пользователя:');
    if (username) {
        sendRequest('/register', 'POST', { username })
            .then(response => {
                alert(response.message);
            })
            .catch(error => {
                alert(error.message);
            });
    }
}

// Функция для управления серверами
function manageServers() {
    const username = prompt('Введите имя пользователя:');
    if (username) {
        sendRequest('/manage_servers', 'POST', { username })
            .then(response => {
                const serverListHTML = response.servers.map(server => `
                    <div class="server">
                        <p>ID: ${server.id}</p>
                        <p>Название: ${server.name}</p>
                        <p>Статус: ${server.status}</p>
                    </div>
                `).join('');
                serverList.innerHTML = serverListHTML;
            })
            .catch(error => {
                alert(error.message);
            });
    }
}

// Функция для получения тарифных планов
function getServerPlans() {
    sendRequest('/server_plans', 'GET')
        .then(response => {
            const serverPlansHTML = response.map(plan => `
                <div class="server-plan">
                    <p>Имя: ${plan.name}</p>
                    <p>Характеристики: ${plan.specs}</p>
                    <p>Цена: ${plan.price}</p>
                </div>
            `).join('');
            serverPlans.innerHTML = serverPlansHTML;
        })
        .catch(error => {
            alert(error.message);
        });
}

// Функция для получения поддержки
function getSupportTickets() {
    const username = prompt('Введите имя пользователя:');
    if (username) {
        sendRequest('/support_tickets', 'GET', { username })
            .then(response => {
                const supportTicketsHTML = response.map(ticket => `
                    <div class="support-ticket">
                        <p>ID: ${ticket.id}</p>
                        <p>Статус: ${ticket.status}</p>
                        <p>Вопрос: ${ticket.question}</p>
                    </div>
                `).join('');
                supportTickets.innerHTML = supportTicketsHTML;
            })
            .catch(error => {
                alert(error.message);
            });
    }
}

// Функция для администрирования
function adminPanel() {
    const adminUsername = prompt('Введите имя администратора:');
    if (adminUsername) {
        sendRequest('/admin_panel', 'POST', { admin_username: adminUsername })
            .then(response => {
                const adminPanelHTML = `
                    <div class="admin-action">
                        <p>Действие: ${response.action}</p>
                        <p>Сообщение: ${response.message}</p>
                    </div>
                `;
                adminPanel.innerHTML = adminPanelHTML;
            })
            .catch(error => {
                alert(error.message);
            });
    }
}

// Обработчики событий для кнопок
manageServersBtn.addEventListener('click', manageServers);

// Инициализация
registerUser();
manageServers();
getServerPlans();
getSupportTickets();
adminPanel();



вот js код



from flask import Flask, render_template, request, jsonify
from flask_socketio import SocketIO, emit
import json
import random
import time

app = Flask(__name__)
socketio = SocketIO(app)

# Загрузка данных из db.json
with open('db.json', 'r') as file:
    data = json.load(file)

# Регистрация пользователя
@app.route('/register', methods=['POST'])
def register_user():
    username = request.json.get('username')
    if username not in data['users']:
        data['users'][username] = {'servers': [], 'balance': 0, 'tickets': []}
        save_data()
        return jsonify({'message': 'Пользователь зарегистрирован успешно.'})
    return jsonify({'error': 'Пользователь уже существует.'})

# Управление серверами
@app.route('/manage_servers', methods=['POST'])
def manage_servers():
    username = request.json.get('username')
    if username in data['users']:
        user_servers = data['users'][username]['servers']
        server_id = request.json.get('server_id')
        if server_id:
            for server in user_servers:
                if server['id'] == int(server_id):
                    server['status'] = 'running' if server['status'] == 'stopped' else 'stopped'
                    save_data()
                    return jsonify({'message': f"Статус сервера {server['name']} изменен."})
        return jsonify({'error': 'Неверный ID сервера.'})
    return jsonify({'error': 'Пользователь не найден.'})

# Тарифные планы и покупка серверов
@app.route('/server_plans', methods=['GET'])
def server_plans():
    return jsonify(data['server_plans'])

# Автопродление
@app.route('/auto_renew', methods=['POST'])
def auto_renew():
    username = request.json.get('username')
    if username in data['users']:
        user_servers = data['users'][username]['servers']
        for server in user_servers:
            if server['status'] == 'running' and server['auto_renew']:
                server['status'] = 'stopped'
                server['status'] = 'running'
                save_data()
                return jsonify({'message': f"Сервер {server['name']} автоматически продлен."})
        return jsonify({'error': 'Нет серверов для автопродления.'})
    return jsonify({'error': 'Пользователь не найден.'})

# Управление паролями
@app.route('/manage_passwords', methods=['POST'])
def manage_passwords():
    username = request.json.get('username')
    if username in data['users']:
        user_servers = data['users'][username]['servers']
        for server in user_servers:
            server['password'] = random.randint(1000, 9999)
        save_data()
        return jsonify({'message': 'Пароли для серверов обновлены.'})
    return jsonify({'error': 'Пользователь не найден.'})

# Поддержка пользователей
@app.route('/support_tickets', methods=['GET'])
def support_tickets():
    username = request.json.get('username')
    if username in data['users']:
        user_tickets = data['users'][username]['tickets']
        return jsonify(user_tickets)
    return jsonify({'error': 'Пользователь не найден.'})

# Администрирование
@app.route('/admin_panel', methods=['POST'])
def admin_panel():
    admin_username = request.json.get('admin_username')
    if admin_username in data['admins']:
        action = request.json.get('action')
        if action == 'freeze_unfreeze':
            server_id = request.json.get('server_id')
            user_username = request.json.get('user_username')
            if user_username in data['users']:
                user_servers = data['users'][user_username]['servers']
                for server in user_servers:
                    if server['id'] == int(server_id):
                        if server['status'] == 'running':
                            server['status'] = 'frozen'
                        else:
                            server['status'] = 'running'
                        save_data()
                        return jsonify({'message': f"Статус сервера {server['name']} изменен."})
                return jsonify({'error': 'Неверный ID сервера.'})
            return jsonify({'error': 'Пользователь не найден.'})
        return jsonify({'error': 'Неверное действие.'})
    return jsonify({'error': 'Текущий пользователь не является администратором.'})

# Сохранение данных в db.json
def save_data():
    with open('db.json', 'w') as file:
        json.dump(data, file, indent=4)

if __name__ == '__main__':
    socketio.run(app)



вот серверная часть



Основные функции бота включают:


Регистрация пользователей: Бот регистрирует новых пользователей при их первом взаимодействии с ботом.
Меню и навигация: Пользователи могут использовать кнопки в меню для навигации по различным функциям бота, включая управление серверами, просмотр профиля, доступ к магазину и поддержку.
Управление серверами: Пользователи могут создавать, запускать, останавливать, перезагружать и удалять серверы. Бот предоставляет подробную информацию о серверах, включая характеристики, статус и настройки.
Тарифные планы и покупка серверов: Пользователи могут выбрать тарифные планы для своих серверов, просмотреть их характеристики и цены. Бот позволяет покупать серверы, используя баланс пользователя.
Автопродление: Пользователи могут включить или отключить автопродление для своих серверов, чтобы автоматически продлевать срок их действия.
Управление паролями: Бот генерирует случайные пароли для серверов и предоставляет их пользователям.
Поддержка пользователей: Система поддержки позволяет пользователям создавать тикеты, задавать вопросы и получать ответы от администраторов. Администраторы могут просматривать и отвечать на тикеты, а также управлять ими.
Администрирование: Администраторы имеют доступ к дополнительным функциям, таким как назначение пользователей в администраторы, удаление пользователей из администраторов, выдача баланса пользователям, просмотр всех серверов пользователей и управление ими.
Заморозка и разморозка серверов: Администраторы могут замораживать и разморозку серверы, а также управлять их статусом.
Ограничение по частоте запросов: Бот ограничивает частоту запросов от одного пользователя, чтобы предотвратить злоупотребления и обеспечить стабильную работу.
Логирование: Бот ведет подробное логирование всех действий и ошибок для отслеживания и анализа.
Билинг и оплата: Бот осуществляет ежемесячную проверку баланса пользователей и оплаты серверов. Если у пользователя недостаточно средств, сервер замораживается.
Удаление замороженных серверов: Бот автоматически удаляет замороженные серверы, которые оставались в таком состоянии более трех дней.

В целом, этот код создает комплексный бот для управления серверами и поддержки пользователей, предоставляя удобный и интуитивно понятный интерфейс для взаимодействия с пользователями.



а вот твоя задача, улучши код, напиши все нужны файлы, пжпжпжпжппжж