diff --git a/core/grpc_asset.go b/core/grpc_asset.go index 723e99d..6051b54 100644 --- a/core/grpc_asset.go +++ b/core/grpc_asset.go @@ -24,7 +24,7 @@ type Language struct { } var plugin_dir = utils.ExecPath + "/plugins" -var release = "20230727" +var release = "20230728" var languages = []Language{ { @@ -46,6 +46,7 @@ var languages = []Language{ Version: release, Os: "windows", Arch: "amd64", + Links: []string{"https://gitee.com/sillybot/binary/releases/download/" + release + "/node_windows_amd64.zip"}, }, } diff --git a/core/grpc_plugins.go b/core/grpc_plugins.go index 5ddff1f..a7c07b5 100644 --- a/core/grpc_plugins.go +++ b/core/grpc_plugins.go @@ -234,6 +234,7 @@ func AddNodePlugin(path, name string) error { if err != nil { return err } + defer file.Close() data, err := ioutil.ReadAll(file) if err != nil { return err @@ -336,7 +337,9 @@ func AddNodePlugin(path, name string) error { defer func() { recover() }() - p.Process.Kill() + if p.Process.Kill() == nil { + processes.Delete(key) + } }() } return true diff --git a/core/plugin_core.go b/core/plugin_core.go index 7035afb..1feda0f 100644 --- a/core/plugin_core.go +++ b/core/plugin_core.go @@ -6,6 +6,7 @@ import ( "io" "net/http" "os" + "os/exec" "path/filepath" "reflect" "regexp" @@ -179,6 +180,22 @@ func initPlugins() { go f.Reload() } else if new == "" { ss := strings.Split(filename, "/") + processes.Range(func(key, value any) bool { //先停止脚本,避免windows锁定文件 + p := key.(*exec.Cmd) + s := value.(common.Sender) + if s.GetPluginID() == f.UUID { + console.Log("已终止 % s", f.Title) + func() { + defer func() { + recover() + }() + if p.Process.Kill() == nil { + processes.Delete(key) + } + }() + } + return true + }) os.RemoveAll(filepath.Dir(filename)) // fmt.Println(strings.Join(ss, " ")) if len(ss) > 2 { diff --git a/proto3/sillygirl.d.ts b/proto3/sillygirl.d.ts index 763e304..8545fef 100644 --- a/proto3/sillygirl.d.ts +++ b/proto3/sillygirl.d.ts @@ -45,7 +45,11 @@ declare class Bucket { changed?: boolean; }>; getAll(): Promise; - delete(): Promise; + delete(key: string): Promise<{ + message?: string | undefined; + changed?: boolean | undefined; + }>; + deleteAll(): Promise; keys(): Promise; len(): Promise; buckets(): Promise; diff --git a/proto3/sillygirl.js b/proto3/sillygirl.js index 46265d1..7a90cad 100644 --- a/proto3/sillygirl.js +++ b/proto3/sillygirl.js @@ -449,7 +449,10 @@ class Bucket { }); }); } - async delete() { + async delete(key) { + return this.set(key, ""); + } + async deleteAll() { return new Promise((resolve, reject) => { client.BucketDelete(new srpc_1.srpc.BucketRequest({ name: this.name }), (err, resp) => { if (err) { diff --git a/proto3/sillygirl.ts b/proto3/sillygirl.ts index 921604b..ad48db6 100644 --- a/proto3/sillygirl.ts +++ b/proto3/sillygirl.ts @@ -499,7 +499,14 @@ class Bucket { }); } - async delete(): Promise { + async delete(key: string): Promise<{ + message?: string | undefined; + changed?: boolean | undefined; + }> { + return this.set(key, ""); + } + + async deleteAll(): Promise { return new Promise((resolve, reject) => { client.BucketDelete( new srpc.BucketRequest({ name: this.name }),