Lewati ke konten utama

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()

FieldType
Signature(self: Client) → Scripting
ReturnsScripting — handle script engine per-bot (singleton per bot id)
Asyncno

Methods

scripting:execute(source)

FieldType
Signature(self: Scripting, source: string) → ()
Returnsnothing
Common errors"script already running" (run :execute() sebelumnya masih in-flight)
Asyncno — 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()

FieldType
Signature(self: Scripting) → ()
Returnsnothing
Asyncno

Cancel + abort skrip yang in-flight (kalau ada) secara cooperative. Idempotent — aman dipanggil pas gak ada yang jalan.

scripting:running()

FieldType
Signature(self: Scripting) → boolean
Returnsbooleantrue cuma kalau ada skrip lagi execute
Asyncno

scripting:get()

FieldType
Signature(self: Scripting) → string
Returnsstring — string source persis dari panggilan :execute() paling baru. String kosong kalau belum pernah jalan
Asyncno

scripting:error()

FieldType
Signature(self: Scripting) → string?
Returnsstring? — error runtime terakhir dari :execute() paling baru; nil kalau skrip jalan bersih atau belum pernah dieksekusi
Asyncno

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