x
This commit is contained in:
+1
-11
@@ -332,17 +332,6 @@ func (sender *CustomSender) 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 {
|
||||
return sender.CreatedAt
|
||||
}
|
||||
@@ -487,6 +476,7 @@ func (s *CustomSender) Await(message common.Sender, callback func(common.Sender)
|
||||
if len(c.Function.Rules) == 0 {
|
||||
c.Function.Rules = []string{`raw [\s\S]+`}
|
||||
}
|
||||
// fmt.Println("carry", c)
|
||||
fmtRule(&c.Function)
|
||||
c.Chan = make(chan interface{}, 1)
|
||||
c.Result = make(chan interface{}, 1)
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
package common
|
||||
|
||||
import "time"
|
||||
|
||||
type Sender interface {
|
||||
SetPluginID(string)
|
||||
GetPluginID() string
|
||||
GetID() string
|
||||
GetTime() time.Time
|
||||
SetID() string
|
||||
GetUserID() string
|
||||
GetChatID() string
|
||||
GetBotID() string
|
||||
|
||||
+9
-18
@@ -472,9 +472,9 @@ func HandleMessage(sender common.Sender) {
|
||||
u, g, i, a := sender.GetUserID(), sender.GetChatID(), sender.GetImType(), sender.IsAdmin()
|
||||
con := true
|
||||
mtd := false
|
||||
|
||||
for _, wait := range waits {
|
||||
wait.Foreach(func(k int64, c *Carry) bool {
|
||||
|
||||
// userID := vs.Get("u")
|
||||
// chatID := vs.Get("c")
|
||||
// imType := vs.Get("i")
|
||||
@@ -485,18 +485,26 @@ func HandleMessage(sender common.Sender) {
|
||||
// if userID != u && (forGroup == "" || forGroup == "me") {
|
||||
// return true
|
||||
// }
|
||||
|
||||
if c.RequireAdmin && !a {
|
||||
return true
|
||||
}
|
||||
// fmt.Println(c.Function.Rules, "==", c.AllowPlatforms, len(c.AllowPlatforms))
|
||||
|
||||
if len(c.AllowPlatforms) != 0 && !Contains(c.AllowPlatforms, i) {
|
||||
return true
|
||||
}
|
||||
|
||||
// fmt.Println(c.Function.Rules)
|
||||
|
||||
if len(c.ProhibitPlatforms) != 0 && Contains(c.ProhibitPlatforms, i) {
|
||||
return true
|
||||
}
|
||||
|
||||
if len(c.AllowUsers) != 0 && !Contains(c.AllowUsers, u) {
|
||||
return true
|
||||
}
|
||||
|
||||
if len(c.ProhibitUsers) != 0 && Contains(c.ProhibitUsers, u) {
|
||||
return true
|
||||
}
|
||||
@@ -543,23 +551,6 @@ func HandleMessage(sender common.Sender) {
|
||||
sender.SetMatch(res[1:])
|
||||
sender.SetParams(c.Function.Params[i])
|
||||
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
|
||||
sender.Reply(<-c.Result)
|
||||
if !sender.IsContinue() {
|
||||
|
||||
@@ -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{}{}
|
||||
bot_id := req.GetBotId()
|
||||
platform := req.GetPlatform()
|
||||
@@ -87,10 +87,10 @@ func (sg *SillyGirlService) AdapterReceive(ctx context.Context, req *srpc.Adapte
|
||||
json.Unmarshal([]byte(req.Value), &msgs)
|
||||
adapter, err := GetAdapter(platform, bot_id)
|
||||
if err == nil {
|
||||
s := adapter.Receive(msgs)
|
||||
return &srpc.Default{Value: s.SetID()}, nil
|
||||
adapter.Receive(msgs)
|
||||
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) {
|
||||
@@ -118,8 +118,11 @@ func (sg *SillyGirlService) AdapterSender(ctx context.Context, req *srpc.Adapter
|
||||
json.Unmarshal([]byte(req.Value), &msgs)
|
||||
adapter, err := GetAdapter(platform, bot_id)
|
||||
if err == nil {
|
||||
s := adapter.Sender2(msgs)
|
||||
return &srpc.Default{Value: s.SetID()}, nil
|
||||
_, regist, err := getSenderRegisterByCtx(ctx)
|
||||
if err == nil {
|
||||
s := adapter.Sender2(msgs)
|
||||
return &srpc.Default{Value: regist(s)}, nil
|
||||
}
|
||||
}
|
||||
return &srpc.Default{Value: ""}, err
|
||||
}
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@ type Language struct {
|
||||
}
|
||||
|
||||
var plugin_dir = utils.ExecPath + "/plugins"
|
||||
var release = "20230728"
|
||||
var release = "20230730"
|
||||
|
||||
var languages = []Language{
|
||||
{
|
||||
|
||||
+45
-99
@@ -46,30 +46,6 @@ func initNodePlugins() {
|
||||
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()
|
||||
if err != nil {
|
||||
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 {
|
||||
hash := sha1.Sum([]byte(name))
|
||||
return strings.ReplaceAll(uuid.NewSHA1(uuid.Nil, hash[:]).String(), "-", "_")
|
||||
@@ -218,8 +163,6 @@ func isNameUuid(uuid string) bool {
|
||||
return strings.Contains(uuid, "_")
|
||||
}
|
||||
|
||||
// var plugins_id sync.Map
|
||||
|
||||
func AddNodePlugin(path, name string) error {
|
||||
if name == "" {
|
||||
return nil
|
||||
@@ -277,10 +220,10 @@ func AddNodePlugin(path, name string) error {
|
||||
f.Handle = func(s common.Sender, f func(vm *goja.Runtime)) interface{} {
|
||||
s.SetPluginID(uuid)
|
||||
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.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)
|
||||
// 获取标准输出和标准错误输出的管道
|
||||
stdout, err := cmd.StdoutPipe()
|
||||
@@ -327,15 +270,14 @@ func AddNodePlugin(path, name string) error {
|
||||
}
|
||||
}()
|
||||
processes.Store(cmd, s)
|
||||
register := createSenderRegister(RUNTIME_ID)
|
||||
if (plt) != "*" {
|
||||
id := s.SetID()
|
||||
cmd.Env = append(cmd.Env, "SENDER_ID="+id)
|
||||
cmd.Env = append(cmd.Env, "SENDER_ID="+register(s))
|
||||
err = cmd.Start()
|
||||
if err != nil {
|
||||
|
||||
}
|
||||
senders.Store(id, s)
|
||||
defer senders.Delete(id)
|
||||
defer deleteSenderRegister(RUNTIME_ID)
|
||||
defer processes.Delete(cmd)
|
||||
err = cmd.Wait()
|
||||
if err != nil {
|
||||
@@ -366,6 +308,7 @@ func AddNodePlugin(path, name string) error {
|
||||
return true
|
||||
})
|
||||
go func() {
|
||||
defer deleteSenderRegister(RUNTIME_ID)
|
||||
defer processes.Delete(cmd)
|
||||
err = cmd.Wait()
|
||||
}()
|
||||
@@ -387,18 +330,18 @@ func AddNodePlugin(path, name string) error {
|
||||
}
|
||||
|
||||
var typeat = `declare class Sender {
|
||||
uuid: string;
|
||||
private uuid;
|
||||
private destoried;
|
||||
constructor(uuid: string);
|
||||
destructor(): void;
|
||||
getUserId(): Promise<string | undefined>;
|
||||
getUserName(): Promise<string | undefined>;
|
||||
getChatId(): Promise<string | undefined>;
|
||||
getChatName(): Promise<string | undefined>;
|
||||
getMessageId(): Promise<string | undefined>;
|
||||
getPlatform(): Promise<string | undefined>;
|
||||
getBotId(): Promise<string | undefined>;
|
||||
getContent(): Promise<string | undefined>;
|
||||
destroy(): void;
|
||||
getUserId(): Promise<string>;
|
||||
getUserName(): Promise<string>;
|
||||
getChatId(): Promise<string>;
|
||||
getChatName(): Promise<string>;
|
||||
getMessageId(): Promise<string>;
|
||||
getPlatform(): Promise<string>;
|
||||
getBotId(): Promise<string>;
|
||||
getContent(): Promise<string>;
|
||||
param(key: number | string): Promise<string>;
|
||||
setContent(content: string): Promise<undefined>;
|
||||
continue(): Promise<undefined>;
|
||||
@@ -415,15 +358,14 @@ var typeat = `declare class Sender {
|
||||
prohibit_groups?: string[];
|
||||
allow_users?: string[];
|
||||
prohibit_users?: string[];
|
||||
persistent?: boolean;
|
||||
}): Promise<Sender | undefined>;
|
||||
holdOn(str: string): string;
|
||||
reply(content: string): Promise<string | undefined>;
|
||||
action(options: any): Promise<any | undefined>;
|
||||
event(): Promise<any | undefined>;
|
||||
reply(content: string): Promise<string>;
|
||||
doAction(options: Record<string, any>): Promise<any>;
|
||||
getEvent(): Promise<Record<string, any>>;
|
||||
}
|
||||
declare class Bucket {
|
||||
name: string;
|
||||
private name;
|
||||
constructor(name: string);
|
||||
transform(v: string | undefined): string | number | boolean | undefined;
|
||||
reverseTransform(value: any): string;
|
||||
@@ -432,19 +374,19 @@ declare class Bucket {
|
||||
message?: string;
|
||||
changed?: boolean;
|
||||
}>;
|
||||
getAll(): Promise<any>;
|
||||
getAll(): Promise<Record<string, any>>;
|
||||
delete(key: string): Promise<{
|
||||
message?: string | undefined;
|
||||
changed?: boolean | undefined;
|
||||
message?: string;
|
||||
changed?: boolean;
|
||||
}>;
|
||||
deleteAll(): Promise<undefined>;
|
||||
keys(): Promise<string[] | undefined>;
|
||||
len(): Promise<number | undefined>;
|
||||
buckets(): Promise<string[] | undefined>;
|
||||
watch(key: string, handle: (old: any, now: any, key: string) => StorageFinal | void | any): void;
|
||||
_name(): Promise<string>;
|
||||
keys(): Promise<string[]>;
|
||||
len(): Promise<number>;
|
||||
buckets(): Promise<string[]>;
|
||||
watch(key: string, handle: (old: any, now: any, key: string) => StorageModifier | void): void;
|
||||
getName(): Promise<string>;
|
||||
}
|
||||
interface StorageFinal {
|
||||
interface StorageModifier {
|
||||
echo?: string;
|
||||
now?: any;
|
||||
message?: string;
|
||||
@@ -459,28 +401,31 @@ interface Message {
|
||||
chat_name?: string;
|
||||
}
|
||||
declare class Adapter {
|
||||
platform: string | undefined;
|
||||
bot_id: string | undefined;
|
||||
platform: string;
|
||||
bot_id: string;
|
||||
call: any;
|
||||
constructor(options: {
|
||||
platform?: string;
|
||||
bot_id?: string;
|
||||
replyHandler?: (message: Message) => string | undefined | Promise<string | undefined>;
|
||||
actionHandler?: (message: Message) => string | undefined | Promise<string | undefined>;
|
||||
platform: string;
|
||||
bot_id: string;
|
||||
replyHandler?: (message: Message) => Promise<string | undefined>;
|
||||
actionHandler?: (message: Message) => Promise<string | undefined>;
|
||||
});
|
||||
setActionHandler(func: (action: {}) => any): void;
|
||||
receive(message: Message): Promise<Sender>;
|
||||
receive(message: Message): Promise<undefined>;
|
||||
push(message: Message): Promise<string>;
|
||||
destroy(): Promise<void>;
|
||||
sender(options: any): Promise<Sender>;
|
||||
}
|
||||
declare let sender: Sender;
|
||||
declare function sleep(ms: number | undefined): Promise<unknown>;
|
||||
declare function sleep(ms?: number): Promise<unknown>;
|
||||
interface CQItem {
|
||||
type: string;
|
||||
params: {};
|
||||
params: Record<string, string>;
|
||||
}
|
||||
interface CQParams {
|
||||
[key: string]: string | number | boolean;
|
||||
}
|
||||
declare let utils: {
|
||||
buildCQTag: (type: string, params: CQParams, prefix?: string) => string;
|
||||
parseCQText: (text: string, prefix?: string) => (string | CQItem)[];
|
||||
};
|
||||
declare let console: {
|
||||
@@ -489,7 +434,8 @@ declare let console: {
|
||||
error(...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 {
|
||||
create_at := time.Now().Format("2006-01-02 15:04:05")
|
||||
@@ -501,5 +447,5 @@ func defaultScript(title string) string {
|
||||
* @version v1.0.0
|
||||
*/
|
||||
|
||||
const { sender: s, Bucket, Adapter, sleep } = require("sillygirl");`
|
||||
const { sender: s, Bucket, Adapter, sleep, utils, console } = require("sillygirl");`
|
||||
}
|
||||
|
||||
@@ -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
@@ -3,7 +3,6 @@ package core
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"strings"
|
||||
@@ -15,41 +14,8 @@ import (
|
||||
"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) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
s, err := getRegisterSenderByCtx(ctx, req.Uuid)
|
||||
if err != nil {
|
||||
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) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
s, err := getRegisterSenderByCtx(ctx, req.Uuid)
|
||||
if err != nil {
|
||||
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) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
s, err := getRegisterSenderByCtx(ctx, req.Uuid)
|
||||
if err != nil {
|
||||
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) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
s, err := getRegisterSenderByCtx(ctx, req.Uuid)
|
||||
if err != nil {
|
||||
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) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
s, err := getRegisterSenderByCtx(ctx, req.Uuid)
|
||||
if err != nil {
|
||||
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) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
s, err := getRegisterSenderByCtx(ctx, req.Uuid)
|
||||
if err != nil {
|
||||
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) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
s, err := getRegisterSenderByCtx(ctx, req.Uuid)
|
||||
if err != nil {
|
||||
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) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
s, err := getRegisterSenderByCtx(ctx, req.Uuid)
|
||||
if err != nil {
|
||||
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) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
s, err := getRegisterSenderByCtx(ctx, req.Uuid)
|
||||
if err != nil {
|
||||
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) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
s, err := getRegisterSenderByCtx(ctx, req.Uuid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -132,13 +98,17 @@ func (sg *SillyGirlService) SenderContinue(ctx context.Context, req *srpc.Sender
|
||||
|
||||
// todo
|
||||
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 echos sync.Map
|
||||
var persistent bool
|
||||
// defer fmt.Println("已关闭,", "===")
|
||||
for {
|
||||
req, err := stream.Recv()
|
||||
|
||||
// fmt.Println("carry", carry, err)
|
||||
if err == io.EOF {
|
||||
break // 如果流已经关闭,则退出循环
|
||||
@@ -146,7 +116,9 @@ func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderList
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if carry != nil {
|
||||
// fmt.Println("已监听,", req)
|
||||
// fmt.Println("req.Uuid", req.Uuid)
|
||||
echo := req.GetUuid()
|
||||
value := req.GetValue()
|
||||
@@ -163,7 +135,8 @@ func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderList
|
||||
// }
|
||||
continue
|
||||
}
|
||||
s, err := GetSender(req.Uuid)
|
||||
s, err := getRegisterSender(runtime_id, req.Uuid)
|
||||
|
||||
if err != nil {
|
||||
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)
|
||||
if req.Persistent {
|
||||
persistent = req.Persistent
|
||||
@@ -204,13 +183,15 @@ func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderList
|
||||
stream.Send(&srpc.SenderListenResponse{Echo: ""})
|
||||
})
|
||||
}
|
||||
level := s.GetLevel()
|
||||
|
||||
go s.Await(s, func(s common.Sender) interface{} {
|
||||
id := s.SetID()
|
||||
s.SetLevel(level + 1)
|
||||
echo := utils.GenUUID()
|
||||
ch := make(chan string)
|
||||
echos.Store(echo, ch)
|
||||
defer echos.Delete(echo)
|
||||
stream.Send(&srpc.SenderListenResponse{Echo: echo, Uuid: id})
|
||||
stream.Send(&srpc.SenderListenResponse{Echo: echo, Uuid: register(s)})
|
||||
value := <-ch
|
||||
if !persistent {
|
||||
if strings.HasPrefix(value, "go_again_") {
|
||||
@@ -220,7 +201,6 @@ func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderList
|
||||
stream.Send(&srpc.SenderListenResponse{Echo: "END"})
|
||||
}
|
||||
} else {
|
||||
defer senders.Delete(id)
|
||||
value = strings.Replace(value, "go_again_", "", 1)
|
||||
}
|
||||
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) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
s, err := getRegisterSenderByCtx(ctx, req.Uuid)
|
||||
if err != nil {
|
||||
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) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
s, err := getRegisterSenderByCtx(ctx, req.Uuid)
|
||||
if err != nil {
|
||||
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) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
s, err := getRegisterSenderByCtx(ctx, req.Uuid)
|
||||
if err != nil {
|
||||
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) {
|
||||
s, err := GetSender(req.Uuid)
|
||||
s, err := getRegisterSenderByCtx(ctx, req.Uuid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var params = map[string]interface{}{}
|
||||
err = json.Unmarshal([]byte(req.Content), ¶ms)
|
||||
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) {
|
||||
// fmt.Println("删除", req.Uuid)
|
||||
senders.Delete(req.Uuid)
|
||||
return &srpc.Empty{}, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user