🆕 支持转发消息到外部服务(暂时只支持socket)

This commit is contained in:
李寻欢 2023-12-06 10:16:52 +08:00
parent 81be5a0f70
commit 63d50b815c
4 changed files with 44 additions and 3 deletions

View File

@ -6,6 +6,9 @@ wechat:
autoSetCallback: false autoSetCallback: false
# 回调IP如果是Docker运行本参数必填如果Docker修改了映射格式为 ip:port # 回调IP如果是Docker运行本参数必填如果Docker修改了映射格式为 ip:port
callback: 10.0.0.51 callback: 10.0.0.51
# 转发到其他地址
forward:
- 10.0.0.247:4299
# 数据库 # 数据库
mysql: mysql:
@ -39,3 +42,9 @@ ai:
baseUrl: https://sxxx baseUrl: https://sxxx
# 人设 # 人设
personality: 你的名字叫张三,你是一个百科机器人,你的爱好是看电影,你的性格是开朗的,你的专长是讲故事,你的梦想是当一名童话故事作家。你对政治没有一点儿兴趣,也不会讨论任何与政治相关的话题,你甚至可以拒绝回答这一类话题。 personality: 你的名字叫张三,你是一个百科机器人,你的爱好是看电影,你的性格是开朗的,你的专长是讲故事,你的梦想是当一名童话故事作家。你对政治没有一点儿兴趣,也不会讨论任何与政治相关的话题,你甚至可以拒绝回答这一类话题。
# 资源配置这玩意儿是机器人那个机器上的smb文件夹
# 暂时没用 - 2023-12-6
resource:
localPath: /files
remotePath: D:\Share\

View File

@ -8,6 +8,7 @@ type wechat struct {
Host string `json:"host" yaml:"host"` // 接口地址 Host string `json:"host" yaml:"host"` // 接口地址
AutoSetCallback bool `json:"autoSetCallback" yaml:"autoSetCallback"` // 是否自动设置回调地址 AutoSetCallback bool `json:"autoSetCallback" yaml:"autoSetCallback"` // 是否自动设置回调地址
Callback string `json:"callback" yaml:"callback"` // 回调地址 Callback string `json:"callback" yaml:"callback"` // 回调地址
Forward []string `json:"forward" yaml:"forward"` // 转发地址
} }
// Check // Check

25
tcpserver/forward.go Normal file
View File

@ -0,0 +1,25 @@
package tcpserver
import (
"go-wechat/config"
"log"
"net"
)
// forward
// @description: 转发消息
func forward(msg []byte) {
// 使用socket转发消息
for _, s := range config.Conf.Wechat.Forward {
conn, err := net.Dial("tcp", s)
if err != nil {
log.Printf("转发消息失败,错误信息: %v", err)
continue
}
_, err = conn.Write(msg)
if err != nil {
log.Printf("转发消息失败,错误信息: %v", err)
}
_ = conn.Close()
}
}

View File

@ -2,6 +2,7 @@ package tcpserver
import ( import (
"bytes" "bytes"
"go-wechat/config"
"go-wechat/handler" "go-wechat/handler"
"io" "io"
"log" "log"
@ -24,6 +25,11 @@ func process(conn net.Conn) {
} }
log.Printf("[%s]数据长度: %d", conn.RemoteAddr(), buf.Len()) log.Printf("[%s]数据长度: %d", conn.RemoteAddr(), buf.Len())
go handler.Parse(conn.RemoteAddr(), buf.Bytes()) go handler.Parse(conn.RemoteAddr(), buf.Bytes())
// 转发到其他地方去
if len(config.Conf.Wechat.Forward) > 0 {
go forward(buf.Bytes())
}
// 将接受到的数据返回给客户端 // 将接受到的数据返回给客户端
if _, err := conn.Write([]byte("200 OK")); err != nil { if _, err := conn.Write([]byte("200 OK")); err != nil {
log.Printf("[%s]返回数据失败,错误信息: %v", conn.RemoteAddr(), err) log.Printf("[%s]返回数据失败,错误信息: %v", conn.RemoteAddr(), err)