Oapi-Feishu/code/handlers/card_role_action.go
2024-01-28 01:20:44 +08:00

76 lines
2.1 KiB
Go

package handlers
import (
"context"
larkcard "github.com/larksuite/oapi-sdk-go/v3/card"
"start-feishubot/initialization"
"start-feishubot/services"
"start-feishubot/services/openai"
)
func NewRoleTagCardHandler(cardMsg CardMsg,
m MessageHandler) CardHandlerFunc {
return func(ctx context.Context, cardAction *larkcard.CardAction) (interface{}, error) {
if cardMsg.Kind == RoleTagsChooseKind {
newCard, err, done := CommonProcessRoleTag(cardMsg, cardAction,
m.sessionCache)
if done {
return newCard, err
}
return nil, nil
}
return nil, ErrNextHandler
}
}
func NewRoleCardHandler(cardMsg CardMsg,
m MessageHandler) CardHandlerFunc {
return func(ctx context.Context, cardAction *larkcard.CardAction) (interface{}, error) {
if cardMsg.Kind == RoleChooseKind {
newCard, err, done := CommonProcessRole(cardMsg, cardAction,
m.sessionCache)
if done {
return newCard, err
}
return nil, nil
}
return nil, ErrNextHandler
}
}
func CommonProcessRoleTag(msg CardMsg, cardAction *larkcard.CardAction,
cache services.SessionServiceCacheInterface) (interface{},
error, bool) {
option := cardAction.Action.Option
//replyMsg(context.Background(), "已选择tag:"+option,
// &msg.MsgId)
roles := initialization.GetTitleListByTag(option)
//fmt.Printf("roles: %s", roles)
SendRoleListCard(context.Background(), &msg.SessionId,
&msg.MsgId, option, *roles)
return nil, nil, true
}
func CommonProcessRole(msg CardMsg, cardAction *larkcard.CardAction,
cache services.SessionServiceCacheInterface) (interface{},
error, bool) {
option := cardAction.Action.Option
contentByTitle, error := initialization.GetFirstRoleContentByTitle(option)
if error != nil {
return nil, error, true
}
cache.Clear(msg.SessionId)
systemMsg := append([]openai.Messages{}, openai.Messages{
Role: "system", Content: contentByTitle,
})
cache.SetMsg(msg.SessionId, systemMsg)
//pp.Println("systemMsg: ", systemMsg)
sendSystemInstructionCard(context.Background(), &msg.SessionId,
&msg.MsgId, contentByTitle)
//replyMsg(context.Background(), "已选择角色:"+contentByTitle,
// &msg.MsgId)
return nil, nil, true
}