diff options
author | terminaldweller <devi@terminaldweller.com> | 2024-06-03 19:09:41 +0000 |
---|---|---|
committer | terminaldweller <devi@terminaldweller.com> | 2024-06-03 19:09:41 +0000 |
commit | f8738b563757158c8fe6ffe77d4cdc5dad1e2a62 (patch) | |
tree | ecb361b2fa330462ea9895b92f84dcf388afb48a /plugins | |
parent | some cleanup (diff) | |
download | milla-f8738b563757158c8fe6ffe77d4cdc5dad1e2a62.tar.gz milla-f8738b563757158c8fe6ffe77d4cdc5dad1e2a62.zip |
first lua script, WIP, rss script incoming
Diffstat (limited to '')
-rw-r--r-- | plugins.go | 38 | ||||
-rw-r--r-- | plugins/test.lua | 13 |
2 files changed, 33 insertions, 18 deletions
@@ -1,11 +1,10 @@ package main import ( - "fmt" "log" - "os" "reflect" + "github.com/lrstanley/girc" lua "github.com/yuin/gopher-lua" ) @@ -180,33 +179,36 @@ func RegisterCustomLuaTypes(luaState *lua.LState) { registerStructAsLuaMetaTable[LogModel](luaState, checkStruct, LogModel{}, "log_model") } -func returnAllPlugins(pluginPath string) ([]string, error) { - pluginList := make([]string, 0) +func sendMessageClosure(luaState *lua.LState, client *girc.Client) func(*lua.LState) int { + return func(luaState *lua.LState) int { + message := luaState.CheckString(1) + target := luaState.CheckString(2) - files, err := os.ReadDir(pluginPath) - if err != nil { - return pluginList, fmt.Errorf("Error reading plugins directory: %v", err) - } + client.Cmd.Message(target, message) - for _, file := range files { - pluginList = append(pluginList, file.Name()) + return 0 } - - return pluginList, nil } -func LoadAllPlugins(appConfig *TomlConfig) { +func RunScript(scriptPath string, client *girc.Client) { luaState := lua.NewState() defer luaState.Close() RegisterCustomLuaTypes(luaState) - allPlugins, err := returnAllPlugins(appConfig.PluginPath) - if err != nil { - luaState.Close() + luaState.SetGlobal("send_message", luaState.NewFunction(sendMessageClosure(luaState, client))) - log.Fatal(err) //nolint: gocritic + log.Print("Running script: ", scriptPath) + err := luaState.DoFile(scriptPath) + + if err != nil { + log.Print(err) } +} - log.Println(allPlugins) +func LoadAllPlugins(appConfig *TomlConfig, client *girc.Client) { + for _, scriptPath := range appConfig.Plugins { + log.Print("Loading plugin: ", scriptPath) + go RunScript(scriptPath, client) + } } diff --git a/plugins/test.lua b/plugins/test.lua new file mode 100644 index 0000000..23eab94 --- /dev/null +++ b/plugins/test.lua @@ -0,0 +1,13 @@ +local function sleep(n) + local t0 = os.clock() + while os.clock() - t0 <= n do end +end + +local function printer() + while true do + send_message("Hello, World!", "#warroom") + sleep(5) + end +end + +printer() |