Skrypty -- Pierwsze kroki

repartee obsługuje skrypty Lua 5.4 z bogatym API wzorowanym na WeeChat, irssi i kokoirc.

Lokalizacja skryptów

Skrypty użytkownika znajdują się w ~/.repartee/scripts/ jako pliki .lua. Repartee przeszukuje także dołączone skrypty (takie jak keepnick, slap i hello) w katalogu instalacyjnym (scripts/).

Format skryptu

Każdy skrypt składa się z dwóch części: tablicy meta i funkcji setup:

meta = {
    name = "hello",
    version = "1.0",
    description = "A simple greeting script"
}

function setup(api)
    api.on("irc.join", function(event)
        if event.nick ~= api.store.our_nick() then
            api.irc.say(event.channel, "Welcome, " .. event.nick .. "!")
        end
    end)

    api.log("Hello script loaded!")

    -- Return a cleanup function (optional)
    return function()
        api.log("Hello script unloaded")
    end
end

Tablica meta

PoleTypWymaganeOpis
namestringTakNazwa skryptu (używana przy ładowaniu/wyładowywaniu)
versionstringNieCiąg wersji
descriptionstringNieKrótki opis

Funkcja setup(api)

Wywoływana podczas ładowania skryptu. Otrzymuje obiekt api ze wszystkimi możliwościami skryptowania. Opcjonalnie może zwrócić funkcję czyszczącą, która jest uruchamiana przy wyładowaniu.

Ładowanie skryptów

/script load hello
/script load keepnick
/script unload hello
/script reload hello
/script list

Automatyczne ładowanie i trwałe ustawienia skryptów

Dodaj nazwy skryptów do konfiguracji, aby ładować je automatycznie przy uruchomieniu:

[scripts]
autoload = ["hello", "keepnick", "urllogger"]

Skrypty wywołujące api.config.set(key, value) automatycznie zapisują swoje ustawienia w config.toml w sekcji [scripts.values.<nazwa_skryptu>] pomiędzy przeładowaniami i restartami klienta.

Sandboxing

Skrypty działają w izolowanym środowisku Lua. Następujące zmienne globalne są usunięte ze względów bezpieczeństwa:

  • os -- brak dostępu do systemu plików/procesów
  • io -- brak operacji wejścia/wyjścia na plikach
  • loadfile, dofile -- brak dowolnego wykonywania plików
  • package -- brak ładowania modułów

Skrypty są izolowane od siebie -- każdy otrzymuje własne środowisko Lua.

Następne kroki