-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
9 changed files
with
290 additions
and
152 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
package developers | ||
|
||
import ( | ||
"errors" | ||
"fmt" | ||
"github.com/BoyChai/CoralBot/action" | ||
"github.com/BoyChai/CoralBot/task" | ||
"gopkg.in/yaml.v3" | ||
"os" | ||
) | ||
|
||
func init() { | ||
var err error | ||
handler, err = readConfig() | ||
if err != nil { | ||
fmt.Println("读取插件配置文件出现错误。") | ||
return | ||
} | ||
} | ||
|
||
func readConfig() (Handler, error) { | ||
var c pluginConfig | ||
var all Handler | ||
var my Handler | ||
var n Handler | ||
data, err := os.ReadFile("./config.yaml") | ||
if err != nil { | ||
return n, err | ||
} | ||
err = yaml.Unmarshal(data, &c) | ||
if err != nil { | ||
return Handler{}, err | ||
} | ||
for _, value := range c.Handler { | ||
if value.Name == information.Name { | ||
my = value | ||
continue | ||
} | ||
if value.Name == "all" { | ||
all = value | ||
continue | ||
} | ||
} | ||
|
||
if my != n { | ||
return my, nil | ||
} | ||
if all != n { | ||
return all, nil | ||
} | ||
return Handler{}, errors.New("未读取到配置文件") | ||
} | ||
|
||
// func GetEvent() interface{} { | ||
// return &event | ||
// } | ||
|
||
func GetConfigQQHandler() *action.QQHandle { | ||
return &action.QQHandle{ | ||
Host: handler.Host, | ||
Agreement: handler.Agreement, | ||
} | ||
} | ||
|
||
func GetConfigDingDingHandler() *action.DingDingHandle { | ||
return &action.DingDingHandle{ | ||
AppKey: handler.AppKey, | ||
AppSecret: handler.AppSecret, | ||
} | ||
} | ||
|
||
//func GetHandler() interface{} { | ||
// return &han | ||
//} | ||
|
||
//func GetHandlers() []Handle { | ||
// return handles | ||
//} | ||
|
||
func SetInfo(info task.Info) { | ||
information = info | ||
} | ||
|
||
// NewTask 创建插件任务 | ||
func NewTask(t task.Task) { | ||
//task.NewPluginTask(t) | ||
task.Tasks = append(task.Tasks, t) | ||
} | ||
|
||
// func NewHandles(name string, run func(event *bot.Event) error) { | ||
// func NewHandles(name string, run func(event *bot.QQEvent) error) { | ||
//func NewHandles(name string, run func(event interface{}) error) { | ||
// handles = append(handles, Handle{ | ||
// name: name, | ||
// run: run, | ||
// }) | ||
//} | ||
|
||
//func BuildPlugin() { | ||
// plugin := &Plugin{} | ||
// pingo.Register(plugin) | ||
// pingo.Run() | ||
//} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
package developers | ||
|
||
import ( | ||
"github.com/BoyChai/CoralBot/task" | ||
) | ||
|
||
//type Handle struct { | ||
// name string | ||
// //run func(event *bot.Event) error | ||
// //run func(event *bot.QQEvent) error | ||
// run func(event interface{}) error | ||
//} | ||
|
||
type pluginConfig struct { | ||
Handler []Handler `yaml:"handler"` | ||
} | ||
|
||
type Handler struct { | ||
Name string `yaml:"name"` | ||
Host string `yaml:"host"` | ||
Agreement string `yaml:"agreement"` | ||
AppKey string `yaml:"appKey"` | ||
AppSecret string `yaml:"appSecret"` | ||
} | ||
|
||
var handler Handler | ||
|
||
// var event bot.Event | ||
// var event bot.QQEvent | ||
//var event interface{} | ||
|
||
//var qqEvent bot.QQEvent | ||
|
||
//var dingDingEvent bot.DingDingEvent | ||
|
||
//var qqHan action.QQHandle | ||
|
||
//var dingDingHan action.DingDingHandle | ||
|
||
var information task.Info | ||
|
||
//type Plugin struct{} | ||
|
||
//var handles []Handle |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,87 +1,62 @@ | ||
package developers | ||
|
||
import ( | ||
"encoding/gob" | ||
"fmt" | ||
"github.com/BoyChai/CoralBot/bot" | ||
"github.com/BoyChai/CoralBot/task" | ||
"github.com/BoyChai/CoralBot/plugin" | ||
"net" | ||
"os" | ||
) | ||
|
||
func RunPlugin() { | ||
//// 删除已经存在的套接字文件 | ||
if err := os.RemoveAll(getSocketName(true)); err != nil { | ||
fmt.Println("flow: 1;启动插件出现错误:", err) | ||
return | ||
} | ||
//// 监听 Unix 域套接字 | ||
listener, err := net.Listen("unix", getSocketName(true)) | ||
if err != nil { | ||
fmt.Println("flow: 2;启动插件出现错误:", err) | ||
return | ||
} | ||
//func (p *Plugin) PluginInfo(n string, info *task.Info) error { | ||
// *info = information | ||
// c, err := readConfig() | ||
// if err != nil { | ||
// return err | ||
// } | ||
// switch info.Type { | ||
// case task.QQ: | ||
// h := GetQQHandler() | ||
// h.Host = c.Host | ||
// h.Agreement = c.Agreement | ||
// case task.DingDing: | ||
// h := GetDingDingHandler() | ||
// h.AppKey = c.AppKey | ||
// h.AppSecret = c.AppSecret | ||
// } | ||
// | ||
// return nil | ||
//} | ||
|
||
// 第一次发包 声明我是谁 | ||
accept, err := listener.Accept() | ||
if err != nil { | ||
fmt.Println("flow: 3;启动插件出现错误:", err) | ||
return | ||
} | ||
encoder := gob.NewEncoder(accept) | ||
err = encoder.Encode(getSocketName(false)) | ||
if err != nil { | ||
fmt.Println("flow: 4;启动插件出现错误:", err) | ||
return | ||
} | ||
//func (p *Plugin) GetPlugin(e interface{}, Task *[]task.Task) error { | ||
// //func (p *Plugin) GetPlugin(e *bot.Event, Task *[]task.Task) error { | ||
// event = e | ||
// *Task = task.Tasks | ||
// return nil | ||
//} | ||
|
||
// 接收数据 确定CoralBot已经成功拿到数据并返回over | ||
var over = false | ||
decoder := gob.NewDecoder(accept) | ||
decoder.Decode(&over) | ||
if !over { | ||
fmt.Println("flow: 5;启动插件出现错误: CoralBot服务端出现错误") | ||
listener.Close() | ||
os.RemoveAll(getSocketName(true)) | ||
return | ||
} | ||
listener.Close() | ||
os.RemoveAll(getSocketName(true)) | ||
runTask() | ||
|
||
} | ||
//func (p *Plugin) Handles(e interface{}, n *string) error { | ||
// //func (p *Plugin) Handles(e *bot.QQEvent, n *string) error { | ||
// //func (p *Plugin) Handles(e bot.Event, n *string) error { | ||
// for _, value := range handles { | ||
// if e.(*bot.QQEvent).GetRunName() == value.name { | ||
// err := value.run(e) | ||
// if err != nil { | ||
// return err | ||
// } | ||
// } | ||
// } | ||
// return nil | ||
//} | ||
|
||
func getSocketName(t bool) string { | ||
// 第一次发包的名字 | ||
if t { | ||
return "." + Cfg.Name + ".sock" | ||
} | ||
// 第二次发包的名字 | ||
return fmt.Sprint("."+Cfg.Name+"@", os.Getpid(), ".sock") | ||
} | ||
|
||
func runTask() { | ||
//// 监听 Unix 域套接字 | ||
listener, err := net.Listen("unix", getSocketName(false)) | ||
func RunPlugin(event bot.Event) { | ||
SocketFile := "CoralBot.sock" | ||
//conn, err := net.Dial("unix", config.SocketFile) | ||
conn, err := net.Dial("unix", SocketFile) | ||
if err != nil { | ||
fmt.Println("flow: 6;启动插件出现错误:", err) | ||
fmt.Println("socket连接失败。请检查CoralBot是否启动。") | ||
return | ||
} | ||
for { | ||
accept, err := listener.Accept() | ||
if err != nil { | ||
fmt.Println("flow: 7;启动插件出现错误:", err) | ||
} | ||
var bodyData []byte | ||
decoder := gob.NewDecoder(accept) | ||
decoder.Decode(&bodyData) | ||
switch Cfg.Type { | ||
case task.QQ: | ||
var event bot.QQEvent | ||
event.Explain(bodyData) | ||
case task.DingDing: | ||
var event bot.DingDingEvent | ||
event.Explain(bodyData) | ||
} | ||
} | ||
plugin.WriteInfo(information, conn) | ||
data := plugin.ReadData(conn) | ||
event.Explain(data) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
handler: | ||
# qq的配置 | ||
- name: "all" | ||
host: "192.168.1.1:5700" | ||
agreement: "http" | ||
- name: "demo" | ||
host: "127.0.0.1:5700" | ||
agreement: "http" | ||
# 钉钉的配置 | ||
- name: "demo2" | ||
appKey: "" | ||
appSecret: "" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.