This commit is contained in:
1-6
2023-07-27 00:24:47 +08:00
parent 63365c1506
commit 615e543845
12 changed files with 204 additions and 244 deletions
+8 -15
View File
@@ -692,8 +692,10 @@ func (sender *CustomSender) Action(options map[string]interface{}) (interface{},
one = any
}
if one != nil {
one.Handle(&Faker{
Type: "action",
one.Handle(&CustomSender{
F: &Factory{
botplt: "action",
},
}, func(vm *goja.Runtime) {
obj := vm.NewObject()
for k, v := range options {
@@ -798,8 +800,10 @@ func (sender *CustomSender) Reply(msgs ...interface{}) (string, error) {
}
if one != nil {
message_id := ""
one.Handle(&Faker{
Type: "message",
one.Handle(&CustomSender{
F: &Factory{
botplt: "message",
},
}, func(vm *goja.Runtime) {
obj := vm.NewObject()
for k, v := range msg {
@@ -935,14 +939,3 @@ func (sender *CustomSender) IsAdmin() bool {
}
return sender.F.isAdmin(sender.GetUserID())
}
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
}
+135 -186
View File
@@ -3,7 +3,6 @@ package core
import (
"errors"
"fmt"
"reflect"
"regexp"
"strings"
"sync"
@@ -26,127 +25,127 @@ type Faker struct {
Admin bool
}
func (sender *Faker) Listen() chan string {
return sender.Carry
}
//func (sender *Faker) Listen() chan string {
// return sender.Carry
// }
func (sender *Faker) GetContent() string {
if sender.Fsps.Content != "" {
return sender.Fsps.Content
}
return sender.Message
}
//func (sender *Faker) GetContent() string {
// if sender.Fsps.Content != "" {
// return sender.Fsps.Content
// }
// return sender.Message
// }
func (sender *Faker) GetUserID() string {
return sender.UserID
}
//func (sender *Faker) GetUserID() string {
// return sender.UserID
// }
func (sender *Faker) GetBotID() string {
return ""
}
//func (sender *Faker) GetBotID() string {
// return ""
// }
func (sender *Faker) GetChatID() string {
return sender.ChatID
}
//func (sender *Faker) GetChatID() string {
// return sender.ChatID
// }
func (sender *Faker) GetImType() string {
if sender.Type == "" {
return "fake"
}
return sender.Type
}
//func (sender *Faker) GetImType() string {
// if sender.Type == "" {
// return "fake"
// }
// return sender.Type
// }
func (sender *Faker) GetMessageID() string {
return ""
}
//func (sender *Faker) GetMessageID() string {
// return ""
// }
func (sender *Faker) GetUserName() string {
return ""
}
//func (sender *Faker) GetUserName() string {
// return ""
// }
func (sender *Faker) GetChatName() string {
return ""
}
//func (sender *Faker) GetChatName() string {
// return ""
// }
func (sender *Faker) IsReply() bool {
return false
}
//func (sender *Faker) IsReply() bool {
// return false
// }
func (sender *Faker) GetReplyUserID() int {
return 0
}
// //func (sender *Faker) GetReplyUserID() int {
// return 0
// }
func (sender *Faker) GetRawMessage() interface{} {
return sender.Message
}
// //func (sender *Faker) GetRawMessage() interface{} {
// return sender.Message
// }
func (sender *Faker) IsAdmin() bool {
return sender.Admin
}
// //func (sender *Faker) IsAdmin() bool {
// return sender.Admin
// }
func (sender *Faker) IsMedia() bool {
return false
}
// //func (sender *Faker) IsMedia() bool {
// return false
// }
func (sender *Faker) Reply(msgs ...interface{}) (string, error) {
rt := ""
for _, msg := range msgs {
switch msg := msg.(type) {
case []byte:
rt = (string(msg))
case string:
rt = msg
}
}
{
//func (sender *Faker) Reply(msgs ...interface{}) (string, error) {
// rt := ""
// for _, msg := range msgs {
// switch msg := msg.(type) {
// case []byte:
// rt = (string(msg))
// case string:
// rt = msg
// }
// }
// {
for _, v := range regexp.MustCompile(`\[CQ:image,file=([^\[\]]+)\]`).FindAllStringSubmatch(rt, -1) {
// qr := qrcode2console.NewQRCode2ConsoleWithUrl(v[1], true)
// defer qr.Output()
rt = strings.Replace(rt, fmt.Sprintf(`[CQ:image,file=%s]`, v[1]), "", -1)
}
}
// for _, v := range regexp.MustCompile(`\[CQ:image,file=([^\[\]]+)\]`).FindAllStringSubmatch(rt, -1) {
// // qr := qrcode2console.NewQRCode2ConsoleWithUrl(v[1], true)
// // defer qr.Output()
// rt = strings.Replace(rt, fmt.Sprintf(`[CQ:image,file=%s]`, v[1]), "", -1)
// }
// }
// if rt != "" && n != nil {
// NotifyMasters(rt)
// }
// if rt != "" && n != nil {
// NotifyMasters(rt)
// }
// if rt != "" && sender.Carry != nil {
// sender.Carry <- rt
// }
// if rt != "" && sender.Carry != nil {
// sender.Carry <- rt
// }
if rt != "" && sender.Type == "terminal" {
fmt.Printf("\x1b[%dm%s \x1b[0m\n", 31, rt)
}
return "", nil
}
// if rt != "" && sender.Type == "terminal" {
// fmt.Printf("\x1b[%dm%s \x1b[0m\n", 31, rt)
// }
// return "", nil
// }
func (sender *Faker) Delete() error {
return nil
}
//func (sender *Faker) Delete() error {
// return nil
// }
func (sender *Faker) Disappear(lifetime ...time.Duration) {
//func (sender *Faker) Disappear(lifetime ...time.Duration) {
}
// }
func (sender *Faker) Finish() {
if sender.Carry != nil {
close(sender.Carry)
}
}
//func (sender *Faker) Finish() {
// if sender.Carry != nil {
// close(sender.Carry)
// }
// }
func (sender *Faker) Copy() common.Sender {
new := reflect.Indirect(reflect.ValueOf(interface{}(sender))).Interface().(Faker)
return &new
}
//func (sender *Faker) Copy() common.Sender {
// new := reflect.Indirect(reflect.ValueOf(interface{}(sender))).Interface().(Faker)
// return &new
// }
func (sender *Faker) GroupKick(uid string, reject_add_request bool) error {
return nil
}
//func (sender *Faker) GroupKick(uid string, reject_add_request bool) error {
// return nil
// }
func (sender *Faker) GroupBan(uid string, duration int) error {
return nil
}
//func (sender *Faker) GroupBan(uid string, duration int) error {
// return nil
// }
type BaseSender struct {
matches [][]string
@@ -165,30 +164,30 @@ type BaseSender struct {
plugin_id string
}
func (sender *BaseSender) SetPluginID(plugin_id string) {
func (sender *CustomSender) SetPluginID(plugin_id string) {
sender.plugin_id = plugin_id
}
func (sender *BaseSender) GetPluginID() string {
func (sender *CustomSender) GetPluginID() string {
return sender.plugin_id
}
func (sender *BaseSender) SetLevel(l int) {
func (sender *CustomSender) SetLevel(l int) {
sender.level = l
}
func (sender *BaseSender) GetLevel() int {
func (sender *CustomSender) GetLevel() int {
return sender.level
}
func (sender *BaseSender) SetMark(mark interface{}) {
func (sender *CustomSender) SetMark(mark interface{}) {
sender.mark = mark
}
func (sender *BaseSender) GetMark() interface{} {
func (sender *CustomSender) GetMark() interface{} {
return sender.mark
}
func (sender *BaseSender) SetExpandMessageInfo(emf map[string]interface{}) {
func (sender *CustomSender) SetExpandMessageInfo(emf map[string]interface{}) {
if sender.emf == nil {
sender.emf = map[string]interface{}{}
}
@@ -197,21 +196,21 @@ func (sender *BaseSender) SetExpandMessageInfo(emf map[string]interface{}) {
}
}
func (sender *BaseSender) GetExpandMessageInfo() map[string]interface{} {
func (sender *CustomSender) GetExpandMessageInfo() map[string]interface{} {
if sender.emf == nil {
sender.emf = map[string]interface{}{}
}
return sender.emf
}
func (sender *BaseSender) SetVar(key string, value interface{}) {
func (sender *CustomSender) SetVar(key string, value interface{}) {
if sender.emf == nil {
sender.emf = map[string]interface{}{}
}
sender.emf[key] = value
}
func (sender *BaseSender) GetVar(key string) interface{} {
func (sender *CustomSender) GetVar(key string) interface{} {
if sender.emf == nil {
sender.emf = map[string]interface{}{}
}
@@ -222,45 +221,45 @@ func (sender *BaseSender) GetVar(key string) interface{} {
return v
}
func (sender *BaseSender) SetMatch(ss []string) {
func (sender *CustomSender) SetMatch(ss []string) {
sender.matches = [][]string{ss}
}
func (sender *BaseSender) SetParams(ss []string) {
func (sender *CustomSender) SetParams(ss []string) {
sender.params = ss
}
func (sender *BaseSender) SetAllMatch(ss [][]string) {
func (sender *CustomSender) SetAllMatch(ss [][]string) {
sender.matches = ss
}
func (sender *BaseSender) SetContent(content string) {
func (sender *CustomSender) SetContent(content string) {
sender.Fsps.Content = content
}
func (sender *BaseSender) SetFsps(fsps *common.FakerSenderParams) {
func (sender *CustomSender) SetFsps(fsps *common.FakerSenderParams) {
sender.Fsps = *fsps
}
func (sender *BaseSender) GetMatch() []string {
func (sender *CustomSender) GetMatch() []string {
return sender.matches[0]
}
func (sender *BaseSender) GetAllMatch() [][]string {
func (sender *CustomSender) GetAllMatch() [][]string {
return sender.matches
}
func (sender *BaseSender) Continue() {
func (sender *CustomSender) Continue() {
sender.goon = true
}
func (sender *BaseSender) IsContinue() bool {
func (sender *CustomSender) IsContinue() bool {
return sender.goon
}
func (sender *BaseSender) ClearContinue() {
func (sender *CustomSender) ClearContinue() {
sender.goon = false
}
func (sender *BaseSender) Get(i interface{}) string {
func (sender *CustomSender) Get(i interface{}) string {
switch i := i.(type) {
case int:
if len(sender.matches) == 0 {
@@ -281,7 +280,7 @@ func (sender *BaseSender) Get(i interface{}) string {
return ""
}
func (sender *BaseSender) Delete() error {
func (sender *CustomSender) Delete() error {
return nil
}
@@ -289,120 +288,70 @@ func (sender *BaseSender) Disappear(lifetime ...time.Duration) {
}
func (sender *BaseSender) Finish() {
func (sender *CustomSender) Finish() {
sender.IsFinished = true
}
func (sender *BaseSender) IsMedia() bool {
func (sender *CustomSender) IsMedia() bool {
return false
}
func (sender *BaseSender) GetRawMessage() interface{} {
func (sender *CustomSender) GetRawMessage() interface{} {
return nil
}
func (sender *BaseSender) IsReply() bool {
func (sender *CustomSender) IsReply() bool {
return false
}
func (sender *BaseSender) GetMessageID() string {
return ""
}
func (sender *BaseSender) RecallMessage(...interface{}) {
}
func (sender *BaseSender) GetUserID() string {
return ""
}
func (sender *BaseSender) GetChatID() string {
return ""
}
func (sender *BaseSender) Push(msg map[string]string) (string, error) {
func (sender *CustomSender) Push(msg map[string]string) (string, error) {
return "", nil
}
func (sender *BaseSender) GetImType() string {
return ""
}
func (sender *BaseSender) GroupKick(uid string, reject_add_request bool) error {
func (sender *CustomSender) GroupUnkick(uid string) error {
return nil
}
func (sender *BaseSender) GroupUnkick(uid string) error {
return nil
}
func (sender *BaseSender) GroupBan(uid string, duration int) error {
return nil
}
func (sender *BaseSender) GroupUnban(uid string) error {
return nil
}
func (sender *BaseSender) GetUserName() string {
return ""
}
func (sender *BaseSender) IsAdmin() bool {
return false
}
func (sender *BaseSender) GetChatName() string {
return ""
}
func (sender *BaseSender) GetReplyUserID() int {
func (sender *CustomSender) GetReplyUserID() int {
return 0
}
func (sender *BaseSender) GetReplyMessageID() int {
func (sender *CustomSender) GetReplyMessageID() int {
return 0
}
func (sender *BaseSender) AtLast() {
func (sender *CustomSender) AtLast() {
sender.Atlast = true
}
func (sender *BaseSender) UAtLast() {
func (sender *CustomSender) UAtLast() {
sender.Atlast = false
}
func (sender *BaseSender) Stop() {
func (sender *CustomSender) Stop() {
panic("stop")
}
func (sender *BaseSender) Event() map[string]interface{} {
return nil
}
func (sender *BaseSender) Action(map[string]interface{}) (interface{}, error) {
return nil, nil
}
func (sender *BaseSender) GetID() string {
func (sender *CustomSender) GetID() string {
return sender.id
}
func (sender *BaseSender) SetID() string {
func (sender *CustomSender) SetID() string {
sender.id = utils.GenUUID()
sender.CreatedAt = time.Now()
senders.Store(sender.id, sender)
return sender.id
}
func (sender *BaseSender) GetTime() time.Time {
func (sender *CustomSender) GetTime() time.Time {
return sender.CreatedAt
}
func (sender *BaseSender) IsAtLast() bool {
func (sender *CustomSender) IsAtLast() bool {
return sender.Atlast
}
func (sender *BaseSender) MessagesToSend() string {
func (sender *CustomSender) MessagesToSend() string {
return strings.Join(sender.ToSendMessages, "\n")
}
@@ -507,7 +456,7 @@ type Switch []string
var listenCounter int64
func (s *BaseSender) Await(message common.Sender, callback func(common.Sender) interface{}, params ...interface{}) interface{} {
func (s *CustomSender) Await(message common.Sender, callback func(common.Sender) interface{}, params ...interface{}) interface{} {
timeout := time.Hour * 999999
var handleErr func(error)
var persistent = false
+25 -22
View File
@@ -378,8 +378,10 @@ func AddCommand(cmds []*common.Function) {
go func(f *common.Function) {
time.Sleep(time.Second)
console.Log("初始化%v服务", f.Title)
f.Handle(&Faker{
Type: "*",
f.Handle(&CustomSender{
F: &Factory{
botplt: "*",
},
}, nil)
}(cmds[j])
}
@@ -393,9 +395,10 @@ func AddCommand(cmds []*common.Function) {
Cron = "0 " + Cron
}
cronId, err := CRON.AddFunc(Cron, func() {
cmds[j].Handle(&Faker{
Admin: true,
Type: plt,
cmds[j].Handle(&CustomSender{
F: &Factory{
botplt: plt,
},
}, nil)
})
if err == nil {
@@ -540,23 +543,23 @@ func HandleMessage(sender common.Sender) {
sender.SetMatch(res[1:])
sender.SetParams(c.Function.Params[i])
mtd = true
if f, ok := c.Message.(*Faker); ok && f.Carry != nil {
if s1, o := sender.(*Faker); 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
}
}()
}
}
// 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() {
+1 -1
View File
@@ -24,7 +24,7 @@ type Language struct {
}
var plugin_dir = utils.ExecPath + "/plugins"
var release = "20230726"
var release = "20230727"
var languages = []Language{
{
+3 -1
View File
@@ -313,7 +313,9 @@ func AddNodePlugin(path, name string) error {
}
senders.Store(id, s)
defer senders.Delete(id)
defer func() {
fmt.Println("senders.Delete(id)")
}()
defer processes.Delete(cmd)
err = cmd.Wait()
if err != nil {
+5 -3
View File
@@ -34,7 +34,6 @@ var senders sync.Map
// }
func GetSender(uuid string) (common.Sender, error) {
if uuid == "" {
return &CustomSender{
F: &Factory{
@@ -43,7 +42,6 @@ func GetSender(uuid string) (common.Sender, error) {
}, nil
}
v, ok := senders.Load(uuid)
// fmt.Println("uuid", uuid, v, ok)
if !ok {
return nil, errors.New("not found sender")
}
@@ -201,10 +199,13 @@ func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderList
if req.Persistent {
persistent = req.Persistent
options = append(options, "persistent")
} else {
options = append(options, func(err error) {
stream.Send(&srpc.SenderListenResponse{Echo: ""})
})
}
go s.Await(s, func(s common.Sender) interface{} {
id := s.SetID()
defer senders.Delete(id)
echo := utils.GenUUID()
ch := make(chan string)
echos.Store(echo, ch)
@@ -219,6 +220,7 @@ 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
+4 -2
View File
@@ -243,8 +243,10 @@ func initWeb() {
}
if (matched || c.Request.URL.Path == path) && (c.Request.Method == method || "ANY" == method) {
req.handled = true
function.Handle(&Faker{
Type: "http",
function.Handle(&CustomSender{
F: &Factory{
botplt: "http",
},
}, func(vm *goja.Runtime) {
vm.Set("res", res)
vm.Set("req", req)
+13 -6
View File
@@ -109,8 +109,11 @@ func handleWebsocket(c *gin.Context) {
req._event = "connect"
wc.conn = ws
go function.Handle(&Faker{
Type: "websocket",
go function.Handle(&CustomSender{
F: &Factory{
botplt: "websocket",
},
}, func(vm *goja.Runtime) {
vm.Set("res", &Response{
c: c,
@@ -173,8 +176,10 @@ func handleWebsocket(c *gin.Context) {
function = f2
}
}
function.Handle(&Faker{
Type: "websocket",
function.Handle(&CustomSender{
F: &Factory{
botplt: "websocket",
},
}, func(vm *goja.Runtime) {
vm.Set("res", &Response{
c: c,
@@ -193,8 +198,10 @@ func handleWebsocket(c *gin.Context) {
function = f2
}
}
go function.Handle(&Faker{
Type: "websocket",
go function.Handle(&CustomSender{
F: &Factory{
botplt: "websocket",
},
}, func(vm *goja.Runtime) {
vm.Set("res", &Response{
c: c,
+2 -2
View File
@@ -24,8 +24,8 @@ macos编译:
cp /Users/a1-6/Code/sillyplus/proto3/dist/sillygirl.js /Users/a1-6/Code/node/node-v18.16.1/lib/sillygirl.js && cd /Users/a1-6/Code/node/node-v18.16.1 && ninja -C out/Release && cp out/Release/node /Users/a1-6/Code/nodes/node_darwin_arm64
#压缩
cd /Users/a1-6/Code/nodes/node_darwin_arm64 && zip node_darwin_arm64.zip node
cd /Users/a1-6/Code/nodes/node_linux_amd64 && zip node_linux_amd64.zip node
cd /Users/a1-6/Code/nodes/node_darwin_arm64
cd /Users/a1-6/Code/nodes/node_linux_amd64
##
git add . && git commit -m "x" && git push
+1 -1
View File
@@ -28,7 +28,7 @@ declare class Sender {
allow_users?: string[];
prohibit_users?: string[];
persistent?: boolean;
}): Promise<Sender>;
}): Promise<Sender | undefined>;
holdOn(str: string): string;
reply(content: string): Promise<string | undefined>;
action(options: any): Promise<any | undefined>;
+4 -2
View File
@@ -237,8 +237,8 @@ class Sender {
call.cancel();
return;
}
let s = new Sender(response.uuid);
if (options?.handle) {
let s = response.uuid ? new Sender(response.uuid) : undefined;
if (options?.handle && s) {
// console.log(`options?.handle`, options.persistent)
let obj = options?.handle(s);
if (typeof obj == "string") {
@@ -538,7 +538,9 @@ class Adapter {
this.bot_id = options.bot_id;
if (options.replyHandler) {
const call = client.AdapterRegist();
// let callback: any = ;
call.on("data", async (response) => {
// console.log("start on data")
let message = JSON.parse(response.value);
const { echo, __type__ } = message;
delete message.__type__;
+3 -3
View File
@@ -230,7 +230,7 @@ class Sender {
allow_users?: string[]; // 用户白名单
prohibit_users?: string[]; // 群聊白名单
persistent?: boolean; //持久化监听
}): Promise<Sender> {
}): Promise<Sender | undefined> {
return new Promise(
async (resolve, reject) => {
let params: any = {
@@ -259,8 +259,8 @@ class Sender {
call.cancel();
return;
}
let s = new Sender(response.uuid);
if (options?.handle) {
let s = response.uuid ? new Sender(response.uuid) : undefined;
if (options?.handle && s) {
// console.log(`options?.handle`, options.persistent)
let obj = options?.handle(s);
if (typeof obj == "string") {