Skip to content
Hosting · Cấu hình máy chủ

API máy chủ cho bot

API client của Millida Hosting: cấp khóa, quyền, quản lý máy chủ và truyền console từ bot hoặc script của riêng bạn.

Cập nhật 13 tháng 10, 2026

Mọi thứ bảng điều khiển làm được đều có thể thực hiện từ mã của bạn: khởi động máy chủ theo lịch, hiển thị trạng thái trong Discord, gửi lệnh từ bot.

Key

API khả dụng trên mọi gói trả phí — cùng nơi với tệp, SFTP và quyền truy cập nhóm. Trên gói miễn phí, key không được cấp: key cũng là quyền truy cập chung, chỉ dành cho bot.

Mục “Người chơi và quyền truy cập” → “API key” → “Cấp”. Hãy kiểm tra key được phép làm gì — các quyền giống như đối với quyền truy cập chung.

Key chỉ được hiển thị một lần: chúng tôi chỉ lưu dấu vân tay của nó. Nếu bạn làm mất, hãy cấp key mới và thu hồi key cũ.

Key được truyền trong header Authorization: Bearer mhk_live_....

Phương thức

URL cơ sở — https://millida.net/v2/hosting/api.

Phương thứcChức năngQuyền cần có
GET /serverThẻ máy chủconsole
GET /statusTrạng thái và số người onlineconsole
POST /startKhởi độngstart
POST /stopDừngstart
POST /restartKhởi động lạistart
POST /commandLệnh tới consoleconsole
GET /consoleLog trực tiếp (SSE)console
GET /files?path=Liệt kê tệpfiles
GET /files/configsNhững config nào được biểu mẫu đọcfiles
GET /files/config?path=Cài đặt tệp kèm kiểufiles
POST /files/configThay đổi cài đặt tệpfiles
GET /backupsLiệt kê bản sao lưubackups
POST /backupsTạo bản sao lưubackups
GET /antibotCài đặt anti-bot, backend và quy tắc tường lửaprotection
PUT /antibotThay đổi cài đặt bảo vệprotection
GET /antibot/overview?range=Kết nối và lượt từ chối cho hour, day hoặc weekprotection
POST /antibot/backendsThêm backend {"address":"host:port","label":"..."}protection
DELETE /antibot/backends/{id}Xóa backendprotection
POST /antibot/rulesQuy tắc tường lửa {"kind":"allow"|"deny","cidr":"1.2.3.0/24"}protection
DELETE /antibot/rules/{id}Xóa quy tắcprotection
POST /antibot/verify-domain/checkKiểm tra DNS cho tên miền trang xác minh của bạnprotection

Ví dụ: khởi động máy chủ và chờ nó online

KEY="mhk_live_xxx"
API="https://millida.net/v2/hosting/api"

curl -sX POST "$API/start" -H "Authorization: Bearer $KEY"

until curl -s "$API/status" -H "Authorization: Bearer $KEY" | grep -q RUNNING; do
  sleep 5
done
echo "server online"

Bản sao lưu được tạo ở chế độ nền

POST /backups trả về {"id":"..."} ngay lập tức, còn bản lưu trữ được tạo trên node: một thế giới vài gigabyte mất vài phút. Kiểm tra mức sẵn sàng trong GET /backups qua trường status: pending — vẫn đang được tạo, ready — đã lưu trong kho (lúc đó mới có sizeMb thật), failed — tạo thất bại.

ID=$(curl -sX POST "$API/backups" -H "Authorization: Bearer $KEY" | jq -r .id)

until curl -s "$API/backups" -H "Authorization: Bearer $KEY" \
  | jq -e --arg id "$ID" '.[] | select(.id==$id) | select(.status=="ready")' >/dev/null; do
  sleep 15
done
echo "backup ready"

Trong khi một bản sao lưu đang chạy, bạn không thể tạo bản thứ hai trên cùng máy chủ — node thực hiện lần lượt từng bản.

Console trực tiếp

GET /console trả về luồng Server-Sent Events: mỗi dòng đến với tiền tố data:. Không cần WebSocket — SSE đi qua mọi proxy.

Những điều bạn nên biết

  • Mọi hành động của key đều được ghi log trong log máy chủ với tác giả “API key N”. Đây chính xác là thứ bạn cần khi cả người và bot cùng vận hành máy chủ.
  • Giới hạn tần suất được tính theo từng key, không theo địa chỉ: đổi IP không vượt được giới hạn, và người hàng xóm trên mạng văn phòng không tiêu tốn hạn mức của bạn. Hạn mức thoải mái cho tự động hóa thông thường, nhưng hỏi trạng thái mỗi giây sẽ chạm giới hạn — mỗi 10–15 giây là đủ. Luồng console có thể mở tối đa mười lần mỗi phút: hãy giữ một kết nối thay vì mở kết nối mới cho mỗi tin nhắn.
  • Key ngừng hoạt động ngay lập tức nếu máy chủ bị tạm ngưng hoặc gói không còn được thanh toán. Bạn không cần thu hồi thủ công vì điều đó.
  • Tối đa năm key mỗi máy chủ. Hãy thu hồi những key bạn không cần.

