Manajemen Proxy
Proxy attach per-client. Tambah / hapus dari pool global, terus redistribusi ke client yang udah dibuat dengan distributeProxies(limit). Default kind-nya SOCKS5 — key-nya entah "ip:port" (tanpa auth) atau "ip:port:user:pass" (pake auth).
addProxy("ip:port") -- tanpa auth
addProxy("ip:port:user:pass") -- dengan auth
removeProxy("ip:port")
getProxies()
distributeProxies(3) -- redistribusi, max 3 client per proxy
Shape Proxy
getProxies() balikin list 1-indexed dari ini. Read-only dari sisi Lua; pake setProxyEnabled / setProxyMaxBots buat ngubah.
| Field | Tipe | Catatan |
|---|---|---|
key | string | Key lookup. Shape-nya sama kayak string yang dikasih ke addProxy() — 4-segment kalau ada auth, 2-segment kalau ngga. |
info | ProxyInfo | Bagian endpoint (ip / port / user). Tarik info.user buat display tanpa expose password. |
pass | string? | Password auth. nil buat proxy tanpa auth. Jangan log ini — round-trip lewat Lua API plaintext. |
enabled | boolean | Apakah registry routing bot lewat proxy ini. |
maxBots | number | Max bot yang bisa claim proxy ini sekaligus. 0 = unbounded. |
max_bots | number | Alias snake-case dari maxBots. Dua-duanya expose value yang sama. |
Shape ProxyInfo
Field info dari Proxy — host/port/user dipisahin biar bisa di-inspect tanpa ikut bawa password.
| Field | Tipe | Catatan |
|---|---|---|
ip | string | Hostname atau alamat IPv4 server proxy. |
port | number | Port TCP. Default SOCKS5 itu 1080. |
user | string? | Username auth. nil buat proxy tanpa auth. |
Globals
addProxy(key)
| Field | Tipe |
|---|---|
| Signature | (key: string) → boolean |
| Returns | true kalau sukses |
| Common errors | raise kalau key-nya malformed ("expected 'ip:port' or 'ip:port:user:pass'", "invalid port") |
| Async | no |
Default kind-nya SOCKS5.
addProxy("1.2.3.4:1080")
addProxy("1.2.3.4:1080:alice:hunter2")
removeProxy(key)
| Field | Tipe |
|---|---|
| Signature | (key: string) → boolean |
| Returns | boolean — true kalau key-nya cocok sama entry yang ada, false kalau ngga |
| Common errors | raise kalau key-nya malformed |
| Async | no |
removeProxy("1.2.3.4:1080:alice:hunter2")
getProxies()
| Field | Tipe |
|---|---|
| Signature | () → {Proxy} |
| Returns | {Proxy} — list 1-indexed semua proxy yang ke-register |
| Async | no |
for i, proxy in ipairs(getProxies()) do
print(proxy.key, proxy.enabled, proxy.maxBots)
print(" ", proxy.info.ip, proxy.info.port, proxy.info.user)
end
distributeProxies(limit)
| Field | Tipe |
|---|---|
| Signature | (limit: number) → number |
| Returns | number — jumlah bot yang dapet assignment proxy |
| Async | yes — yield pas baca list bot dan update assignment proxy per-bot |
Round-robin semua proxy yang enabled ke list bot, ngehormatin limit sebagai cap bot per-proxy (juga di-persist ke field maxBots tiap proxy). Pass 0 buat clear proxy semua bot dan zero-in cap-nya.
local n = distributeProxies(3)
print("ke-assign", n, "bot")
setProxyEnabled(key, enabled)
| Field | Tipe |
|---|---|
| Signature | (key: string, enabled: boolean) → boolean |
| Returns | boolean — true kalau key-nya cocok sama entry yang ada, false kalau ngga |
| Common errors | raise kalau key-nya malformed |
| Async | no |
Toggle apakah registry routing bot lewat key.
setProxyEnabled("1.2.3.4:1080", false) -- disable tanpa hapus
setProxyMaxBots(key, n)
| Field | Tipe |
|---|---|
| Signature | (key: string, n: number) → boolean |
| Returns | boolean — true kalau key-nya cocok sama entry yang ada, false kalau ngga |
| Common errors | raise kalau key-nya malformed |
| Async | no |
Set cap bot per-proxy di key.
setProxyMaxBots("1.2.3.4:1080:alice:hunter2", 5) -- cap 5 client di proxy ini
Iterasi pool yang aktif
for i, proxy in pairs(getProxies()) do
proxy.key -- "ip:port" atau "ip:port:user:pass"
proxy.info.ip
proxy.info.port
proxy.info.user
proxy.pass
proxy.enabled -- di-skip pas distribusi kalau false
proxy.maxBots -- cap per-proxy (0 = unlimited)
end