aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main.go2
-rw-r--r--plugins.go38
-rw-r--r--plugins/test.lua13
-rw-r--r--types.go2
4 files changed, 36 insertions, 19 deletions
diff --git a/main.go b/main.go
index 16f249c..ad5096d 100644
--- a/main.go
+++ b/main.go
@@ -1046,6 +1046,8 @@ func runIRC(appConfig TomlConfig) {
chatGPTHandler(irc, &appConfig, &GPTMemory)
}
+ go LoadAllPlugins(&appConfig, irc)
+
if appConfig.DatabaseAddress != "" {
context, cancel := context.WithTimeout(context.Background(), time.Duration(appConfig.RequestTimeout)*time.Second)
defer cancel()
diff --git a/plugins.go b/plugins.go
index fadc717..fa02615 100644
--- a/plugins.go
+++ b/plugins.go
@@ -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()
diff --git a/types.go b/types.go
index e068c70..ded95ec 100644
--- a/types.go
+++ b/types.go
@@ -47,7 +47,7 @@ type TomlConfig struct {
WebIRCGateway string `toml:"webIRCGateway"`
WebIRCHostname string `toml:"webIRCHostname"`
WebIRCAddress string `toml:"webIRCAddress"`
- PluginPath string `toml:"pluginPath"`
+ Plugins []string `toml:"plugins"`
CustomCommands map[string]CustomCommand `toml:"customCommands"`
Temp float64 `toml:"temp"`
RequestTimeout int `toml:"requestTimeout"`