Bảo vệ anti-bot

GET /antibot trả về cài đặt trong hai trường. config — cài đặt riêng của máy chủ; cho đến khi chúng tồn tại thì là null, và máy chủ được bảo vệ theo mặc định (trường default). effective luôn hiện diện: đây là cài đặt đang có hiệu lực hoặc mà máy chủ sẽ bắt đầu dùng sau lần chỉnh sửa đầu tiên — hãy đọc giá trị từ nó.

PUT /antibot chỉ chấp nhận những trường bạn muốn thay đổi:

curl -sX PUT "$API/antibot" -H "Authorization: Bearer $KEY"   -H 'Content-Type: application/json'   -d '{"preset":"balanced"}'

Các mức (preset): off, under_attack, balanced, aggressive, custom. Mức tự mở rộng thành các giá trị kiểm tra, nên để cấu hình thủ công hãy chọn custom và gửi các kiểm tra: checkCaptcha, checkPhysics, checkKeepAlive, checkTeleport, checkBrand, checkPing, checkTransfer, checkClientSettings — mỗi cái là off, under_attack hoặc always. Danh sách địa chỉ (vpnMode, datacenterMode, torMode) — off, log hoặc block. Bộ lọc địa lý — geoMode (off, allow, deny) và geoCountries (mã quốc gia, ví dụ ["RU","BY"]).

Bí mật chuyển tiếp không được cấp hay thay đổi qua API: nó chỉ hiển thị cho chủ sở hữu trong bảng điều khiển.

Cài đặt config

GET /files/config?path=server.properties trả về tệp đã được phân tích — mỗi mục kèm kiểu, giá trị hiện tại và cờ “cần khởi động lại”:

{
  "path": "server.properties",
  "format": "properties",
  "options": [
    { "key": "pvp", "type": "boolean", "value": "true", "owner": "sync", "requiresRestart": false },
    { "key": "difficulty", "type": "select", "value": "normal", "values": ["peaceful", "easy", "normal", "hard"], "owner": "sync", "requiresRestart": false },
    { "key": "server-port", "type": "integer", "value": "25565", "owner": "platform", "requiresRestart": true }
  ]
}

owner cho biết có thể làm gì với mục: platform — giá trị do hosting đặt, chỉnh sửa bị từ chối; sync — mục tồn tại cả trong bảng điều khiển lẫn trong tệp; file — chỉ tệp biết về nó.

Thao tác ghi chỉ thay đổi những key bạn gửi; mọi thứ khác trong tệp vẫn nguyên vẹn:

curl -sX POST "$API/files/config" -H "Authorization: Bearer $KEY"   -H 'Content-Type: application/json'   -d '{"path":"server.properties","values":{"pvp":"false","difficulty":"hard"}}'

Biểu mẫu đọc .properties, .yml/.yaml và .toml — kể cả config plugin mà bảng điều khiển không hề biết: kiểu trường được suy ra từ giá trị. Các key lồng nhau được địa chỉ hóa bằng dấu chấm: settings.bungeecord, advanced.compression-threshold.

Toàn bộ tệp vẫn khả dụng qua GET/PUT /files/content?path= — cả hai đường dẫn đều ghi vào cùng một nơi.

Client có sẵn trong Node.js và Python

Dưới đây là một client tối giản: nó kiểm tra trạng thái, khởi động máy chủ và ghi vào chat. Khóa được lấy từ biến môi trường MILLIDA_KEY — đừng dán nó vào mã nguồn rồi bị đẩy lên git. Phản hồi lỗi là JSON với trường message; đó là thứ bot của bạn nên ghi log.

Node.js 18+ (fetch tích hợp sẵn):

const API = 'https://millida.net/v2/hosting/api';
const KEY = process.env.MILLIDA_KEY;

async function call(method, path, body) {
  const res = await fetch(`${API}${path}`, {
    method,
    headers: { Authorization: `Bearer ${KEY}`, 'Content-Type': 'application/json' },
    body: body ? JSON.stringify(body) : undefined,
  });
  if (!res.ok) throw new Error(`${method} ${path}: ${res.status} ${await res.text()}`);
  return res.status === 204 ? null : res.json();
}

const status = await call('GET', '/status');
if (status.status !== 'RUNNING') await call('POST', '/start');
await call('POST', '/command', { command: 'say Hello from the bot' });

Python 3 với thư viện requests, kèm đọc console trực tiếp:

import os
import requests

API = "https://millida.net/v2/hosting/api"
session = requests.Session()
session.headers["Authorization"] = f"Bearer {os.environ['MILLIDA_KEY']}"

def call(method, path, body=None):
    res = session.request(method, API + path, json=body, timeout=15)
    res.raise_for_status()
    return res.json() if res.content else None

status = call("GET", "/status")
if status["status"] != "RUNNING":
    call("POST", "/start")
call("POST", "/command", {"command": "say Hello from the bot"})

with session.get(API + "/console", stream=True, timeout=None) as stream:
    for line in stream.iter_lines(decode_unicode=True):
        if line and line.startswith("data:"):
            print(line[5:].strip())
Hosting MinecraftMáy chủ của bạn chạy khi bạn offlineTạo máy chủ