This commit is contained in:
1-6
2023-07-30 17:36:50 +08:00
parent 48720766ec
commit c975996023
18 changed files with 619 additions and 552 deletions
+1 -11
View File
@@ -332,17 +332,6 @@ func (sender *CustomSender) Stop() {
panic("stop") panic("stop")
} }
func (sender *CustomSender) GetID() string {
return sender.id
}
func (sender *CustomSender) SetID() string {
sender.id = utils.GenUUID()
sender.CreatedAt = time.Now()
senders.Store(sender.id, sender)
return sender.id
}
func (sender *CustomSender) GetTime() time.Time { func (sender *CustomSender) GetTime() time.Time {
return sender.CreatedAt return sender.CreatedAt
} }
@@ -487,6 +476,7 @@ func (s *CustomSender) Await(message common.Sender, callback func(common.Sender)
if len(c.Function.Rules) == 0 { if len(c.Function.Rules) == 0 {
c.Function.Rules = []string{`raw [\s\S]+`} c.Function.Rules = []string{`raw [\s\S]+`}
} }
// fmt.Println("carry", c)
fmtRule(&c.Function) fmtRule(&c.Function)
c.Chan = make(chan interface{}, 1) c.Chan = make(chan interface{}, 1)
c.Result = make(chan interface{}, 1) c.Result = make(chan interface{}, 1)
-5
View File
@@ -1,13 +1,8 @@
package common package common
import "time"
type Sender interface { type Sender interface {
SetPluginID(string) SetPluginID(string)
GetPluginID() string GetPluginID() string
GetID() string
GetTime() time.Time
SetID() string
GetUserID() string GetUserID() string
GetChatID() string GetChatID() string
GetBotID() string GetBotID() string
+9 -18
View File
@@ -472,9 +472,9 @@ func HandleMessage(sender common.Sender) {
u, g, i, a := sender.GetUserID(), sender.GetChatID(), sender.GetImType(), sender.IsAdmin() u, g, i, a := sender.GetUserID(), sender.GetChatID(), sender.GetImType(), sender.IsAdmin()
con := true con := true
mtd := false mtd := false
for _, wait := range waits { for _, wait := range waits {
wait.Foreach(func(k int64, c *Carry) bool { wait.Foreach(func(k int64, c *Carry) bool {
// userID := vs.Get("u") // userID := vs.Get("u")
// chatID := vs.Get("c") // chatID := vs.Get("c")
// imType := vs.Get("i") // imType := vs.Get("i")
@@ -485,18 +485,26 @@ func HandleMessage(sender common.Sender) {
// if userID != u && (forGroup == "" || forGroup == "me") { // if userID != u && (forGroup == "" || forGroup == "me") {
// return true // return true
// } // }
if c.RequireAdmin && !a { if c.RequireAdmin && !a {
return true return true
} }
// fmt.Println(c.Function.Rules, "==", c.AllowPlatforms, len(c.AllowPlatforms))
if len(c.AllowPlatforms) != 0 && !Contains(c.AllowPlatforms, i) { if len(c.AllowPlatforms) != 0 && !Contains(c.AllowPlatforms, i) {
return true return true
} }
// fmt.Println(c.Function.Rules)
if len(c.ProhibitPlatforms) != 0 && Contains(c.ProhibitPlatforms, i) { if len(c.ProhibitPlatforms) != 0 && Contains(c.ProhibitPlatforms, i) {
return true return true
} }
if len(c.AllowUsers) != 0 && !Contains(c.AllowUsers, u) { if len(c.AllowUsers) != 0 && !Contains(c.AllowUsers, u) {
return true return true
} }
if len(c.ProhibitUsers) != 0 && Contains(c.ProhibitUsers, u) { if len(c.ProhibitUsers) != 0 && Contains(c.ProhibitUsers, u) {
return true return true
} }
@@ -543,23 +551,6 @@ func HandleMessage(sender common.Sender) {
sender.SetMatch(res[1:]) sender.SetMatch(res[1:])
sender.SetParams(c.Function.Params[i]) sender.SetParams(c.Function.Params[i])
mtd = true mtd = true
// if f, ok := c.Message.(*CustomSender); ok && f.Carry != nil {
// if s1, o := sender.(*CustomSender); o && s1.Carry != nil {
// f.Carry = s1.Carry
// c := make(chan string)
// oc := s1.Carry
// s1.Carry = c
// go func() {
// for {
// r, o := <-c
// if !o {
// break
// }
// oc <- r
// }
// }()
// }
// }
c.Chan <- sender c.Chan <- sender
sender.Reply(<-c.Result) sender.Reply(<-c.Result)
if !sender.IsContinue() { if !sender.IsContinue() {
+9 -6
View File
@@ -79,7 +79,7 @@ func (sg *SillyGirlService) AdapterRegist(stream srpc.SillyGirlService_AdapterRe
} }
} }
func (sg *SillyGirlService) AdapterReceive(ctx context.Context, req *srpc.AdapterRequest) (*srpc.Default, error) { func (sg *SillyGirlService) AdapterReceive(ctx context.Context, req *srpc.AdapterRequest) (*srpc.Empty, error) {
msgs := map[string]interface{}{} msgs := map[string]interface{}{}
bot_id := req.GetBotId() bot_id := req.GetBotId()
platform := req.GetPlatform() platform := req.GetPlatform()
@@ -87,10 +87,10 @@ func (sg *SillyGirlService) AdapterReceive(ctx context.Context, req *srpc.Adapte
json.Unmarshal([]byte(req.Value), &msgs) json.Unmarshal([]byte(req.Value), &msgs)
adapter, err := GetAdapter(platform, bot_id) adapter, err := GetAdapter(platform, bot_id)
if err == nil { if err == nil {
s := adapter.Receive(msgs) adapter.Receive(msgs)
return &srpc.Default{Value: s.SetID()}, nil return &srpc.Empty{}, nil
} }
return &srpc.Default{Value: ""}, err return &srpc.Empty{}, err
} }
func (sg *SillyGirlService) AdapterPush(ctx context.Context, req *srpc.AdapterRequest) (*srpc.Default, error) { func (sg *SillyGirlService) AdapterPush(ctx context.Context, req *srpc.AdapterRequest) (*srpc.Default, error) {
@@ -118,8 +118,11 @@ func (sg *SillyGirlService) AdapterSender(ctx context.Context, req *srpc.Adapter
json.Unmarshal([]byte(req.Value), &msgs) json.Unmarshal([]byte(req.Value), &msgs)
adapter, err := GetAdapter(platform, bot_id) adapter, err := GetAdapter(platform, bot_id)
if err == nil { if err == nil {
s := adapter.Sender2(msgs) _, regist, err := getSenderRegisterByCtx(ctx)
return &srpc.Default{Value: s.SetID()}, nil if err == nil {
s := adapter.Sender2(msgs)
return &srpc.Default{Value: regist(s)}, nil
}
} }
return &srpc.Default{Value: ""}, err return &srpc.Default{Value: ""}, err
} }
+1 -1
View File
@@ -24,7 +24,7 @@ type Language struct {
} }
var plugin_dir = utils.ExecPath + "/plugins" var plugin_dir = utils.ExecPath + "/plugins"
var release = "20230728" var release = "20230730"
var languages = []Language{ var languages = []Language{
{ {
+45 -99
View File
@@ -46,30 +46,6 @@ func initNodePlugins() {
AddNodePlugin(index, name) AddNodePlugin(index, name)
} }
} }
// filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
// fmt.Println("path", path)
// path = strings.ReplaceAll(path, "\\", "/")
// if !strings.HasPrefix(path, root+"/") {
// return nil
// }
// files := strings.Split(strings.Replace(path, root+"/", "", 1), "/")
// fmt.Println("files", files)
// // var plugin_dir = false
// // var plugin_index = false
// switch len(files) {
// case 1:
// // plugin_dir = true
// if info.IsDir() {
// plugins = append(plugins, path)
// }
// case 2:
// if (files[1] == "main.js") && !info.IsDir() { //files[1] == "main.ts" ||
// AddNodePlugin(path, files[0])
// }
// }
// return nil
// })
watcher, err := fsnotify.NewWatcher() watcher, err := fsnotify.NewWatcher()
if err != nil { if err != nil {
fmt.Println("创建监视器失败:", err) fmt.Println("创建监视器失败:", err)
@@ -178,37 +154,6 @@ func initNodePlugins() {
} }
} }
// func RemNodePlugin2(name string) bool {
// if name == "" {
// return false
// }
// pluginLock.Lock()
// defer pluginLock.Unlock()
// key := nameUuid(name)
// for i := range Functions {
// if Functions[i].UUID == key {
// f := Functions[i]
// DestroyAdapterByUUID(key)
// Functions[i].Running = false
// if len(Functions[i].CronIds) != 0 {
// for _, id := range Functions[i].CronIds {
// CRON.Remove(cron.EntryID(id))
// }
// }
// Functions = append(Functions[:i], Functions[i+1:]...)
// CancelPluginCrons(key)
// CancelPluginWebs(key)
// CancelPluginlistening(key)
// CancelHttpListen(key)
// remStatic(key)
// storage.DisableHandle(key)
// console.Log("已移除 %s%s", f.Title, f.Suffix)
// return true
// }
// }
// return false
// }
func nameUuid(name string) string { func nameUuid(name string) string {
hash := sha1.Sum([]byte(name)) hash := sha1.Sum([]byte(name))
return strings.ReplaceAll(uuid.NewSHA1(uuid.Nil, hash[:]).String(), "-", "_") return strings.ReplaceAll(uuid.NewSHA1(uuid.Nil, hash[:]).String(), "-", "_")
@@ -218,8 +163,6 @@ func isNameUuid(uuid string) bool {
return strings.Contains(uuid, "_") return strings.Contains(uuid, "_")
} }
// var plugins_id sync.Map
func AddNodePlugin(path, name string) error { func AddNodePlugin(path, name string) error {
if name == "" { if name == "" {
return nil return nil
@@ -277,10 +220,10 @@ func AddNodePlugin(path, name string) error {
f.Handle = func(s common.Sender, f func(vm *goja.Runtime)) interface{} { f.Handle = func(s common.Sender, f func(vm *goja.Runtime)) interface{} {
s.SetPluginID(uuid) s.SetPluginID(uuid)
plt := s.GetImType() plt := s.GetImType()
// , "/Users/a1-6/.nvm/versions/node/v18.16.1/lib/node_modules/ts-node/dist/bin.js",
cmd := exec.Command("./node", path) cmd := exec.Command("./node", path)
cmd.Dir = utils.ExecPath + "/language/node" cmd.Dir = utils.ExecPath + "/language/node"
// cmd := exec.Command(utils.ExecPath+"/language/node/node", path) RUNTIME_ID := utils.GenUUID()
cmd.Env = append(cmd.Env, "RUNTIME_ID="+RUNTIME_ID)
cmd.Env = append(cmd.Env, "PLUGIN_ID="+uuid) cmd.Env = append(cmd.Env, "PLUGIN_ID="+uuid)
// 获取标准输出和标准错误输出的管道 // 获取标准输出和标准错误输出的管道
stdout, err := cmd.StdoutPipe() stdout, err := cmd.StdoutPipe()
@@ -327,15 +270,14 @@ func AddNodePlugin(path, name string) error {
} }
}() }()
processes.Store(cmd, s) processes.Store(cmd, s)
register := createSenderRegister(RUNTIME_ID)
if (plt) != "*" { if (plt) != "*" {
id := s.SetID() cmd.Env = append(cmd.Env, "SENDER_ID="+register(s))
cmd.Env = append(cmd.Env, "SENDER_ID="+id)
err = cmd.Start() err = cmd.Start()
if err != nil { if err != nil {
} }
senders.Store(id, s) defer deleteSenderRegister(RUNTIME_ID)
defer senders.Delete(id)
defer processes.Delete(cmd) defer processes.Delete(cmd)
err = cmd.Wait() err = cmd.Wait()
if err != nil { if err != nil {
@@ -366,6 +308,7 @@ func AddNodePlugin(path, name string) error {
return true return true
}) })
go func() { go func() {
defer deleteSenderRegister(RUNTIME_ID)
defer processes.Delete(cmd) defer processes.Delete(cmd)
err = cmd.Wait() err = cmd.Wait()
}() }()
@@ -387,18 +330,18 @@ func AddNodePlugin(path, name string) error {
} }
var typeat = `declare class Sender { var typeat = `declare class Sender {
uuid: string; private uuid;
private destoried; private destoried;
constructor(uuid: string); constructor(uuid: string);
destructor(): void; destroy(): void;
getUserId(): Promise<string | undefined>; getUserId(): Promise<string>;
getUserName(): Promise<string | undefined>; getUserName(): Promise<string>;
getChatId(): Promise<string | undefined>; getChatId(): Promise<string>;
getChatName(): Promise<string | undefined>; getChatName(): Promise<string>;
getMessageId(): Promise<string | undefined>; getMessageId(): Promise<string>;
getPlatform(): Promise<string | undefined>; getPlatform(): Promise<string>;
getBotId(): Promise<string | undefined>; getBotId(): Promise<string>;
getContent(): Promise<string | undefined>; getContent(): Promise<string>;
param(key: number | string): Promise<string>; param(key: number | string): Promise<string>;
setContent(content: string): Promise<undefined>; setContent(content: string): Promise<undefined>;
continue(): Promise<undefined>; continue(): Promise<undefined>;
@@ -415,15 +358,14 @@ var typeat = `declare class Sender {
prohibit_groups?: string[]; prohibit_groups?: string[];
allow_users?: string[]; allow_users?: string[];
prohibit_users?: string[]; prohibit_users?: string[];
persistent?: boolean;
}): Promise<Sender | undefined>; }): Promise<Sender | undefined>;
holdOn(str: string): string; holdOn(str: string): string;
reply(content: string): Promise<string | undefined>; reply(content: string): Promise<string>;
action(options: any): Promise<any | undefined>; doAction(options: Record<string, any>): Promise<any>;
event(): Promise<any | undefined>; getEvent(): Promise<Record<string, any>>;
} }
declare class Bucket { declare class Bucket {
name: string; private name;
constructor(name: string); constructor(name: string);
transform(v: string | undefined): string | number | boolean | undefined; transform(v: string | undefined): string | number | boolean | undefined;
reverseTransform(value: any): string; reverseTransform(value: any): string;
@@ -432,19 +374,19 @@ declare class Bucket {
message?: string; message?: string;
changed?: boolean; changed?: boolean;
}>; }>;
getAll(): Promise<any>; getAll(): Promise<Record<string, any>>;
delete(key: string): Promise<{ delete(key: string): Promise<{
message?: string | undefined; message?: string;
changed?: boolean | undefined; changed?: boolean;
}>; }>;
deleteAll(): Promise<undefined>; deleteAll(): Promise<undefined>;
keys(): Promise<string[] | undefined>; keys(): Promise<string[]>;
len(): Promise<number | undefined>; len(): Promise<number>;
buckets(): Promise<string[] | undefined>; buckets(): Promise<string[]>;
watch(key: string, handle: (old: any, now: any, key: string) => StorageFinal | void | any): void; watch(key: string, handle: (old: any, now: any, key: string) => StorageModifier | void): void;
_name(): Promise<string>; getName(): Promise<string>;
} }
interface StorageFinal { interface StorageModifier {
echo?: string; echo?: string;
now?: any; now?: any;
message?: string; message?: string;
@@ -459,28 +401,31 @@ interface Message {
chat_name?: string; chat_name?: string;
} }
declare class Adapter { declare class Adapter {
platform: string | undefined; platform: string;
bot_id: string | undefined; bot_id: string;
call: any; call: any;
constructor(options: { constructor(options: {
platform?: string; platform: string;
bot_id?: string; bot_id: string;
replyHandler?: (message: Message) => string | undefined | Promise<string | undefined>; replyHandler?: (message: Message) => Promise<string | undefined>;
actionHandler?: (message: Message) => string | undefined | Promise<string | undefined>; actionHandler?: (message: Message) => Promise<string | undefined>;
}); });
setActionHandler(func: (action: {}) => any): void; receive(message: Message): Promise<undefined>;
receive(message: Message): Promise<Sender>;
push(message: Message): Promise<string>; push(message: Message): Promise<string>;
destroy(): Promise<void>; destroy(): Promise<void>;
sender(options: any): Promise<Sender>; sender(options: any): Promise<Sender>;
} }
declare let sender: Sender; declare let sender: Sender;
declare function sleep(ms: number | undefined): Promise<unknown>; declare function sleep(ms?: number): Promise<unknown>;
interface CQItem { interface CQItem {
type: string; type: string;
params: {}; params: Record<string, string>;
}
interface CQParams {
[key: string]: string | number | boolean;
} }
declare let utils: { declare let utils: {
buildCQTag: (type: string, params: CQParams, prefix?: string) => string;
parseCQText: (text: string, prefix?: string) => (string | CQItem)[]; parseCQText: (text: string, prefix?: string) => (string | CQItem)[];
}; };
declare let console: { declare let console: {
@@ -489,7 +434,8 @@ declare let console: {
error(...args: any[]): void; error(...args: any[]): void;
debug(...args: any[]): void; debug(...args: any[]): void;
}; };
export { Adapter, Bucket, sender, sleep, utils, console };` export { Adapter, Bucket, sender, sleep, utils, console };
`
func defaultScript(title string) string { func defaultScript(title string) string {
create_at := time.Now().Format("2006-01-02 15:04:05") create_at := time.Now().Format("2006-01-02 15:04:05")
@@ -501,5 +447,5 @@ func defaultScript(title string) string {
* @version v1.0.0 * @version v1.0.0
*/ */
const { sender: s, Bucket, Adapter, sleep } = require("sillygirl");` const { sender: s, Bucket, Adapter, sleep, utils, console } = require("sillygirl");`
} }
+102
View File
@@ -0,0 +1,102 @@
package core
import (
"context"
"errors"
"fmt"
"sync"
"github.com/cdle/sillyplus/core/common"
"github.com/cdle/sillyplus/utils"
"google.golang.org/grpc/metadata"
)
var senderRegisters sync.Map
func getRegisterSenderByCtx(ctx context.Context, uuid string) (common.Sender, error) {
md, ok := metadata.FromIncomingContext(ctx)
if !ok {
return nil, fmt.Errorf("missing metadata")
}
runtimeID := md.Get("RUNTIME_ID")
if runtimeID == nil {
return nil, fmt.Errorf("missing runtime_id")
}
runtime_id := runtimeID[0]
return getRegisterSender(runtime_id, uuid)
}
func getRegisterSender(runtime_id, uuid string) (common.Sender, error) {
if uuid == "" {
return &CustomSender{
F: &Factory{
botid: "default",
botplt: "*",
},
}, nil
}
var sm *sync.Map
v, ok := senderRegisters.Load(runtime_id)
if ok {
sm = v.(*sync.Map)
v, ok := sm.Load(uuid)
if ok {
return v.(common.Sender), nil
}
}
return nil, errors.New("NOT FOUND SENDER")
}
func createSenderRegister(runtime_id string) func(common.Sender) string {
var sm = new(sync.Map)
senderRegisters.Store(runtime_id, sm)
return func(s common.Sender) string {
uuid := utils.GenUUID()
sm.Store(uuid, s)
return uuid
}
}
func getSenderRegister(runtime_id string) (func(common.Sender) string, error) {
var sm *sync.Map
v, ok := senderRegisters.Load(runtime_id)
if !ok {
return nil, errors.New("INVALID RUNTIME")
}
sm = v.(*sync.Map)
return func(s common.Sender) string {
uuid := utils.GenUUID()
sm.Store(uuid, s)
return uuid
}, nil
}
func deleteSenderRegister(runtime_id string) {
v, ok := senderRegisters.Load(runtime_id)
if ok {
sm := v.(*sync.Map)
sm.Range(func(key, value any) bool {
fmt.Println(key)
sm.Delete(key)
return true
})
}
senderRegisters.Delete(runtime_id)
}
func getSenderRegisterByCtx(ctx context.Context) (string, func(common.Sender) string, error) {
var senderRegister func(common.Sender) string
md, ok := metadata.FromIncomingContext(ctx)
if !ok {
return "", senderRegister, fmt.Errorf("missing metadata")
}
runtimeID := md.Get("RUNTIME_ID")
if runtimeID == nil {
return "", senderRegister, fmt.Errorf("missing runtime_id")
}
runtime_id := runtimeID[0]
f, err := getSenderRegister(runtime_id)
return runtime_id, f, err
}
+34 -55
View File
@@ -3,7 +3,6 @@ package core
import ( import (
"context" "context"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"io" "io"
"strings" "strings"
@@ -15,41 +14,8 @@ import (
"github.com/cdle/sillyplus/utils" "github.com/cdle/sillyplus/utils"
) )
var senders sync.Map
// func init() {
// //垃圾回收
// go func() {
// for {
// time.Sleep(time.Minute)
// senders.Range(func(key, value any) bool {
// s := value.(common.Sender)
// if s.GetTime().Add(time.Minute * 20).Before(time.Now()) {
// senders.Delete(s.GetID())
// }
// return true
// })
// }
// }()
// }
func GetSender(uuid string) (common.Sender, error) {
if uuid == "" {
return &CustomSender{
F: &Factory{
botid: "*",
},
}, nil
}
v, ok := senders.Load(uuid)
if !ok {
return nil, errors.New("not found sender")
}
return v.(common.Sender), nil
}
func (sg *SillyGirlService) SenderGetUserId(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { func (sg *SillyGirlService) SenderGetUserId(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
s, err := GetSender(req.Uuid) s, err := getRegisterSenderByCtx(ctx, req.Uuid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -57,7 +23,7 @@ func (sg *SillyGirlService) SenderGetUserId(ctx context.Context, req *srpc.Sende
} }
func (sg *SillyGirlService) SenderGetUserName(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { func (sg *SillyGirlService) SenderGetUserName(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
s, err := GetSender(req.Uuid) s, err := getRegisterSenderByCtx(ctx, req.Uuid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -65,7 +31,7 @@ func (sg *SillyGirlService) SenderGetUserName(ctx context.Context, req *srpc.Sen
} }
func (sg *SillyGirlService) SenderGetChatId(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { func (sg *SillyGirlService) SenderGetChatId(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
s, err := GetSender(req.Uuid) s, err := getRegisterSenderByCtx(ctx, req.Uuid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -73,7 +39,7 @@ func (sg *SillyGirlService) SenderGetChatId(ctx context.Context, req *srpc.Sende
} }
func (sg *SillyGirlService) SenderGetChatName(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { func (sg *SillyGirlService) SenderGetChatName(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
s, err := GetSender(req.Uuid) s, err := getRegisterSenderByCtx(ctx, req.Uuid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -81,7 +47,7 @@ func (sg *SillyGirlService) SenderGetChatName(ctx context.Context, req *srpc.Sen
} }
func (sg *SillyGirlService) SenderGetMessageId(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { func (sg *SillyGirlService) SenderGetMessageId(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
s, err := GetSender(req.Uuid) s, err := getRegisterSenderByCtx(ctx, req.Uuid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -89,7 +55,7 @@ func (sg *SillyGirlService) SenderGetMessageId(ctx context.Context, req *srpc.Se
} }
func (sg *SillyGirlService) SenderGetPlatform(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { func (sg *SillyGirlService) SenderGetPlatform(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
s, err := GetSender(req.Uuid) s, err := getRegisterSenderByCtx(ctx, req.Uuid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -97,7 +63,7 @@ func (sg *SillyGirlService) SenderGetPlatform(ctx context.Context, req *srpc.Sen
} }
func (sg *SillyGirlService) SenderGetBotId(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { func (sg *SillyGirlService) SenderGetBotId(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
s, err := GetSender(req.Uuid) s, err := getRegisterSenderByCtx(ctx, req.Uuid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -105,7 +71,7 @@ func (sg *SillyGirlService) SenderGetBotId(ctx context.Context, req *srpc.Sender
} }
func (sg *SillyGirlService) SenderGetContent(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { func (sg *SillyGirlService) SenderGetContent(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
s, err := GetSender(req.Uuid) s, err := getRegisterSenderByCtx(ctx, req.Uuid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -113,7 +79,7 @@ func (sg *SillyGirlService) SenderGetContent(ctx context.Context, req *srpc.Send
} }
func (sg *SillyGirlService) SenderSetContent(ctx context.Context, req *srpc.SenderContentRequest) (*srpc.Empty, error) { func (sg *SillyGirlService) SenderSetContent(ctx context.Context, req *srpc.SenderContentRequest) (*srpc.Empty, error) {
s, err := GetSender(req.Uuid) s, err := getRegisterSenderByCtx(ctx, req.Uuid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -122,7 +88,7 @@ func (sg *SillyGirlService) SenderSetContent(ctx context.Context, req *srpc.Send
} }
func (sg *SillyGirlService) SenderContinue(ctx context.Context, req *srpc.SenderRequest) (*srpc.Empty, error) { func (sg *SillyGirlService) SenderContinue(ctx context.Context, req *srpc.SenderRequest) (*srpc.Empty, error) {
s, err := GetSender(req.Uuid) s, err := getRegisterSenderByCtx(ctx, req.Uuid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -132,13 +98,17 @@ func (sg *SillyGirlService) SenderContinue(ctx context.Context, req *srpc.Sender
// todo // todo
func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderListenServer) error { func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderListenServer) error {
runtime_id, register, err := getSenderRegisterByCtx(stream.Context())
if err != nil {
return err
}
// fmt.Println(runtime_id)
var carry *Carry var carry *Carry
var echos sync.Map var echos sync.Map
var persistent bool var persistent bool
// defer fmt.Println("已关闭,", "===") // defer fmt.Println("已关闭,", "===")
for { for {
req, err := stream.Recv() req, err := stream.Recv()
// fmt.Println("carry", carry, err) // fmt.Println("carry", carry, err)
if err == io.EOF { if err == io.EOF {
break // 如果流已经关闭,则退出循环 break // 如果流已经关闭,则退出循环
@@ -146,7 +116,9 @@ func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderList
if err != nil { if err != nil {
return err return err
} }
if carry != nil { if carry != nil {
// fmt.Println("已监听,", req)
// fmt.Println("req.Uuid", req.Uuid) // fmt.Println("req.Uuid", req.Uuid)
echo := req.GetUuid() echo := req.GetUuid()
value := req.GetValue() value := req.GetValue()
@@ -163,7 +135,8 @@ func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderList
// } // }
continue continue
} }
s, err := GetSender(req.Uuid) s, err := getRegisterSender(runtime_id, req.Uuid)
if err != nil { if err != nil {
return err return err
} }
@@ -195,6 +168,12 @@ func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderList
} }
} }
} }
if carry.AllowPlatforms == nil {
plt := s.GetImType()
if plt != "*" {
carry.AllowPlatforms = []string{plt}
}
}
options = append(options, carry) options = append(options, carry)
if req.Persistent { if req.Persistent {
persistent = req.Persistent persistent = req.Persistent
@@ -204,13 +183,15 @@ func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderList
stream.Send(&srpc.SenderListenResponse{Echo: ""}) stream.Send(&srpc.SenderListenResponse{Echo: ""})
}) })
} }
level := s.GetLevel()
go s.Await(s, func(s common.Sender) interface{} { go s.Await(s, func(s common.Sender) interface{} {
id := s.SetID() s.SetLevel(level + 1)
echo := utils.GenUUID() echo := utils.GenUUID()
ch := make(chan string) ch := make(chan string)
echos.Store(echo, ch) echos.Store(echo, ch)
defer echos.Delete(echo) defer echos.Delete(echo)
stream.Send(&srpc.SenderListenResponse{Echo: echo, Uuid: id}) stream.Send(&srpc.SenderListenResponse{Echo: echo, Uuid: register(s)})
value := <-ch value := <-ch
if !persistent { if !persistent {
if strings.HasPrefix(value, "go_again_") { if strings.HasPrefix(value, "go_again_") {
@@ -220,7 +201,6 @@ func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderList
stream.Send(&srpc.SenderListenResponse{Echo: "END"}) stream.Send(&srpc.SenderListenResponse{Echo: "END"})
} }
} else { } else {
defer senders.Delete(id)
value = strings.Replace(value, "go_again_", "", 1) value = strings.Replace(value, "go_again_", "", 1)
} }
return value return value
@@ -230,7 +210,7 @@ func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderList
} }
func (sg *SillyGirlService) SenderEvent(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { func (sg *SillyGirlService) SenderEvent(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) {
s, err := GetSender(req.Uuid) s, err := getRegisterSenderByCtx(ctx, req.Uuid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -238,7 +218,7 @@ func (sg *SillyGirlService) SenderEvent(ctx context.Context, req *srpc.SenderReq
} }
func (sg *SillyGirlService) SenderReply(ctx context.Context, req *srpc.ReplyRequest) (*srpc.Default, error) { func (sg *SillyGirlService) SenderReply(ctx context.Context, req *srpc.ReplyRequest) (*srpc.Default, error) {
s, err := GetSender(req.Uuid) s, err := getRegisterSenderByCtx(ctx, req.Uuid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -247,7 +227,7 @@ func (sg *SillyGirlService) SenderReply(ctx context.Context, req *srpc.ReplyRequ
} }
func (sg *SillyGirlService) SenderParam(ctx context.Context, req *srpc.ReplyRequest) (*srpc.Default, error) { func (sg *SillyGirlService) SenderParam(ctx context.Context, req *srpc.ReplyRequest) (*srpc.Default, error) {
s, err := GetSender(req.Uuid) s, err := getRegisterSenderByCtx(ctx, req.Uuid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -262,10 +242,11 @@ func (sg *SillyGirlService) SenderParam(ctx context.Context, req *srpc.ReplyRequ
} }
func (sg *SillyGirlService) SenderAction(ctx context.Context, req *srpc.ReplyRequest) (*srpc.Default, error) { func (sg *SillyGirlService) SenderAction(ctx context.Context, req *srpc.ReplyRequest) (*srpc.Default, error) {
s, err := GetSender(req.Uuid) s, err := getRegisterSenderByCtx(ctx, req.Uuid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
var params = map[string]interface{}{} var params = map[string]interface{}{}
err = json.Unmarshal([]byte(req.Content), &params) err = json.Unmarshal([]byte(req.Content), &params)
if err != nil { if err != nil {
@@ -276,7 +257,5 @@ func (sg *SillyGirlService) SenderAction(ctx context.Context, req *srpc.ReplyReq
} }
func (sg *SillyGirlService) SenderDestroy(ctx context.Context, req *srpc.ReplyRequest) (*srpc.Empty, error) { func (sg *SillyGirlService) SenderDestroy(ctx context.Context, req *srpc.ReplyRequest) (*srpc.Empty, error) {
// fmt.Println("删除", req.Uuid)
senders.Delete(req.Uuid)
return &srpc.Empty{}, nil return &srpc.Empty{}, nil
} }
+4
View File
@@ -71,6 +71,10 @@ func main() {
fmt.Printf("\x1b[%dm%s \x1b[0m\n", 31, m[core.CONETNT]) fmt.Printf("\x1b[%dm%s \x1b[0m\n", 31, m[core.CONETNT])
return "" return ""
}) })
// a.SetActionHandler(func(m map[string]interface{}) string {
// fmt.Println("action", m)
// return `{"a":"a"}`
// })
for scanner.Scan() { for scanner.Scan() {
data := scanner.Text() data := scanner.Text()
s := &core.CustomSender{ s := &core.CustomSender{
+36 -34
View File
@@ -1,16 +1,16 @@
declare class Sender { declare class Sender {
uuid: string; private uuid;
private destoried; private destoried;
constructor(uuid: string); constructor(uuid: string);
destructor(): void; destroy(): void;
getUserId(): Promise<string | undefined>; getUserId(): Promise<string>;
getUserName(): Promise<string | undefined>; getUserName(): Promise<string>;
getChatId(): Promise<string | undefined>; getChatId(): Promise<string>;
getChatName(): Promise<string | undefined>; getChatName(): Promise<string>;
getMessageId(): Promise<string | undefined>; getMessageId(): Promise<string>;
getPlatform(): Promise<string | undefined>; getPlatform(): Promise<string>;
getBotId(): Promise<string | undefined>; getBotId(): Promise<string>;
getContent(): Promise<string | undefined>; getContent(): Promise<string>;
param(key: number | string): Promise<string>; param(key: number | string): Promise<string>;
setContent(content: string): Promise<undefined>; setContent(content: string): Promise<undefined>;
continue(): Promise<undefined>; continue(): Promise<undefined>;
@@ -27,15 +27,14 @@ declare class Sender {
prohibit_groups?: string[]; prohibit_groups?: string[];
allow_users?: string[]; allow_users?: string[];
prohibit_users?: string[]; prohibit_users?: string[];
persistent?: boolean;
}): Promise<Sender | undefined>; }): Promise<Sender | undefined>;
holdOn(str: string): string; holdOn(str: string): string;
reply(content: string): Promise<string | undefined>; reply(content: string): Promise<string>;
action(options: any): Promise<any | undefined>; doAction(options: Record<string, any>): Promise<any>;
event(): Promise<any | undefined>; getEvent(): Promise<Record<string, any>>;
} }
declare class Bucket { declare class Bucket {
name: string; private name;
constructor(name: string); constructor(name: string);
transform(v: string | undefined): string | number | boolean | undefined; transform(v: string | undefined): string | number | boolean | undefined;
reverseTransform(value: any): string; reverseTransform(value: any): string;
@@ -44,19 +43,19 @@ declare class Bucket {
message?: string; message?: string;
changed?: boolean; changed?: boolean;
}>; }>;
getAll(): Promise<any>; getAll(): Promise<Record<string, any>>;
delete(key: string): Promise<{ delete(key: string): Promise<{
message?: string | undefined; message?: string;
changed?: boolean | undefined; changed?: boolean;
}>; }>;
deleteAll(): Promise<undefined>; deleteAll(): Promise<undefined>;
keys(): Promise<string[] | undefined>; keys(): Promise<string[]>;
len(): Promise<number | undefined>; len(): Promise<number>;
buckets(): Promise<string[] | undefined>; buckets(): Promise<string[]>;
watch(key: string, handle: (old: any, now: any, key: string) => StorageFinal | void | any): void; watch(key: string, handle: (old: any, now: any, key: string) => StorageModifier | void): void;
_name(): Promise<string>; getName(): Promise<string>;
} }
interface StorageFinal { interface StorageModifier {
echo?: string; echo?: string;
now?: any; now?: any;
message?: string; message?: string;
@@ -71,28 +70,31 @@ interface Message {
chat_name?: string; chat_name?: string;
} }
declare class Adapter { declare class Adapter {
platform: string | undefined; platform: string;
bot_id: string | undefined; bot_id: string;
call: any; call: any;
constructor(options: { constructor(options: {
platform?: string; platform: string;
bot_id?: string; bot_id: string;
replyHandler?: (message: Message) => string | undefined | Promise<string | undefined>; replyHandler?: (message: Message) => Promise<string | undefined>;
actionHandler?: (message: Message) => string | undefined | Promise<string | undefined>; actionHandler?: (message: Message) => Promise<string | undefined>;
}); });
setActionHandler(func: (action: {}) => any): void; receive(message: Message): Promise<undefined>;
receive(message: Message): Promise<Sender>;
push(message: Message): Promise<string>; push(message: Message): Promise<string>;
destroy(): Promise<void>; destroy(): Promise<void>;
sender(options: any): Promise<Sender>; sender(options: any): Promise<Sender>;
} }
declare let sender: Sender; declare let sender: Sender;
declare function sleep(ms: number | undefined): Promise<unknown>; declare function sleep(ms?: number): Promise<unknown>;
interface CQItem { interface CQItem {
type: string; type: string;
params: {}; params: Record<string, string>;
}
interface CQParams {
[key: string]: string | number | boolean;
} }
declare let utils: { declare let utils: {
buildCQTag: (type: string, params: CQParams, prefix?: string) => string;
parseCQText: (text: string, prefix?: string) => (string | CQItem)[]; parseCQText: (text: string, prefix?: string) => (string | CQItem)[];
}; };
declare let console: { declare let console: {
+144 -122
View File
@@ -26,14 +26,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.console = exports.utils = exports.sleep = exports.sender = exports.Bucket = exports.Adapter = void 0; exports.console = exports.utils = exports.sleep = exports.sender = exports.Bucket = exports.Adapter = void 0;
const srpc_1 = require("./srpc"); const srpc_1 = require("./srpc");
const grpc_1 = __importStar(require("@grpc/grpc-js")); const grpc_1 = __importStar(require("@grpc/grpc-js"));
const util_1 = require("util");
grpc_1.setLogVerbosity(grpc_1.logVerbosity.NONE);
let client = new srpc_1.srpc.SillyGirlServiceClient("localhost:50051", grpc_1.credentials.createInsecure()); let client = new srpc_1.srpc.SillyGirlServiceClient("localhost:50051", grpc_1.credentials.createInsecure());
let senders = []; let senders = [];
let plugin_id = process.env?.PLUGIN_ID ?? ""; let plugin_id = process.env?.PLUGIN_ID ?? "";
process.on("beforeExit", () => { const metadata = new grpc_1.Metadata();
for (let sender of senders) { metadata.add("RUNTIME_ID", process.env?.RUNTIME_ID ?? "");
sender.destructor();
}
});
class Sender { class Sender {
uuid; uuid;
destoried = false; destoried = false;
@@ -41,22 +40,22 @@ class Sender {
this.uuid = uuid; this.uuid = uuid;
senders.push(this); senders.push(this);
} }
destructor() { destroy() {
if (this.destoried) if (this.destoried)
return; return;
this.destoried = true; this.destoried = true;
client.SenderDestroy(new srpc_1.srpc.ReplyRequest({ uuid: sender.uuid }), (err, resp) => { }); client.SenderDestroy(new srpc_1.srpc.ReplyRequest({ uuid: sender.uuid }), metadata, (err, resp) => { });
} }
async getUserId() { async getUserId() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderGetUserId(new srpc_1.srpc.SenderRequest({ client.SenderGetUserId(new srpc_1.srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), (err, resp) => { }), metadata, (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} }
else { else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
}); });
}); });
@@ -65,12 +64,12 @@ class Sender {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderGetUserName(new srpc_1.srpc.SenderRequest({ client.SenderGetUserName(new srpc_1.srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), (err, resp) => { }), metadata, (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} }
else { else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
}); });
}); });
@@ -79,12 +78,12 @@ class Sender {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderGetChatId(new srpc_1.srpc.SenderRequest({ client.SenderGetChatId(new srpc_1.srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), (err, resp) => { }), metadata, (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} }
else { else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
}); });
}); });
@@ -93,12 +92,12 @@ class Sender {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderGetChatName(new srpc_1.srpc.SenderRequest({ client.SenderGetChatName(new srpc_1.srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), (err, resp) => { }), metadata, (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} }
else { else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
}); });
}); });
@@ -107,12 +106,12 @@ class Sender {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderGetMessageId(new srpc_1.srpc.SenderRequest({ client.SenderGetMessageId(new srpc_1.srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), (err, resp) => { }), metadata, (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} }
else { else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
}); });
}); });
@@ -121,12 +120,12 @@ class Sender {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderGetPlatform(new srpc_1.srpc.SenderRequest({ client.SenderGetPlatform(new srpc_1.srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), (err, resp) => { }), metadata, (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} }
else { else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
}); });
}); });
@@ -135,12 +134,12 @@ class Sender {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderGetBotId(new srpc_1.srpc.SenderRequest({ client.SenderGetBotId(new srpc_1.srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), (err, resp) => { }), metadata, (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} }
else { else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
}); });
}); });
@@ -149,12 +148,12 @@ class Sender {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderGetContent(new srpc_1.srpc.SenderRequest({ client.SenderGetContent(new srpc_1.srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), (err, resp) => { }), metadata, (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} }
else { else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
}); });
}); });
@@ -164,7 +163,7 @@ class Sender {
client.SenderParam(new srpc_1.srpc.ReplyRequest({ client.SenderParam(new srpc_1.srpc.ReplyRequest({
uuid: this.uuid, uuid: this.uuid,
content: `${key}`, content: `${key}`,
}), (err, resp) => { }), metadata, (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} }
@@ -179,7 +178,7 @@ class Sender {
client.SenderSetContent(new srpc_1.srpc.SenderContentRequest({ client.SenderSetContent(new srpc_1.srpc.SenderContentRequest({
uuid: this.uuid, uuid: this.uuid,
content, content,
}), (err, resp) => { }), metadata, (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} }
@@ -193,7 +192,7 @@ class Sender {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderContinue(new srpc_1.srpc.SenderRequest({ client.SenderContinue(new srpc_1.srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), (err, resp) => { }), metadata, (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} }
@@ -217,21 +216,18 @@ class Sender {
timeout: options?.timeout, timeout: options?.timeout,
listen_private: options?.listen_private, listen_private: options?.listen_private,
listen_group: options?.listen_group, listen_group: options?.listen_group,
allow_platforms: options?.allow_platforms, allow_platforms: options?.allow_platforms ?? [],
prohibit_platforms: options?.prohibit_platforms, prohibit_platforms: options?.prohibit_platforms ?? [],
allow_groups: options?.allow_groups, allow_groups: options?.allow_groups,
prohibit_groups: options?.prohibit_groups, prohibit_groups: options?.prohibit_groups,
allow_users: options?.allow_users, allow_users: options?.allow_users,
prohibit_users: options?.prohibit_users, prohibit_users: options?.prohibit_users,
persistent: options?.persistent,
plugin_id, plugin_id,
}; };
if (!this.uuid) { if (!this.uuid) {
params.persistent = true; params.persistent = true;
} }
const call = client.SenderListen(); const call = client.SenderListen(metadata);
// let callback: any = options.replyHandler;
// console.log("===",this.uuid)
call.on("data", (response) => { call.on("data", (response) => {
if (response.echo == "END") { if (response.echo == "END") {
call.cancel(); call.cancel();
@@ -239,74 +235,54 @@ class Sender {
} }
let s = response.uuid ? new Sender(response.uuid) : undefined; let s = response.uuid ? new Sender(response.uuid) : undefined;
if (options?.handle && s) { if (options?.handle && s) {
// console.log(`options?.handle`, options.persistent) try {
let obj = options?.handle(s); let obj = options?.handle(s);
if (typeof obj == "string") { if (typeof obj == "string") {
call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo,
value: obj,
}));
}
else if (obj) {
obj
.then((v) => {
call.write(new srpc_1.srpc.SenderListenRequest({ call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo, uuid: response.echo,
value: v ?? "", value: obj,
})); }));
}) }
.catch((e) => { else if (obj) {
obj
.then((v) => {
call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo,
value: v ?? "",
}));
})
.catch((e) => {
console.error(e);
call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo,
value: "",
}));
});
}
else {
call.write(new srpc_1.srpc.SenderListenRequest({ call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo, uuid: response.echo,
value: "", value: "",
})); }));
}); }
} }
else { catch (e) {
call.write(new srpc_1.srpc.SenderListenRequest({ console.error(e);
uuid: response.echo,
value: "",
}));
} }
// console.log(`options?.handle`, options.persistent)
} }
else { else {
// console.log(`call.cancel()`, options?.persistent)
call.write(new srpc_1.srpc.SenderListenRequest({ call.write(new srpc_1.srpc.SenderListenRequest({
uuid: response.echo, uuid: response.echo,
value: "", value: "",
})); }));
// console.log(`call.cancel()`, options?.persistent)
} }
// console.log("response", JSON.stringify(response));
// call.cancel()
resolve(s); resolve(s);
}); });
call.on("error", (err) => { call.on("error", (err) => {
reject(err); reject(err);
// console.error(err);
}); });
// console.log("params", JSON.stringify(params));
call.write(new srpc_1.srpc.SenderListenRequest(params)); call.write(new srpc_1.srpc.SenderListenRequest(params));
} });
// client.SenderListen(new srpc.SenderListenRequest(params), (err, resp) => {
// if (err) {
// reject(err);
// } else {
// if (resp?.value) {
// let handle = options?.handle;
// let s = new Sender(resp.value);
// resolve(s);
// if (handle) {
// handle(s);
// }
// } else {
// reject(new Error("timeout"));
// }
// }
// });
// }
);
} }
holdOn(str) { holdOn(str) {
return "go_again_" + str; return "go_again_" + str;
@@ -316,33 +292,48 @@ class Sender {
client.SenderReply(new srpc_1.srpc.ReplyRequest({ client.SenderReply(new srpc_1.srpc.ReplyRequest({
uuid: this.uuid, uuid: this.uuid,
content, content,
}), (err, resp) => { }), metadata, (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} }
else { else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
}); });
}); });
} }
async action(options) { async doAction(options) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
console.log({
uuid: this.uuid,
content: JSON.stringify(options),
});
client.SenderAction(new srpc_1.srpc.ReplyRequest({ client.SenderAction(new srpc_1.srpc.ReplyRequest({
uuid: this.uuid, uuid: this.uuid,
content: JSON.stringify(options), content: JSON.stringify(options),
}), (err, resp) => { }), metadata, (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} }
else { else {
resolve(resp?.value); resolve(JSON.parse(resp?.value ?? "{}"));
} }
}); });
}); });
} }
async event() { async getEvent() {
return; return new Promise((resolve, reject) => {
client.SenderEvent(new srpc_1.srpc.SenderRequest({
uuid: this.uuid,
}), metadata, (err, resp) => {
if (err) {
reject(err);
}
else {
resolve(JSON.parse(resp?.value ?? "{}"));
}
});
});
} }
} }
class Bucket { class Bucket {
@@ -471,7 +462,7 @@ class Bucket {
reject(err); reject(err);
} }
else { else {
resolve(resp?.keys); resolve(resp?.keys ?? []);
} }
}); });
}); });
@@ -483,7 +474,7 @@ class Bucket {
reject(err); reject(err);
} }
else { else {
resolve(resp?.length); resolve(resp?.length ?? 0);
} }
}); });
}); });
@@ -495,7 +486,7 @@ class Bucket {
reject(err); reject(err);
} }
else { else {
resolve(resp?.buckets); resolve(resp?.buckets ?? []);
} }
}); });
}); });
@@ -504,7 +495,12 @@ class Bucket {
const call = client.BucketWatch(); const call = client.BucketWatch();
call.on("data", async (response) => { call.on("data", async (response) => {
let fin = handle(this.transform(response.old), this.transform(response.now), response.key); let fin = handle(this.transform(response.old), this.transform(response.now), response.key);
fin = await fin; try {
fin = await fin;
}
catch (e) {
console.error(e);
}
let result = { let result = {
echo: response.echo, echo: response.echo,
}; };
@@ -527,7 +523,7 @@ class Bucket {
plugin_id, plugin_id,
})); }));
} }
async _name() { async getName() {
return this.name; return this.name;
} }
} }
@@ -540,46 +536,47 @@ class Adapter {
this.platform = options.platform; this.platform = options.platform;
this.bot_id = options.bot_id; this.bot_id = options.bot_id;
if (options.replyHandler) { if (options.replyHandler) {
const call = client.AdapterRegist(); const call = client.AdapterRegist(metadata);
// let callback: any = ;
call.on("data", async (response) => { call.on("data", async (response) => {
// console.log("start on data")
let message = JSON.parse(response.value); let message = JSON.parse(response.value);
const { echo, __type__ } = message; const { echo, __type__ } = message;
delete message.__type__; delete message.__type__;
delete message.echo; delete message.echo;
if (__type__ == "reply" && options.replyHandler) { if (__type__ == "reply" && options.replyHandler) {
let v = (await options.replyHandler(message)) ?? ""; try {
call.write(new srpc_1.srpc.AdapterRegistRequest({ let v = (await options.replyHandler(message)) ?? "";
bot_id: echo, call.write(new srpc_1.srpc.AdapterRegistRequest({
platform: v, bot_id: echo,
})); platform: v,
}));
}
catch (e) {
console.error(e);
}
} }
if (__type__ == "action" && options.actionHandler) { if (__type__ == "action" && options.actionHandler) {
let v = await options.actionHandler(message); try {
call.write(new srpc_1.srpc.AdapterRegistRequest({ let v = await options.actionHandler(message);
bot_id: echo, call.write(new srpc_1.srpc.AdapterRegistRequest({
platform: v, bot_id: echo,
})); platform: v,
}));
}
catch (e) {
console.error(e);
}
} }
// console.log("end on data")
}); });
call.on("error", (err) => { call.on("error", (err) => {
console.error("adapter disc", err); console.error("adapter disc", err);
}); });
// console.log("before write")
call.write(new srpc_1.srpc.AdapterRegistRequest({ call.write(new srpc_1.srpc.AdapterRegistRequest({
bot_id: options.bot_id, bot_id: options.bot_id,
platform: options.platform, platform: options.platform,
})); }));
// console.log("after write write")
this.call = call; this.call = call;
} }
} }
setActionHandler(func) {
// 将从服务端不断接收action消息,并处理
// 事件处理巨饼
}
async receive(message) { async receive(message) {
//投递消息 //投递消息
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@@ -587,12 +584,12 @@ class Adapter {
platform: this.platform, platform: this.platform,
bot_id: this.bot_id, bot_id: this.bot_id,
value: JSON.stringify(message), value: JSON.stringify(message),
}), (err, resp) => { }), metadata, (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} }
else if (resp?.value) { else {
resolve(new Sender(resp.value)); resolve(undefined);
} }
}); });
}); });
@@ -604,7 +601,7 @@ class Adapter {
platform: this.platform, platform: this.platform,
bot_id: this.bot_id, bot_id: this.bot_id,
value: JSON.stringify(message), value: JSON.stringify(message),
}), (err, resp) => { }), metadata, (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} }
@@ -623,7 +620,7 @@ class Adapter {
platform: this.platform, platform: this.platform,
bot_id: this.bot_id, bot_id: this.bot_id,
value: JSON.stringify(options), value: JSON.stringify(options),
}), (err, resp) => { }), metadata, (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} }
@@ -637,7 +634,7 @@ class Adapter {
exports.Adapter = Adapter; exports.Adapter = Adapter;
let sender = new Sender(process.env?.SENDER_ID ?? ""); let sender = new Sender(process.env?.SENDER_ID ?? "");
exports.sender = sender; exports.sender = sender;
async function sleep(ms) { async function sleep(ms = 1000) {
return new Promise((resolve) => setTimeout(resolve, ms)); return new Promise((resolve) => setTimeout(resolve, ms));
} }
exports.sleep = sleep; exports.sleep = sleep;
@@ -648,6 +645,17 @@ class Console {
debug = (message, ...optionalParams) => { }; debug = (message, ...optionalParams) => { };
} }
let utils = { let utils = {
buildCQTag: (type, params, prefix = "CQ") => {
const paramStrings = [];
for (const key in params) {
const value = params[key];
const paramString = `${key}=${value}`;
paramStrings.push(paramString);
}
const paramString = paramStrings.join(",");
const cqString = `[${prefix}:${type}${paramString ? "," + paramString : ""}]`;
return cqString;
},
parseCQText: (text, prefix = "CQ") => { parseCQText: (text, prefix = "CQ") => {
const cqRegex = new RegExp(`\\[${prefix}:(\\w+)(.*?)\\]`, "g"); const cqRegex = new RegExp(`\\[${prefix}:(\\w+)(.*?)\\]`, "g");
const cqMatches = text.matchAll(cqRegex); const cqMatches = text.matchAll(cqRegex);
@@ -679,23 +687,37 @@ let utils = {
}, },
}; };
exports.utils = utils; exports.utils = utils;
let slog = (type, ...args) => { };
let console = { let console = {
log(...args) { log(...args) {
const content = args.reduce((acc, arg) => acc + " " + arg, ""); client.Console(new srpc_1.srpc.ConsoleRequest({
client.Console(new srpc_1.srpc.ConsoleRequest({ type: "log", content, plugin_id }), (err, resp) => { }); type: "log",
content: (0, util_1.format)(...args),
plugin_id,
}), (err, resp) => { });
}, },
info(...args) { info(...args) {
const content = args.reduce((acc, arg) => acc + " " + arg, ""); const content = args.reduce((acc, arg) => acc + " " + arg, "");
client.Console(new srpc_1.srpc.ConsoleRequest({ type: "info", content, plugin_id }), (err, resp) => { }); client.Console(new srpc_1.srpc.ConsoleRequest({
type: "info",
content: (0, util_1.format)(...args),
plugin_id,
}), (err, resp) => { });
}, },
error(...args) { error(...args) {
const content = args.reduce((acc, arg) => acc + " " + arg, ""); const content = args.reduce((acc, arg) => acc + " " + arg, "");
client.Console(new srpc_1.srpc.ConsoleRequest({ type: "error", content, plugin_id }), (err, resp) => { }); client.Console(new srpc_1.srpc.ConsoleRequest({
type: "error",
content: (0, util_1.format)(...args),
plugin_id,
}), (err, resp) => { });
}, },
debug(...args) { debug(...args) {
const content = args.reduce((acc, arg) => acc + " " + arg, ""); const content = args.reduce((acc, arg) => acc + " " + arg, "");
client.Console(new srpc_1.srpc.ConsoleRequest({ type: "debug", content, plugin_id }), (err, resp) => { }); client.Console(new srpc_1.srpc.ConsoleRequest({
type: "debug",
content: (0, util_1.format)(...args),
plugin_id,
}), (err, resp) => { });
}, },
}; };
exports.console = console; exports.console = console;
+200 -167
View File
@@ -1,5 +1,8 @@
import { srpc } from "./srpc"; import { srpc } from "./srpc";
import * as grpc_1 from "@grpc/grpc-js"; import * as grpc_1 from "@grpc/grpc-js";
import { format } from "util";
grpc_1.setLogVerbosity(grpc_1.logVerbosity.NONE);
let client = new srpc.SillyGirlServiceClient( let client = new srpc.SillyGirlServiceClient(
"localhost:50051", "localhost:50051",
@@ -8,153 +11,156 @@ let client = new srpc.SillyGirlServiceClient(
let senders: Sender[] = []; let senders: Sender[] = [];
let plugin_id = process.env?.PLUGIN_ID ?? ""; let plugin_id = process.env?.PLUGIN_ID ?? "";
const metadata = new grpc_1.Metadata();
process.on("beforeExit", () => { metadata.add("RUNTIME_ID", process.env?.RUNTIME_ID ?? "");
for (let sender of senders) {
sender.destructor();
}
});
class Sender { class Sender {
public uuid: string; private uuid: string;
private destoried = false; private destoried = false;
constructor(uuid: string) { constructor(uuid: string) {
this.uuid = uuid; this.uuid = uuid;
senders.push(this); senders.push(this);
} }
destroy() {
destructor() {
if (this.destoried) return; if (this.destoried) return;
this.destoried = true; this.destoried = true;
client.SenderDestroy( client.SenderDestroy(
new srpc.ReplyRequest({ uuid: sender.uuid }), new srpc.ReplyRequest({ uuid: sender.uuid }),
metadata,
(err, resp) => {} (err, resp) => {}
); );
} }
async getUserId(): Promise<string> {
async getUserId(): Promise<string | undefined> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderGetUserId( client.SenderGetUserId(
new srpc.SenderRequest({ new srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), }),
metadata,
(err, resp) => { (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} else { } else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
} }
); );
}); });
} }
async getUserName(): Promise<string | undefined> { async getUserName(): Promise<string> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderGetUserName( client.SenderGetUserName(
new srpc.SenderRequest({ new srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), }),
metadata,
(err, resp) => { (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} else { } else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
} }
); );
}); });
} }
async getChatId(): Promise<string | undefined> { async getChatId(): Promise<string> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderGetChatId( client.SenderGetChatId(
new srpc.SenderRequest({ new srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), }),
metadata,
(err, resp) => { (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} else { } else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
} }
); );
}); });
} }
async getChatName(): Promise<string | undefined> { async getChatName(): Promise<string> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderGetChatName( client.SenderGetChatName(
new srpc.SenderRequest({ new srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), }),
metadata,
(err, resp) => { (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} else { } else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
} }
); );
}); });
} }
async getMessageId(): Promise<string | undefined> { async getMessageId(): Promise<string> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderGetMessageId( client.SenderGetMessageId(
new srpc.SenderRequest({ new srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), }),
metadata,
(err, resp) => { (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} else { } else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
} }
); );
}); });
} }
async getPlatform(): Promise<string | undefined> { async getPlatform(): Promise<string> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderGetPlatform( client.SenderGetPlatform(
new srpc.SenderRequest({ new srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), }),
metadata,
(err, resp) => { (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} else { } else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
} }
); );
}); });
} }
async getBotId(): Promise<string | undefined> { async getBotId(): Promise<string> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderGetBotId( client.SenderGetBotId(
new srpc.SenderRequest({ new srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), }),
metadata,
(err, resp) => { (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} else { } else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
} }
); );
}); });
} }
async getContent(): Promise<string | undefined> { async getContent(): Promise<string> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderGetContent( client.SenderGetContent(
new srpc.SenderRequest({ new srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), }),
metadata,
(err, resp) => { (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} else { } else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
} }
); );
@@ -167,6 +173,7 @@ class Sender {
uuid: this.uuid, uuid: this.uuid,
content: `${key}`, content: `${key}`,
}), }),
metadata,
(err, resp) => { (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
@@ -184,6 +191,7 @@ class Sender {
uuid: this.uuid, uuid: this.uuid,
content, content,
}), }),
metadata,
(err, resp) => { (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
@@ -200,6 +208,7 @@ class Sender {
new srpc.SenderRequest({ new srpc.SenderRequest({
uuid: this.uuid, uuid: this.uuid,
}), }),
metadata,
(err, resp) => { (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
@@ -210,7 +219,7 @@ class Sender {
); );
}); });
} }
async getAdapter() { async getAdapter(): Promise<Adapter> {
return new Adapter({ return new Adapter({
bot_id: await this.getBotId(), bot_id: await this.getBotId(),
platform: await this.getPlatform(), platform: await this.getPlatform(),
@@ -229,39 +238,34 @@ class Sender {
prohibit_groups?: string[]; // 群聊黑名单 prohibit_groups?: string[]; // 群聊黑名单
allow_users?: string[]; // 用户白名单 allow_users?: string[]; // 用户白名单
prohibit_users?: string[]; // 群聊白名单 prohibit_users?: string[]; // 群聊白名单
persistent?: boolean; //持久化监听
}): Promise<Sender | undefined> { }): Promise<Sender | undefined> {
return new Promise( return new Promise(async (resolve, reject) => {
async (resolve, reject) => { let params: any = {
let params: any = { uuid: this.uuid,
uuid: this.uuid, rules: options?.rules,
rules: options?.rules, timeout: options?.timeout,
timeout: options?.timeout, listen_private: options?.listen_private,
listen_private: options?.listen_private, listen_group: options?.listen_group,
listen_group: options?.listen_group, allow_platforms: options?.allow_platforms ?? [],
allow_platforms: options?.allow_platforms, prohibit_platforms: options?.prohibit_platforms ?? [],
prohibit_platforms: options?.prohibit_platforms, allow_groups: options?.allow_groups,
allow_groups: options?.allow_groups, prohibit_groups: options?.prohibit_groups,
prohibit_groups: options?.prohibit_groups, allow_users: options?.allow_users,
allow_users: options?.allow_users, prohibit_users: options?.prohibit_users,
prohibit_users: options?.prohibit_users, plugin_id,
persistent: options?.persistent, };
plugin_id, if (!this.uuid) {
}; params.persistent = true;
if (!this.uuid) { }
params.persistent = true; const call = client.SenderListen(metadata);
call.on("data", (response) => {
if (response.echo == "END") {
call.cancel();
return;
} }
const call = client.SenderListen(); let s = response.uuid ? new Sender(response.uuid) : undefined;
// let callback: any = options.replyHandler; if (options?.handle && s) {
// console.log("===",this.uuid) try {
call.on("data", (response) => {
if (response.echo == "END") {
call.cancel();
return;
}
let s = response.uuid ? new Sender(response.uuid) : undefined;
if (options?.handle && s) {
// console.log(`options?.handle`, options.persistent)
let obj = options?.handle(s); let obj = options?.handle(s);
if (typeof obj == "string") { if (typeof obj == "string") {
call.write( call.write(
@@ -281,6 +285,7 @@ class Sender {
); );
}) })
.catch((e) => { .catch((e) => {
console.error(e);
call.write( call.write(
new srpc.SenderListenRequest({ new srpc.SenderListenRequest({
uuid: response.echo, uuid: response.echo,
@@ -296,96 +301,92 @@ class Sender {
}) })
); );
} }
// console.log(`options?.handle`, options.persistent) } catch (e) {
} else { console.error(e);
// console.log(`call.cancel()`, options?.persistent)
call.write(
new srpc.SenderListenRequest({
uuid: response.echo,
value: "",
})
);
// console.log(`call.cancel()`, options?.persistent)
} }
// console.log("response", JSON.stringify(response)); } else {
// call.cancel() call.write(
resolve(s); new srpc.SenderListenRequest({
}); uuid: response.echo,
call.on("error", (err) => { value: "",
reject(err); })
// console.error(err); );
}); }
// console.log("params", JSON.stringify(params)); resolve(s);
call.write(new srpc.SenderListenRequest(params)); });
} call.on("error", (err) => {
// client.SenderListen(new srpc.SenderListenRequest(params), (err, resp) => { reject(err);
// if (err) { });
// reject(err); call.write(new srpc.SenderListenRequest(params));
// } else { });
// if (resp?.value) {
// let handle = options?.handle;
// let s = new Sender(resp.value);
// resolve(s);
// if (handle) {
// handle(s);
// }
// } else {
// reject(new Error("timeout"));
// }
// }
// });
// }
);
} }
holdOn(str: string) { holdOn(str: string) {
return "go_again_" + str; return "go_again_" + str;
} }
async reply(content: string): Promise<string | undefined> { async reply(content: string): Promise<string> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.SenderReply( client.SenderReply(
new srpc.ReplyRequest({ new srpc.ReplyRequest({
uuid: this.uuid, uuid: this.uuid,
content, content,
}), }),
metadata,
(err, resp) => { (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} else { } else {
resolve(resp?.value); resolve(resp?.value ?? "");
} }
} }
); );
}); });
} }
async action(options: any): Promise<any | undefined> { async doAction(options: Record<string, any>): Promise<any> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
console.log({
uuid: this.uuid,
content: JSON.stringify(options),
});
client.SenderAction( client.SenderAction(
new srpc.ReplyRequest({ new srpc.ReplyRequest({
uuid: this.uuid, uuid: this.uuid,
content: JSON.stringify(options), content: JSON.stringify(options),
}), }),
metadata,
(err, resp) => { (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} else { } else {
resolve(resp?.value); resolve(JSON.parse(resp?.value ?? "{}"));
} }
} }
); );
}); });
} }
async event(): Promise<any | undefined> { async getEvent(): Promise<Record<string, any>> {
return; return new Promise((resolve, reject) => {
client.SenderEvent(
new srpc.SenderRequest({
uuid: this.uuid,
}),
metadata,
(err, resp) => {
if (err) {
reject(err);
} else {
resolve(JSON.parse(resp?.value ?? "{}"));
}
}
);
});
} }
} }
class Bucket { class Bucket {
name: string; private name: string;
constructor(name: string) { constructor(name: string) {
this.name = name; this.name = name;
} }
transform(v: string | undefined) { transform(v: string | undefined) {
if (!v) { if (!v) {
return undefined; return undefined;
@@ -477,7 +478,7 @@ class Bucket {
}); });
} }
async getAll(): Promise<any> { async getAll(): Promise<Record<string, any>> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.BucketGetAll( client.BucketGetAll(
new srpc.BucketRequest({ name: this.name }), new srpc.BucketRequest({ name: this.name }),
@@ -500,8 +501,8 @@ class Bucket {
} }
async delete(key: string): Promise<{ async delete(key: string): Promise<{
message?: string | undefined; message?: string;
changed?: boolean | undefined; changed?: boolean;
}> { }> {
return this.set(key, ""); return this.set(key, "");
} }
@@ -521,7 +522,7 @@ class Bucket {
}); });
} }
async keys(): Promise<string[] | undefined> { async keys(): Promise<string[]> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.BucketKeys( client.BucketKeys(
new srpc.BucketRequest({ name: this.name }), new srpc.BucketRequest({ name: this.name }),
@@ -529,14 +530,14 @@ class Bucket {
if (err) { if (err) {
reject(err); reject(err);
} else { } else {
resolve(resp?.keys); resolve(resp?.keys ?? []);
} }
} }
); );
}); });
} }
async len(): Promise<number | undefined> { async len(): Promise<number> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.BucketLen( client.BucketLen(
new srpc.BucketRequest({ name: this.name }), new srpc.BucketRequest({ name: this.name }),
@@ -544,20 +545,20 @@ class Bucket {
if (err) { if (err) {
reject(err); reject(err);
} else { } else {
resolve(resp?.length); resolve(resp?.length ?? 0);
} }
} }
); );
}); });
} }
async buckets(): Promise<string[] | undefined> { async buckets(): Promise<string[]> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
client.BucketBuckets(new srpc.Empty(), (err, resp) => { client.BucketBuckets(new srpc.Empty(), (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} else { } else {
resolve(resp?.buckets); resolve(resp?.buckets ?? []);
} }
}); });
}); });
@@ -565,7 +566,7 @@ class Bucket {
watch( watch(
key: string, key: string,
handle: (old: any, now: any, key: string) => StorageFinal | void | any handle: (old: any, now: any, key: string) => StorageModifier | void
) { ) {
const call = client.BucketWatch(); const call = client.BucketWatch();
call.on("data", async (response) => { call.on("data", async (response) => {
@@ -574,8 +575,12 @@ class Bucket {
this.transform(response.now), this.transform(response.now),
response.key response.key
); );
fin = await fin; try {
let result: StorageFinal = { fin = await fin;
} catch (e) {
console.error(e);
}
let result: StorageModifier = {
echo: response.echo, echo: response.echo,
}; };
if (!fin) { if (!fin) {
@@ -599,11 +604,11 @@ class Bucket {
); );
} }
async _name(): Promise<string> { async getName(): Promise<string> {
return this.name; return this.name;
} }
} }
interface StorageFinal { interface StorageModifier {
echo?: string; echo?: string;
now?: any; now?: any;
message?: string; message?: string;
@@ -620,82 +625,78 @@ interface Message {
} }
class Adapter { class Adapter {
platform: string | undefined; platform: string;
bot_id: string | undefined; bot_id: string;
call: any; call: any;
constructor(options: { constructor(options: {
platform?: string; platform: string;
bot_id?: string; bot_id: string;
replyHandler?: ( replyHandler?: (message: Message) => Promise<string | undefined>;
message: Message actionHandler?: (message: Message) => Promise<string | undefined>;
) => string | undefined | Promise<string | undefined>;
actionHandler?: (
message: Message
) => string | undefined | Promise<string | undefined>;
}) { }) {
this.platform = options.platform; this.platform = options.platform;
this.bot_id = options.bot_id; this.bot_id = options.bot_id;
if (options.replyHandler) { if (options.replyHandler) {
const call = client.AdapterRegist(); const call = client.AdapterRegist(metadata);
// let callback: any = ;
call.on("data", async (response) => { call.on("data", async (response) => {
// console.log("start on data")
let message = JSON.parse(response.value); let message = JSON.parse(response.value);
const { echo, __type__ } = message; const { echo, __type__ } = message;
delete message.__type__; delete message.__type__;
delete message.echo; delete message.echo;
if (__type__ == "reply" && options.replyHandler) { if (__type__ == "reply" && options.replyHandler) {
let v = (await options.replyHandler(message)) ?? ""; try {
call.write( let v = (await options.replyHandler(message)) ?? "";
new srpc.AdapterRegistRequest({ call.write(
bot_id: echo, new srpc.AdapterRegistRequest({
platform: v, bot_id: echo,
}) platform: v,
); })
);
} catch (e) {
console.error(e);
}
} }
if (__type__ == "action" && options.actionHandler) { if (__type__ == "action" && options.actionHandler) {
let v = await options.actionHandler(message); try {
call.write( let v = await options.actionHandler(message);
new srpc.AdapterRegistRequest({ call.write(
bot_id: echo, new srpc.AdapterRegistRequest({
platform: v, bot_id: echo,
}) platform: v,
); })
);
} catch (e) {
console.error(e);
}
} }
// console.log("end on data")
}); });
call.on("error", (err) => { call.on("error", (err) => {
console.error("adapter disc", err); console.error("adapter disc", err);
}); });
// console.log("before write")
call.write( call.write(
new srpc.AdapterRegistRequest({ new srpc.AdapterRegistRequest({
bot_id: options.bot_id, bot_id: options.bot_id,
platform: options.platform, platform: options.platform,
}) })
); );
// console.log("after write write")
this.call = call; this.call = call;
} }
} }
setActionHandler(func: (action: {}) => any): void { async receive(message: Message): Promise<undefined> {
// 将从服务端不断接收action消息,并处理
// 事件处理巨饼
}
async receive(message: Message): Promise<Sender> {
//投递消息 //投递消息
return new Promise<Sender>((resolve, reject) => { return new Promise<undefined>((resolve, reject) => {
client.AdapterReceive( client.AdapterReceive(
new srpc.AdapterRequest({ new srpc.AdapterRequest({
platform: this.platform, platform: this.platform,
bot_id: this.bot_id, bot_id: this.bot_id,
value: JSON.stringify(message), value: JSON.stringify(message),
}), }),
metadata,
(err, resp) => { (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
} else if (resp?.value) { } else {
resolve(new Sender(resp.value)); resolve(undefined);
} }
} }
); );
@@ -710,6 +711,7 @@ class Adapter {
bot_id: this.bot_id, bot_id: this.bot_id,
value: JSON.stringify(message), value: JSON.stringify(message),
}), }),
metadata,
(err, resp) => { (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
@@ -731,6 +733,7 @@ class Adapter {
bot_id: this.bot_id, bot_id: this.bot_id,
value: JSON.stringify(options), value: JSON.stringify(options),
}), }),
metadata,
(err, resp) => { (err, resp) => {
if (err) { if (err) {
reject(err); reject(err);
@@ -745,7 +748,7 @@ class Adapter {
let sender: Sender = new Sender(process.env?.SENDER_ID ?? ""); let sender: Sender = new Sender(process.env?.SENDER_ID ?? "");
async function sleep(ms: number | undefined) { async function sleep(ms = 1000) {
return new Promise((resolve) => setTimeout(resolve, ms)); return new Promise((resolve) => setTimeout(resolve, ms));
} }
@@ -758,10 +761,27 @@ class Console {
interface CQItem { interface CQItem {
type: string; type: string;
params: {}; params: Record<string, string>;
}
interface CQParams {
[key: string]: string | number | boolean;
} }
let utils = { let utils = {
buildCQTag: (type: string, params: CQParams, prefix = "CQ"): string => {
const paramStrings: string[] = [];
for (const key in params) {
const value = params[key];
const paramString = `${key}=${value}`;
paramStrings.push(paramString);
}
const paramString = paramStrings.join(",");
const cqString = `[${prefix}:${type}${
paramString ? "," + paramString : ""
}]`;
return cqString;
},
parseCQText: (text: string, prefix = "CQ") => { parseCQText: (text: string, prefix = "CQ") => {
const cqRegex = new RegExp(`\\[${prefix}:(\\w+)(.*?)\\]`, "g"); const cqRegex = new RegExp(`\\[${prefix}:(\\w+)(.*?)\\]`, "g");
const cqMatches = text.matchAll(cqRegex); const cqMatches = text.matchAll(cqRegex);
@@ -796,34 +816,47 @@ let utils = {
}, },
}; };
let slog = (type: string, ...args: any[]) => {};
let console = { let console = {
log(...args: any[]) { log(...args: any[]) {
const content = args.reduce((acc, arg) => acc + " " + arg, "");
client.Console( client.Console(
new srpc.ConsoleRequest({ type: "log", content, plugin_id }), new srpc.ConsoleRequest({
type: "log",
content: format(...args),
plugin_id,
}),
(err, resp) => {} (err, resp) => {}
); );
}, },
info(...args: any[]) { info(...args: any[]) {
const content = args.reduce((acc, arg) => acc + " " + arg, ""); const content = args.reduce((acc, arg) => acc + " " + arg, "");
client.Console( client.Console(
new srpc.ConsoleRequest({ type: "info", content, plugin_id }), new srpc.ConsoleRequest({
type: "info",
content: format(...args),
plugin_id,
}),
(err, resp) => {} (err, resp) => {}
); );
}, },
error(...args: any[]) { error(...args: any[]) {
const content = args.reduce((acc, arg) => acc + " " + arg, ""); const content = args.reduce((acc, arg) => acc + " " + arg, "");
client.Console( client.Console(
new srpc.ConsoleRequest({ type: "error", content, plugin_id }), new srpc.ConsoleRequest({
type: "error",
content: format(...args),
plugin_id,
}),
(err, resp) => {} (err, resp) => {}
); );
}, },
debug(...args: any[]) { debug(...args: any[]) {
const content = args.reduce((acc, arg) => acc + " " + arg, ""); const content = args.reduce((acc, arg) => acc + " " + arg, "");
client.Console( client.Console(
new srpc.ConsoleRequest({ type: "debug", content, plugin_id }), new srpc.ConsoleRequest({
type: "debug",
content: format(...args),
plugin_id,
}),
(err, resp) => {} (err, resp) => {}
); );
}, },
+4 -4
View File
@@ -802,8 +802,8 @@ export declare namespace srpc {
responseStream: boolean; responseStream: boolean;
requestSerialize: (message: AdapterRequest) => Buffer; requestSerialize: (message: AdapterRequest) => Buffer;
requestDeserialize: (bytes: Buffer) => AdapterRequest; requestDeserialize: (bytes: Buffer) => AdapterRequest;
responseSerialize: (message: Default) => Buffer; responseSerialize: (message: Empty) => Buffer;
responseDeserialize: (bytes: Buffer) => Default; responseDeserialize: (bytes: Buffer) => Empty;
}; };
AdapterPush: { AdapterPush: {
path: string; path: string;
@@ -868,7 +868,7 @@ export declare namespace srpc {
abstract SenderAction(call: grpc_1.ServerUnaryCall<ReplyRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void; abstract SenderAction(call: grpc_1.ServerUnaryCall<ReplyRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract SenderDestroy(call: grpc_1.ServerUnaryCall<ReplyRequest, Empty>, callback: grpc_1.sendUnaryData<Empty>): void; abstract SenderDestroy(call: grpc_1.ServerUnaryCall<ReplyRequest, Empty>, callback: grpc_1.sendUnaryData<Empty>): void;
abstract AdapterRegist(call: grpc_1.ServerDuplexStream<AdapterRegistRequest, Default>): void; abstract AdapterRegist(call: grpc_1.ServerDuplexStream<AdapterRegistRequest, Default>): void;
abstract AdapterReceive(call: grpc_1.ServerUnaryCall<AdapterRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void; abstract AdapterReceive(call: grpc_1.ServerUnaryCall<AdapterRequest, Empty>, callback: grpc_1.sendUnaryData<Empty>): void;
abstract AdapterPush(call: grpc_1.ServerUnaryCall<AdapterRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void; abstract AdapterPush(call: grpc_1.ServerUnaryCall<AdapterRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract AdapterDestroy(call: grpc_1.ServerUnaryCall<AdapterRequest, Empty>, callback: grpc_1.sendUnaryData<Empty>): void; abstract AdapterDestroy(call: grpc_1.ServerUnaryCall<AdapterRequest, Empty>, callback: grpc_1.sendUnaryData<Empty>): void;
abstract AdapterSender(call: grpc_1.ServerUnaryCall<AdapterRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void; abstract AdapterSender(call: grpc_1.ServerUnaryCall<AdapterRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
@@ -902,7 +902,7 @@ export declare namespace srpc {
SenderAction: GrpcUnaryServiceInterface<ReplyRequest, Default>; SenderAction: GrpcUnaryServiceInterface<ReplyRequest, Default>;
SenderDestroy: GrpcUnaryServiceInterface<ReplyRequest, Empty>; SenderDestroy: GrpcUnaryServiceInterface<ReplyRequest, Empty>;
AdapterRegist: GrpcChunkServiceInterface<AdapterRegistRequest, Default>; AdapterRegist: GrpcChunkServiceInterface<AdapterRegistRequest, Default>;
AdapterReceive: GrpcUnaryServiceInterface<AdapterRequest, Default>; AdapterReceive: GrpcUnaryServiceInterface<AdapterRequest, Empty>;
AdapterPush: GrpcUnaryServiceInterface<AdapterRequest, Default>; AdapterPush: GrpcUnaryServiceInterface<AdapterRequest, Default>;
AdapterDestroy: GrpcUnaryServiceInterface<AdapterRequest, Empty>; AdapterDestroy: GrpcUnaryServiceInterface<AdapterRequest, Empty>;
AdapterSender: GrpcUnaryServiceInterface<AdapterRequest, Default>; AdapterSender: GrpcUnaryServiceInterface<AdapterRequest, Default>;
+1 -1
View File
@@ -2166,7 +2166,7 @@ var srpc;
requestSerialize: (message) => Buffer.from(message.serialize()), requestSerialize: (message) => Buffer.from(message.serialize()),
requestDeserialize: (bytes) => AdapterRequest.deserialize(new Uint8Array(bytes)), requestDeserialize: (bytes) => AdapterRequest.deserialize(new Uint8Array(bytes)),
responseSerialize: (message) => Buffer.from(message.serialize()), responseSerialize: (message) => Buffer.from(message.serialize()),
responseDeserialize: (bytes) => Default.deserialize(new Uint8Array(bytes)) responseDeserialize: (bytes) => Empty.deserialize(new Uint8Array(bytes))
}, },
AdapterPush: { AdapterPush: {
path: "/srpc.SillyGirlService/AdapterPush", path: "/srpc.SillyGirlService/AdapterPush",
+1 -1
View File
@@ -145,7 +145,7 @@ service SillyGirlService {
rpc SenderAction (ReplyRequest) returns (Default); rpc SenderAction (ReplyRequest) returns (Default);
rpc SenderDestroy(ReplyRequest) returns (Empty); rpc SenderDestroy(ReplyRequest) returns (Empty);
rpc AdapterRegist(stream AdapterRegistRequest) returns (stream Default); rpc AdapterRegist(stream AdapterRegistRequest) returns (stream Default);
rpc AdapterReceive(AdapterRequest) returns (Default); rpc AdapterReceive(AdapterRequest) returns (Empty);
rpc AdapterPush(AdapterRequest) returns (Default); rpc AdapterPush(AdapterRequest) returns (Default);
rpc AdapterDestroy(AdapterRequest) returns (Empty); rpc AdapterDestroy(AdapterRequest) returns (Empty);
rpc AdapterSender(AdapterRequest) returns (Default); rpc AdapterSender(AdapterRequest) returns (Default);
+4 -4
View File
@@ -2404,8 +2404,8 @@ export namespace srpc {
responseStream: false, responseStream: false,
requestSerialize: (message: AdapterRequest) => Buffer.from(message.serialize()), requestSerialize: (message: AdapterRequest) => Buffer.from(message.serialize()),
requestDeserialize: (bytes: Buffer) => AdapterRequest.deserialize(new Uint8Array(bytes)), requestDeserialize: (bytes: Buffer) => AdapterRequest.deserialize(new Uint8Array(bytes)),
responseSerialize: (message: Default) => Buffer.from(message.serialize()), responseSerialize: (message: Empty) => Buffer.from(message.serialize()),
responseDeserialize: (bytes: Buffer) => Default.deserialize(new Uint8Array(bytes)) responseDeserialize: (bytes: Buffer) => Empty.deserialize(new Uint8Array(bytes))
}, },
AdapterPush: { AdapterPush: {
path: "/srpc.SillyGirlService/AdapterPush", path: "/srpc.SillyGirlService/AdapterPush",
@@ -2470,7 +2470,7 @@ export namespace srpc {
abstract SenderAction(call: grpc_1.ServerUnaryCall<ReplyRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void; abstract SenderAction(call: grpc_1.ServerUnaryCall<ReplyRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract SenderDestroy(call: grpc_1.ServerUnaryCall<ReplyRequest, Empty>, callback: grpc_1.sendUnaryData<Empty>): void; abstract SenderDestroy(call: grpc_1.ServerUnaryCall<ReplyRequest, Empty>, callback: grpc_1.sendUnaryData<Empty>): void;
abstract AdapterRegist(call: grpc_1.ServerDuplexStream<AdapterRegistRequest, Default>): void; abstract AdapterRegist(call: grpc_1.ServerDuplexStream<AdapterRegistRequest, Default>): void;
abstract AdapterReceive(call: grpc_1.ServerUnaryCall<AdapterRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void; abstract AdapterReceive(call: grpc_1.ServerUnaryCall<AdapterRequest, Empty>, callback: grpc_1.sendUnaryData<Empty>): void;
abstract AdapterPush(call: grpc_1.ServerUnaryCall<AdapterRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void; abstract AdapterPush(call: grpc_1.ServerUnaryCall<AdapterRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
abstract AdapterDestroy(call: grpc_1.ServerUnaryCall<AdapterRequest, Empty>, callback: grpc_1.sendUnaryData<Empty>): void; abstract AdapterDestroy(call: grpc_1.ServerUnaryCall<AdapterRequest, Empty>, callback: grpc_1.sendUnaryData<Empty>): void;
abstract AdapterSender(call: grpc_1.ServerUnaryCall<AdapterRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void; abstract AdapterSender(call: grpc_1.ServerUnaryCall<AdapterRequest, Default>, callback: grpc_1.sendUnaryData<Default>): void;
@@ -2555,7 +2555,7 @@ export namespace srpc {
AdapterRegist: GrpcChunkServiceInterface<AdapterRegistRequest, Default> = (metadata?: grpc_1.Metadata | grpc_1.CallOptions, options?: grpc_1.CallOptions): grpc_1.ClientDuplexStream<AdapterRegistRequest, Default> => { AdapterRegist: GrpcChunkServiceInterface<AdapterRegistRequest, Default> = (metadata?: grpc_1.Metadata | grpc_1.CallOptions, options?: grpc_1.CallOptions): grpc_1.ClientDuplexStream<AdapterRegistRequest, Default> => {
return super.AdapterRegist(metadata, options); return super.AdapterRegist(metadata, options);
}; };
AdapterReceive: GrpcUnaryServiceInterface<AdapterRequest, Default> = (message: AdapterRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback<Default>, options?: grpc_1.CallOptions | grpc_1.requestCallback<Default>, callback?: grpc_1.requestCallback<Default>): grpc_1.ClientUnaryCall => { AdapterReceive: GrpcUnaryServiceInterface<AdapterRequest, Empty> = (message: AdapterRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback<Empty>, options?: grpc_1.CallOptions | grpc_1.requestCallback<Empty>, callback?: grpc_1.requestCallback<Empty>): grpc_1.ClientUnaryCall => {
return super.AdapterReceive(message, metadata, options, callback); return super.AdapterReceive(message, metadata, options, callback);
}; };
AdapterPush: GrpcUnaryServiceInterface<AdapterRequest, Default> = (message: AdapterRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback<Default>, options?: grpc_1.CallOptions | grpc_1.requestCallback<Default>, callback?: grpc_1.requestCallback<Default>): grpc_1.ClientUnaryCall => { AdapterPush: GrpcUnaryServiceInterface<AdapterRequest, Default> = (message: AdapterRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback<Default>, options?: grpc_1.CallOptions | grpc_1.requestCallback<Default>, callback?: grpc_1.requestCallback<Default>): grpc_1.ClientUnaryCall => {
+19 -19
View File
@@ -1353,7 +1353,7 @@ var file_srpc_proto_rawDesc = []byte{
0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e,
0x74, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x69,
0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x49,
0x64, 0x32, 0x96, 0x0d, 0x0a, 0x10, 0x53, 0x69, 0x6c, 0x6c, 0x79, 0x47, 0x69, 0x72, 0x6c, 0x53, 0x64, 0x32, 0x94, 0x0d, 0x0a, 0x10, 0x53, 0x69, 0x6c, 0x6c, 0x79, 0x47, 0x69, 0x72, 0x6c, 0x53,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
0x47, 0x65, 0x74, 0x12, 0x16, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x47, 0x65, 0x74, 0x12, 0x16, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65,
0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72,
@@ -1442,24 +1442,24 @@ var file_srpc_proto_rawDesc = []byte{
0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x41,
0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75,
0x6c, 0x74, 0x28, 0x01, 0x30, 0x01, 0x12, 0x35, 0x0a, 0x0e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x6c, 0x74, 0x28, 0x01, 0x30, 0x01, 0x12, 0x33, 0x0a, 0x0e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65,
0x72, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e,
0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b,
0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x32, 0x0a, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x32, 0x0a, 0x0b, 0x41,
0x0b, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x50, 0x75, 0x73, 0x68, 0x12, 0x14, 0x2e, 0x73, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x50, 0x75, 0x73, 0x68, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70,
0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x63, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12,
0x74, 0x12, 0x33, 0x0a, 0x0e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x44, 0x65, 0x73, 0x74, 0x33, 0x0a, 0x0e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f,
0x72, 0x6f, 0x79, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x79, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72,
0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x45,
0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x0d, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x0d, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x53,
0x72, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x61,
0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72,
0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x2c, 0x0a, 0x07, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x2c, 0x0a, 0x07, 0x43, 0x6f,
0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e,
0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x73, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x73, 0x72,
0x73, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x07, 0x5a, 0x05, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x07, 0x5a, 0x05, 0x73, 0x72, 0x70, 0x63,
0x70, 0x63, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (
@@ -1553,7 +1553,7 @@ var file_srpc_proto_depIdxs = []int32{
1, // 52: srpc.SillyGirlService.SenderAction:output_type -> srpc.Default 1, // 52: srpc.SillyGirlService.SenderAction:output_type -> srpc.Default
0, // 53: srpc.SillyGirlService.SenderDestroy:output_type -> srpc.Empty 0, // 53: srpc.SillyGirlService.SenderDestroy:output_type -> srpc.Empty
1, // 54: srpc.SillyGirlService.AdapterRegist:output_type -> srpc.Default 1, // 54: srpc.SillyGirlService.AdapterRegist:output_type -> srpc.Default
1, // 55: srpc.SillyGirlService.AdapterReceive:output_type -> srpc.Default 0, // 55: srpc.SillyGirlService.AdapterReceive:output_type -> srpc.Empty
1, // 56: srpc.SillyGirlService.AdapterPush:output_type -> srpc.Default 1, // 56: srpc.SillyGirlService.AdapterPush:output_type -> srpc.Default
0, // 57: srpc.SillyGirlService.AdapterDestroy:output_type -> srpc.Empty 0, // 57: srpc.SillyGirlService.AdapterDestroy:output_type -> srpc.Empty
1, // 58: srpc.SillyGirlService.AdapterSender:output_type -> srpc.Default 1, // 58: srpc.SillyGirlService.AdapterSender:output_type -> srpc.Default
+5 -5
View File
@@ -80,7 +80,7 @@ type SillyGirlServiceClient interface {
SenderAction(ctx context.Context, in *ReplyRequest, opts ...grpc.CallOption) (*Default, error) SenderAction(ctx context.Context, in *ReplyRequest, opts ...grpc.CallOption) (*Default, error)
SenderDestroy(ctx context.Context, in *ReplyRequest, opts ...grpc.CallOption) (*Empty, error) SenderDestroy(ctx context.Context, in *ReplyRequest, opts ...grpc.CallOption) (*Empty, error)
AdapterRegist(ctx context.Context, opts ...grpc.CallOption) (SillyGirlService_AdapterRegistClient, error) AdapterRegist(ctx context.Context, opts ...grpc.CallOption) (SillyGirlService_AdapterRegistClient, error)
AdapterReceive(ctx context.Context, in *AdapterRequest, opts ...grpc.CallOption) (*Default, error) AdapterReceive(ctx context.Context, in *AdapterRequest, opts ...grpc.CallOption) (*Empty, error)
AdapterPush(ctx context.Context, in *AdapterRequest, opts ...grpc.CallOption) (*Default, error) AdapterPush(ctx context.Context, in *AdapterRequest, opts ...grpc.CallOption) (*Default, error)
AdapterDestroy(ctx context.Context, in *AdapterRequest, opts ...grpc.CallOption) (*Empty, error) AdapterDestroy(ctx context.Context, in *AdapterRequest, opts ...grpc.CallOption) (*Empty, error)
AdapterSender(ctx context.Context, in *AdapterRequest, opts ...grpc.CallOption) (*Default, error) AdapterSender(ctx context.Context, in *AdapterRequest, opts ...grpc.CallOption) (*Default, error)
@@ -386,8 +386,8 @@ func (x *sillyGirlServiceAdapterRegistClient) Recv() (*Default, error) {
return m, nil return m, nil
} }
func (c *sillyGirlServiceClient) AdapterReceive(ctx context.Context, in *AdapterRequest, opts ...grpc.CallOption) (*Default, error) { func (c *sillyGirlServiceClient) AdapterReceive(ctx context.Context, in *AdapterRequest, opts ...grpc.CallOption) (*Empty, error) {
out := new(Default) out := new(Empty)
err := c.cc.Invoke(ctx, SillyGirlService_AdapterReceive_FullMethodName, in, out, opts...) err := c.cc.Invoke(ctx, SillyGirlService_AdapterReceive_FullMethodName, in, out, opts...)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -460,7 +460,7 @@ type SillyGirlServiceServer interface {
SenderAction(context.Context, *ReplyRequest) (*Default, error) SenderAction(context.Context, *ReplyRequest) (*Default, error)
SenderDestroy(context.Context, *ReplyRequest) (*Empty, error) SenderDestroy(context.Context, *ReplyRequest) (*Empty, error)
AdapterRegist(SillyGirlService_AdapterRegistServer) error AdapterRegist(SillyGirlService_AdapterRegistServer) error
AdapterReceive(context.Context, *AdapterRequest) (*Default, error) AdapterReceive(context.Context, *AdapterRequest) (*Empty, error)
AdapterPush(context.Context, *AdapterRequest) (*Default, error) AdapterPush(context.Context, *AdapterRequest) (*Default, error)
AdapterDestroy(context.Context, *AdapterRequest) (*Empty, error) AdapterDestroy(context.Context, *AdapterRequest) (*Empty, error)
AdapterSender(context.Context, *AdapterRequest) (*Default, error) AdapterSender(context.Context, *AdapterRequest) (*Default, error)
@@ -547,7 +547,7 @@ func (UnimplementedSillyGirlServiceServer) SenderDestroy(context.Context, *Reply
func (UnimplementedSillyGirlServiceServer) AdapterRegist(SillyGirlService_AdapterRegistServer) error { func (UnimplementedSillyGirlServiceServer) AdapterRegist(SillyGirlService_AdapterRegistServer) error {
return status.Errorf(codes.Unimplemented, "method AdapterRegist not implemented") return status.Errorf(codes.Unimplemented, "method AdapterRegist not implemented")
} }
func (UnimplementedSillyGirlServiceServer) AdapterReceive(context.Context, *AdapterRequest) (*Default, error) { func (UnimplementedSillyGirlServiceServer) AdapterReceive(context.Context, *AdapterRequest) (*Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method AdapterReceive not implemented") return nil, status.Errorf(codes.Unimplemented, "method AdapterReceive not implemented")
} }
func (UnimplementedSillyGirlServiceServer) AdapterPush(context.Context, *AdapterRequest) (*Default, error) { func (UnimplementedSillyGirlServiceServer) AdapterPush(context.Context, *AdapterRequest) (*Default, error) {