Browse Source

chore: ⬆️ dingtalk-stream-sdk-go 依赖版本升级 (#242)

二丫讲梵 1 year ago
parent
commit
a564be388f
5 changed files with 25 additions and 146 deletions
  1. 1 1
      go.mod
  2. 2 2
      go.sum
  3. 22 23
      main.go
  4. 0 84
      public/example_bot.go
  5. 0 36
      public/example_event.go

+ 1 - 1
go.mod

@@ -7,7 +7,7 @@ require (
 	github.com/gin-gonic/gin v1.9.0
 	github.com/glebarez/sqlite v1.7.0
 	github.com/go-resty/resty/v2 v2.7.0
-	github.com/open-dingtalk/dingtalk-stream-sdk-go v0.0.1
+	github.com/open-dingtalk/dingtalk-stream-sdk-go v0.0.4
 	github.com/patrickmn/go-cache v2.1.0+incompatible
 	github.com/sashabaranov/go-openai v1.6.1
 	github.com/solywsh/chatgpt v0.0.14

+ 2 - 2
go.sum

@@ -101,8 +101,8 @@ github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
 github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8=
 github.com/muesli/termenv v0.15.1 h1:UzuTb/+hhlBugQz28rpzey4ZuKcZ03MeKsoG7IJZIxs=
 github.com/muesli/termenv v0.15.1/go.mod h1:HeAQPTzpfs016yGtA4g00CsdYnVLJvxsS4ANqrZs2sQ=
-github.com/open-dingtalk/dingtalk-stream-sdk-go v0.0.1 h1:F7c4ZWg5FuL0giOVg0slzPmYLwbuQqTjsu5BkUL6VEU=
-github.com/open-dingtalk/dingtalk-stream-sdk-go v0.0.1/go.mod h1:ln3IqPYYocZbYvl9TAOrG/cxGR9xcn4pnZRLdCTEGEU=
+github.com/open-dingtalk/dingtalk-stream-sdk-go v0.0.4 h1:34Ox70UZ+7TIg3Qho1QqQOUtRTo8eO3f8XYE+P27PiQ=
+github.com/open-dingtalk/dingtalk-stream-sdk-go v0.0.4/go.mod h1:ln3IqPYYocZbYvl9TAOrG/cxGR9xcn4pnZRLdCTEGEU=
 github.com/pandodao/tokenizer-go v0.2.0 h1:NhfI8fGvQkDld2cZCag6NEU3pJ/ugU9zoY1R/zi9YCs=
 github.com/pandodao/tokenizer-go v0.2.0/go.mod h1:t6qFbaleKxbv0KNio2XUN/mfGM5WKv4haPXDQWVDG00=
 github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=

+ 22 - 23
main.go

@@ -16,15 +16,15 @@ import (
 	"github.com/gin-gonic/gin"
 	"github.com/open-dingtalk/dingtalk-stream-sdk-go/chatbot"
 	"github.com/open-dingtalk/dingtalk-stream-sdk-go/client"
-	loger "github.com/open-dingtalk/dingtalk-stream-sdk-go/logger"
-	"github.com/open-dingtalk/dingtalk-stream-sdk-go/payload"
-	"github.com/open-dingtalk/dingtalk-stream-sdk-go/utils"
 )
 
 func init() {
+	// 初始化加载配置,数据库,模板等
 	public.InitSvc()
+	// 指定日志等级
 	logger.InitLogger(public.Config.LogLevel)
 }
+
 func main() {
 	if public.Config.RunMode == "http" {
 		StartHttp()
@@ -32,28 +32,11 @@ func main() {
 		for _, credential := range public.Config.Credentials {
 			StartStream(credential.ClientID, credential.ClientSecret)
 		}
+		logger.Info("🚀 The Server Is Running On Stream Mode")
 		select {}
 	}
 }
 
-// 启动为 stream 模式
-func StartStream(clientId, clientSecret string) {
-	receiver := NewChatReceiver(clientId, clientSecret)
-	loger.SetLogger(loger.NewStdTestLogger())
-	cli := client.NewStreamClient(
-		client.WithAppCredential(client.NewAppCredentialConfig(clientId, clientSecret)),
-		client.WithUserAgent(client.NewDingtalkGoSDKUserAgent()),
-		client.WithSubscription(utils.SubscriptionTypeKCallback, payload.BotMessageCallbackTopic, chatbot.NewDefaultChatBotFrameHandler(receiver.OnChatReceive).OnEventReceived),
-	)
-	err := cli.Start(context.Background())
-	if err != nil {
-		panic(err)
-	}
-
-	defer cli.Close()
-
-}
-
 type ChatReceiver struct {
 	clientId     string
 	clientSecret string
@@ -66,7 +49,23 @@ func NewChatReceiver(clientId, clientSecret string) *ChatReceiver {
 	}
 }
 
-func (r *ChatReceiver) OnChatReceive(ctx context.Context, data *chatbot.BotCallbackDataModel) (err error) {
+// 启动为 stream 模式
+func StartStream(clientId, clientSecret string) {
+	receiver := NewChatReceiver(clientId, clientSecret)
+	cli := client.NewStreamClient(client.WithAppCredential(client.NewAppCredentialConfig(clientId, clientSecret)))
+
+	//注册callback类型的处理函数
+	cli.RegisterChatBotCallbackRouter(receiver.OnChatBotMessageReceived)
+
+	err := cli.Start(context.Background())
+	if err != nil {
+		logger.Fatal("strar stream failed: %v\n", err)
+	}
+	defer cli.Close()
+}
+
+// OnChatBotMessageReceived 简单的应答机器人实现
+func (r *ChatReceiver) OnChatBotMessageReceived(ctx context.Context, data *chatbot.BotCallbackDataModel) ([]byte, error) {
 	msgObj := dingbot.ReceiveMsg{
 		ConversationID: data.ConversationId,
 		AtUsers: []struct {
@@ -93,7 +92,7 @@ func (r *ChatReceiver) OnChatReceive(ctx context.Context, data *chatbot.BotCallb
 	c.Set(public.DingTalkClientIdKeyName, clientId)
 	DoRequest(msgObj, &c)
 
-	return nil
+	return []byte(""), nil
 }
 
 func StartHttp() {

+ 0 - 84
public/example_bot.go

@@ -1,84 +0,0 @@
-package public
-
-import (
-	"bytes"
-	"context"
-	"encoding/json"
-	"fmt"
-	"net/http"
-	"time"
-
-	"github.com/open-dingtalk/dingtalk-stream-sdk-go/chatbot"
-	"github.com/open-dingtalk/dingtalk-stream-sdk-go/client"
-	"github.com/open-dingtalk/dingtalk-stream-sdk-go/logger"
-	"github.com/open-dingtalk/dingtalk-stream-sdk-go/payload"
-	"github.com/open-dingtalk/dingtalk-stream-sdk-go/utils"
-)
-
-/**
- * @Author linya.jj
- * @Date 2023/3/22 18:30
- */
-
-func OnBotCallback(ctx context.Context, df *payload.DataFrame) (*payload.DataFrameResponse, error) {
-	frameResp := &payload.DataFrameResponse{
-		Code: 200,
-		Headers: payload.DataFrameHeader{
-			payload.DataFrameHeaderKContentType: payload.DataFrameContentTypeKJson,
-			payload.DataFrameHeaderKMessageId:   df.GetMessageId(),
-		},
-		Message: "ok",
-		Data:    "",
-	}
-
-	return frameResp, nil
-}
-
-func OnChatReceive(ctx context.Context, data *chatbot.BotCallbackDataModel) error {
-	requestBody := map[string]interface{}{
-		"msgtype": "text",
-		"text": map[string]interface{}{
-			"content": fmt.Sprintf("msg received: [%s]", data.Text.Content),
-		},
-	}
-
-	requestJsonBody, _ := json.Marshal(requestBody)
-	req, err := http.NewRequestWithContext(ctx, http.MethodPost, data.SessionWebhook, bytes.NewReader(requestJsonBody))
-	if err != nil {
-		return err
-	}
-
-	req.Header.Set("Content-Type", "application/json")
-	req.Header.Set("Accept", "*/*")
-
-	httpClient := &http.Client{
-		Transport: http.DefaultTransport,
-		Timeout:   5 * time.Second, //设置超时,包含connection时间、任意重定向时间、读取response body时间
-	}
-
-	_, err = httpClient.Do(req)
-	if err != nil {
-		return err
-	}
-
-	return nil
-}
-
-func RunBotListener(clientId, clientSecret string) {
-	logger.SetLogger(logger.NewStdTestLogger())
-
-	cli := client.NewStreamClient(
-		client.WithAppCredential(client.NewAppCredentialConfig(clientId, clientSecret)),
-		client.WithUserAgent(client.NewDingtalkGoSDKUserAgent()),
-		client.WithSubscription(utils.SubscriptionTypeKCallback, payload.BotMessageCallbackTopic, chatbot.NewDefaultChatBotFrameHandler(OnChatReceive).OnEventReceived),
-	)
-
-	err := cli.Start(context.Background())
-	if err != nil {
-		panic(err)
-	}
-
-	defer cli.Close()
-
-	select {}
-}

+ 0 - 36
public/example_event.go

@@ -1,36 +0,0 @@
-package public
-
-import (
-	"context"
-
-	"github.com/open-dingtalk/dingtalk-stream-sdk-go/client"
-	"github.com/open-dingtalk/dingtalk-stream-sdk-go/event"
-	"github.com/open-dingtalk/dingtalk-stream-sdk-go/logger"
-	"github.com/open-dingtalk/dingtalk-stream-sdk-go/utils"
-)
-
-/**
- * @Author linya.jj
- * @Date 2023/3/22 18:30
- */
-
-func RunEventListener(clientId, clientSecret string) {
-	logger.SetLogger(logger.NewStdTestLogger())
-
-	eventHandler := event.NewDefaultEventFrameHandler(event.EventHandlerDoNothing)
-
-	cli := client.NewStreamClient(
-		client.WithAppCredential(client.NewAppCredentialConfig(clientId, clientSecret)),
-		client.WithUserAgent(client.NewDingtalkGoSDKUserAgent()),
-		client.WithSubscription(utils.SubscriptionTypeKEvent, "*", eventHandler.OnEventReceived),
-	)
-
-	err := cli.Start(context.Background())
-	if err != nil {
-		panic(err)
-	}
-
-	defer cli.Close()
-
-	select {}
-}