x
This commit is contained in:
+2
-2
@@ -185,11 +185,11 @@ func init() {
|
|||||||
})
|
})
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
adapter.SetReplyHandler(func(msg map[string]string) string {
|
adapter.SetReplyHandler(func(msg map[string]interface{}) string {
|
||||||
if debug {
|
if debug {
|
||||||
logs.Debug("QQ发送消息:", string(utils.JsonMarshal(msg)))
|
logs.Debug("QQ发送消息:", string(utils.JsonMarshal(msg)))
|
||||||
}
|
}
|
||||||
if utils.IsZeroOrEmpty(msg[core.CHAT_ID]) {
|
if utils.IsZeroOrEmpty(msg[core.CHAT_ID].(string)) {
|
||||||
params := map[string]interface{}{
|
params := map[string]interface{}{
|
||||||
"user_id": msg[core.USER_ID],
|
"user_id": msg[core.USER_ID],
|
||||||
"message": msg[core.CONETNT],
|
"message": msg[core.CONETNT],
|
||||||
|
|||||||
@@ -85,12 +85,12 @@ func initWebBot() {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
adapter.SetReplyHandler(func(msg map[string]string) string {
|
adapter.SetReplyHandler(func(msg map[string]interface{}) string {
|
||||||
message := WebMessage{
|
message := WebMessage{
|
||||||
UserID: msg[core.USER_ID],
|
UserID: msg[core.USER_ID].(string),
|
||||||
Images: []string{},
|
Images: []string{},
|
||||||
Type: "chat",
|
Type: "chat",
|
||||||
Content: msg[core.CONETNT],
|
Content: msg[core.CONETNT].(string),
|
||||||
}
|
}
|
||||||
sendWebMessage(&message)
|
sendWebMessage(&message)
|
||||||
return ""
|
return ""
|
||||||
|
|||||||
+21
-6
@@ -36,7 +36,7 @@ type CustomSender struct {
|
|||||||
|
|
||||||
type MsgChan struct {
|
type MsgChan struct {
|
||||||
Chan chan string
|
Chan chan string
|
||||||
Msg map[string]string
|
Msg map[string]interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
type Factory struct {
|
type Factory struct {
|
||||||
@@ -45,7 +45,7 @@ type Factory struct {
|
|||||||
uuid string
|
uuid string
|
||||||
msgChan chan MsgChan
|
msgChan chan MsgChan
|
||||||
demo *CustomSender
|
demo *CustomSender
|
||||||
reply func(map[string]string) string
|
reply func(map[string]interface{}) string
|
||||||
lm chan bool
|
lm chan bool
|
||||||
nm int64
|
nm int64
|
||||||
recallMessage func(interface{}) bool
|
recallMessage func(interface{}) bool
|
||||||
@@ -307,8 +307,8 @@ func (f *Factory) Push(msg map[string]string) (string, error) {
|
|||||||
return sender.Reply(msg[CONETNT], PUSH(""))
|
return sender.Reply(msg[CONETNT], PUSH(""))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Factory) SetReplyHandler(function func(map[string]string) string) {
|
func (f *Factory) SetReplyHandler(function func(map[string]interface{}) string) {
|
||||||
f.reply = func(m map[string]string) string {
|
f.reply = func(m map[string]interface{}) string {
|
||||||
if f.uuid != "" {
|
if f.uuid != "" {
|
||||||
mutex := GetMutex(f.uuid)
|
mutex := GetMutex(f.uuid)
|
||||||
mutex.Lock()
|
mutex.Lock()
|
||||||
@@ -417,7 +417,7 @@ func (f *Factory) GetReplyMessage() *goja.Promise {
|
|||||||
return promise
|
return promise
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Factory) Send(function func(map[string]string) string) {
|
func (f *Factory) Send(function func(map[string]interface{}) string) {
|
||||||
f.SetReplyHandler(function)
|
f.SetReplyHandler(function)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -485,22 +485,34 @@ func (f *Factory) Receive(wt interface{}) *CustomSender {
|
|||||||
var demo = *f.demo
|
var demo = *f.demo
|
||||||
sender := &demo
|
sender := &demo
|
||||||
props := wt.(map[string]interface{})
|
props := wt.(map[string]interface{})
|
||||||
|
emf := map[string]interface{}{}
|
||||||
for i := range props {
|
for i := range props {
|
||||||
|
h := false
|
||||||
switch strings.ToLower(i) {
|
switch strings.ToLower(i) {
|
||||||
case "content":
|
case "content":
|
||||||
sender.details.Content = fmt.Sprint(props[i])
|
sender.details.Content = fmt.Sprint(props[i])
|
||||||
|
h = true
|
||||||
case "message_id", "messageId":
|
case "message_id", "messageId":
|
||||||
sender.details.MessageID = fmt.Sprint(props[i])
|
sender.details.MessageID = fmt.Sprint(props[i])
|
||||||
|
h = true
|
||||||
case "user_id", "userId":
|
case "user_id", "userId":
|
||||||
sender.details.UserID = fmt.Sprint(props[i])
|
sender.details.UserID = fmt.Sprint(props[i])
|
||||||
|
h = true
|
||||||
case "chat_id", "chatId", "group_id", "groupId", "group_code", "groupCode":
|
case "chat_id", "chatId", "group_id", "groupId", "group_code", "groupCode":
|
||||||
sender.details.ChatID = fmt.Sprint(props[i])
|
sender.details.ChatID = fmt.Sprint(props[i])
|
||||||
|
h = true
|
||||||
case "user_name", "userName":
|
case "user_name", "userName":
|
||||||
sender.details.Username = fmt.Sprint(props[i])
|
sender.details.Username = fmt.Sprint(props[i])
|
||||||
|
h = true
|
||||||
case "chat_name", "chatName", "groupName", "group_name":
|
case "chat_name", "chatName", "groupName", "group_name":
|
||||||
sender.details.Chatname = fmt.Sprint(props[i])
|
sender.details.Chatname = fmt.Sprint(props[i])
|
||||||
|
h = true
|
||||||
|
}
|
||||||
|
if !h {
|
||||||
|
emf[i] = props[i]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sender.SetExpandMessageInfo(emf)
|
||||||
if sender.details.Content != "" {
|
if sender.details.Content != "" {
|
||||||
Messages <- sender
|
Messages <- sender
|
||||||
}
|
}
|
||||||
@@ -577,7 +589,7 @@ func (sender *CustomSender) Reply(msgs ...interface{}) (string, error) {
|
|||||||
content = strings.ReplaceAll(content, "\r", "\n")
|
content = strings.ReplaceAll(content, "\r", "\n")
|
||||||
content = regexp.MustCompile("[\n]{3,}").ReplaceAllString(content, "\n\n")
|
content = regexp.MustCompile("[\n]{3,}").ReplaceAllString(content, "\n\n")
|
||||||
if content != "" {
|
if content != "" {
|
||||||
msg := map[string]string{
|
msg := map[string]interface{}{
|
||||||
"message_id": sender.GetMessageID(),
|
"message_id": sender.GetMessageID(),
|
||||||
"content": content,
|
"content": content,
|
||||||
"user_id": sender.GetUserID(),
|
"user_id": sender.GetUserID(),
|
||||||
@@ -585,6 +597,9 @@ func (sender *CustomSender) Reply(msgs ...interface{}) (string, error) {
|
|||||||
"bot_id": bot_id,
|
"bot_id": bot_id,
|
||||||
// "uuid": utils.GenUUID(),
|
// "uuid": utils.GenUUID(),
|
||||||
}
|
}
|
||||||
|
for k, v := range sender.GetExpandMessageInfo() {
|
||||||
|
msg[k] = v
|
||||||
|
}
|
||||||
if sender.f.reply == nil {
|
if sender.f.reply == nil {
|
||||||
var any *common.Function
|
var any *common.Function
|
||||||
var one *common.Function
|
var one *common.Function
|
||||||
|
|||||||
@@ -159,6 +159,7 @@ type BaseSender struct {
|
|||||||
mark interface{}
|
mark interface{}
|
||||||
params []string
|
params []string
|
||||||
level int
|
level int
|
||||||
|
emf map[string]interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sender *BaseSender) SetLevel(l int) {
|
func (sender *BaseSender) SetLevel(l int) {
|
||||||
@@ -177,6 +178,40 @@ func (sender *BaseSender) GetMark() interface{} {
|
|||||||
return sender.mark
|
return sender.mark
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (sender *BaseSender) SetExpandMessageInfo(emf map[string]interface{}) {
|
||||||
|
if sender.emf == nil {
|
||||||
|
sender.emf = map[string]interface{}{}
|
||||||
|
}
|
||||||
|
for key, value := range emf {
|
||||||
|
sender.emf[key] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sender *BaseSender) GetExpandMessageInfo() map[string]interface{} {
|
||||||
|
if sender.emf == nil {
|
||||||
|
sender.emf = map[string]interface{}{}
|
||||||
|
}
|
||||||
|
return sender.emf
|
||||||
|
}
|
||||||
|
|
||||||
|
func (sender *BaseSender) 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{} {
|
||||||
|
if sender.emf == nil {
|
||||||
|
sender.emf = map[string]interface{}{}
|
||||||
|
}
|
||||||
|
v, ok := sender.emf[key]
|
||||||
|
if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
func (sender *BaseSender) SetMatch(ss []string) {
|
func (sender *BaseSender) SetMatch(ss []string) {
|
||||||
sender.matches = [][]string{ss}
|
sender.matches = [][]string{ss}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,10 @@ type Sender interface {
|
|||||||
Stop()
|
Stop()
|
||||||
SetMark(interface{})
|
SetMark(interface{})
|
||||||
GetMark() interface{}
|
GetMark() interface{}
|
||||||
|
SetExpandMessageInfo(map[string]interface{})
|
||||||
|
GetExpandMessageInfo() map[string]interface{}
|
||||||
|
SetVar(string, interface{})
|
||||||
|
GetVar(string) interface{}
|
||||||
SetLevel(int)
|
SetLevel(int)
|
||||||
GetLevel() int
|
GetLevel() int
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -496,6 +496,16 @@ func initPlugin(data string, uuid string) (*common.Function, error) {
|
|||||||
vm.Set("res", goja.Undefined())
|
vm.Set("res", goja.Undefined())
|
||||||
vm.Set("req", goja.Undefined())
|
vm.Set("req", goja.Undefined())
|
||||||
vm.Set("sender", ss)
|
vm.Set("sender", ss)
|
||||||
|
vm.Set("run", func(uuid string) bool { //执行子脚本
|
||||||
|
fs := Functions
|
||||||
|
for i := range fs {
|
||||||
|
if fs[i].UUID == uuid {
|
||||||
|
fs[i].Handle(s, nil)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
})
|
||||||
vm.Set("s", ss)
|
vm.Set("s", ss)
|
||||||
vm.Set("InitAdapter", func(plt, botid string) *Factory {
|
vm.Set("InitAdapter", func(plt, botid string) *Factory {
|
||||||
f := &Factory{
|
f := &Factory{
|
||||||
|
|||||||
@@ -256,6 +256,24 @@ func (Sender *SenderJsIplm) Get(i interface{}) string {
|
|||||||
return Sender.Param(i)
|
return Sender.Param(i)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (Sender *SenderJsIplm) GetVar(key string) interface{} {
|
||||||
|
return Sender.Message.GetVar(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (Sender *SenderJsIplm) SetVar(key string, value interface{}) {
|
||||||
|
Sender.Message.SetVar(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (Sender *SenderJsIplm) SetVars(kvs map[string]interface{}) {
|
||||||
|
for k, v := range kvs {
|
||||||
|
Sender.SetVar(k, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (Sender *SenderJsIplm) GetVars() map[string]interface{} {
|
||||||
|
return Sender.Message.GetExpandMessageInfo()
|
||||||
|
}
|
||||||
|
|
||||||
func (sender *SenderJsIplm) IsAdmin() bool {
|
func (sender *SenderJsIplm) IsAdmin() bool {
|
||||||
return sender.Message.IsAdmin()
|
return sender.Message.IsAdmin()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ type Request struct {
|
|||||||
handled bool
|
handled bool
|
||||||
uuid string
|
uuid string
|
||||||
bodyData []byte
|
bodyData []byte
|
||||||
|
_event string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Request) Body() string {
|
func (r *Request) Body() string {
|
||||||
@@ -59,6 +60,10 @@ func (r *Request) Ip() string {
|
|||||||
return r.c.ClientIP()
|
return r.c.ClientIP()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *Request) Event() string {
|
||||||
|
return r._event
|
||||||
|
}
|
||||||
|
|
||||||
func (r *Request) OriginalUrl() string {
|
func (r *Request) OriginalUrl() string {
|
||||||
return r.c.Request.URL.String()
|
return r.c.Request.URL.String()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
"github.com/dop251/goja"
|
"github.com/dop251/goja"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/goccy/go-json"
|
"github.com/goccy/go-json"
|
||||||
|
"github.com/gorilla/websocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Response struct {
|
type Response struct {
|
||||||
@@ -26,9 +27,11 @@ type Response struct {
|
|||||||
isJson bool
|
isJson bool
|
||||||
status int
|
status int
|
||||||
isRedirect bool
|
isRedirect bool
|
||||||
|
conn *websocket.Conn
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Response) Send(gv goja.Value) *Response {
|
func (r *Response) Send(gv goja.Value) *Response {
|
||||||
|
|
||||||
gve := gv.Export()
|
gve := gv.Export()
|
||||||
switch gve := gve.(type) {
|
switch gve := gve.(type) {
|
||||||
case string:
|
case string:
|
||||||
@@ -42,6 +45,11 @@ func (r *Response) Send(gv goja.Value) *Response {
|
|||||||
r.content += fmt.Sprint(gve)
|
r.content += fmt.Sprint(gve)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if r.conn != nil {
|
||||||
|
r.conn.WriteMessage(1, []byte(r.content))
|
||||||
|
r.content = ""
|
||||||
|
return r
|
||||||
|
}
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,6 +76,11 @@ func (r *Response) Json(ps ...interface{}) *Response {
|
|||||||
} else {
|
} else {
|
||||||
r.content += fmt.Sprint(data)
|
r.content += fmt.Sprint(data)
|
||||||
}
|
}
|
||||||
|
if r.conn != nil {
|
||||||
|
r.conn.WriteMessage(1, d)
|
||||||
|
r.content = ""
|
||||||
|
return r
|
||||||
|
}
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-1
@@ -122,6 +122,10 @@ func initWeb() {
|
|||||||
uuid = utils.GenUUID()
|
uuid = utils.GenUUID()
|
||||||
c.SetCookie("uuid", uuid, 8640000, "/", "", false, true)
|
c.SetCookie("uuid", uuid, 8640000, "/", "", false, true)
|
||||||
}
|
}
|
||||||
|
if IsWebSocketRequest(c.Request) {
|
||||||
|
handleWebsocket(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
var req = &Request{
|
var req = &Request{
|
||||||
c: c,
|
c: c,
|
||||||
uuid: uuid,
|
uuid: uuid,
|
||||||
@@ -129,7 +133,6 @@ func initWeb() {
|
|||||||
var res = &Response{
|
var res = &Response{
|
||||||
c: c,
|
c: c,
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, function := range Functions {
|
for _, function := range Functions {
|
||||||
if function.Http != nil {
|
if function.Http != nil {
|
||||||
path := function.Http.Path
|
path := function.Http.Path
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
package core
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/dop251/goja"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/gorilla/websocket"
|
||||||
|
)
|
||||||
|
|
||||||
|
func IsWebSocketRequest(req *http.Request) bool {
|
||||||
|
if req.Header.Get("Upgrade") != "websocket" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if !websocket.IsWebSocketUpgrade(req) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func handleWebsocket(c *gin.Context) {
|
||||||
|
for _, function := range Functions {
|
||||||
|
if function.Http != nil {
|
||||||
|
path := function.Http.Path
|
||||||
|
method := function.Http.Method
|
||||||
|
if c.Request.URL.Path == path && strings.HasPrefix(method, "W") {
|
||||||
|
// connect
|
||||||
|
var req = &Request{
|
||||||
|
c: c,
|
||||||
|
// uuid: uuid,
|
||||||
|
}
|
||||||
|
var res = &Response{
|
||||||
|
c: c,
|
||||||
|
}
|
||||||
|
req._event = "connect"
|
||||||
|
function.Handle(&Faker{
|
||||||
|
Type: "*",
|
||||||
|
}, func(vm *goja.Runtime) {
|
||||||
|
vm.Set("res", res)
|
||||||
|
vm.Set("req", req)
|
||||||
|
})
|
||||||
|
// message
|
||||||
|
var upGrader = websocket.Upgrader{
|
||||||
|
CheckOrigin: func(r *http.Request) bool {
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
}
|
||||||
|
ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
|
||||||
|
if err != nil {
|
||||||
|
c.Writer.Write([]byte(err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for {
|
||||||
|
_, data, err := ws.ReadMessage()
|
||||||
|
if err != nil { // disconnect
|
||||||
|
req._event = "disconnect"
|
||||||
|
function.Handle(&Faker{
|
||||||
|
Type: "*",
|
||||||
|
}, func(vm *goja.Runtime) {
|
||||||
|
vm.Set("res", res)
|
||||||
|
vm.Set("req", req)
|
||||||
|
})
|
||||||
|
ws.Close()
|
||||||
|
break
|
||||||
|
}
|
||||||
|
req.bodyData = data
|
||||||
|
req._event = "message"
|
||||||
|
function.Handle(&Faker{
|
||||||
|
Type: "*",
|
||||||
|
}, func(vm *goja.Runtime) {
|
||||||
|
vm.Set("res", res)
|
||||||
|
vm.Set("req", req)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user