discordo/plugin.go
2023-01-08 23:17:35 +05:30

61 lines
883 B
Go

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[p.Name()] = p
}
}
return nil
}