Script Engine
Jalankan / stop / inspect Lua arbitrer terhadap client manapun. Pakai ini kalau parent script mau spawn child script di bot lain dan mantau jalannya.
Engine-nya itu singleton per bot id — tiap panggil client:scripting() ke client yang sama bakal balik handle yang SAMA, jadi dua skrip bersaudara yang nempel di client yang sama bisa baca state :running() / :error() satu sama lain.
local client = getClient()
local scriptEngine = client:scripting()
scriptEngine:execute(script) -- async; cek :running() / :error()
scriptEngine:stop() -- cek :running()
scriptEngine:running() -- bool
scriptEngine:get() -- source yang lagi associated
scriptEngine:error() -- error terakhir, kalau ada
Constructor
client:scripting()
| Field | Type |
|---|---|
| Signature | (self: Client) → Scripting |
| Returns | Scripting — handle script engine per-bot (singleton per bot id) |
| Async | no |
Methods
scripting:execute(source)
| Field | Type |
|---|---|
| Signature | (self: Scripting, source: string) → () |
| Returns | nothing |
| Common errors | "script already running" (run :execute() sebelumnya masih in-flight) |
| Async | no — return langsung; skrip jalan di task detached |
Compile + run source di SeraphRuntime fresh. Globals/console gak bocor antar run. Panggil :stop() dulu kalau run sebelumnya masih jalan.
local engine = client:scripting()
engine:execute([[
print(getClient().username, "ready")
-- ... rutinitas per-bot
]])
scripting:stop()
| Field | Type |
|---|---|
| Signature | (self: Scripting) → () |
| Returns | nothing |
| Async | no |
Cancel + abort skrip yang in-flight (kalau ada) secara cooperative. Idempotent — aman dipanggil pas gak ada yang jalan.
scripting:running()
| Field | Type |
|---|---|
| Signature | (self: Scripting) → boolean |
| Returns | boolean — true cuma kalau ada skrip lagi execute |
| Async | no |
scripting:get()
| Field | Type |
|---|---|
| Signature | (self: Scripting) → string |
| Returns | string — string source persis dari panggilan :execute() paling baru. String kosong kalau belum pernah jalan |
| Async | no |
scripting:error()
| Field | Type |
|---|---|
| Signature | (self: Scripting) → string? |
| Returns | string? — error runtime terakhir dari :execute() paling baru; nil kalau skrip jalan bersih atau belum pernah dieksekusi |
| Async | no |
Orkestrasi banyak bot
Pasangin sama getClients() untuk parent-script yang drive child run:
for _, b in ipairs(getClients()) do
b:scripting():execute([[
print(getClient().username, "ready")
-- ... rutinitas per-bot
]])
end