Basic plugin system

This commit is contained in:
ayn2op 2023-01-08 21:48:15 +05:30
parent 8c236c636c
commit 71158b12c9
2 changed files with 72 additions and 0 deletions

11
main.go
View file

@ -3,6 +3,7 @@ package main
import (
"context"
"flag"
"fmt"
"log"
"github.com/rivo/tview"
@ -11,6 +12,7 @@ import (
var (
token string
plugins []*Plugin
cfg *Config
discordState *State
@ -30,6 +32,15 @@ func main() {
flag.Parse()
var err error
err = loadPlugins()
if err != nil {
log.Fatal(err)
}
for _, p := range plugins {
fmt.Println(p.Name())
}
cfg, err = newConfig()
if err != nil {
log.Fatal(err)

61
plugin.go Normal file
View file

@ -0,0 +1,61 @@
package main
import (
"log"
"os"
"path/filepath"
"plugin"
)
type Plugin struct {
*plugin.Plugin
}
func newPlugin(path string) (*Plugin, error) {
p, err := plugin.Open(path)
if err != nil {
return nil, err
}
return &Plugin{Plugin: p}, nil
}
func (p *Plugin) Name() string {
s, _ := p.Lookup("Name")
return *(s).(*string)
}
func loadPlugins() error {
path, err := os.UserConfigDir()
if err != nil {
log.Fatal(err)
}
path = filepath.Join(path, name, "plugins")
err = os.MkdirAll(path, os.ModePerm)
if err != nil {
return err
}
entries, err := os.ReadDir(path)
if err != nil {
return err
}
for _, entry := range entries {
if entry.IsDir() {
continue
}
if filepath.Ext(entry.Name()) == ".so" {
p, err := newPlugin(filepath.Join(path, entry.Name()))
if err != nil {
return err
}
plugins = append(plugins, p)
}
}
return nil
}