mirror of
https://github.com/woodchen-ink/Oapi-Feishu.git
synced 2025-07-18 05:42:08 +08:00
93 lines
2.8 KiB
Go
93 lines
2.8 KiB
Go
package handlers
|
||
|
||
import (
|
||
"context"
|
||
larkcard "github.com/larksuite/oapi-sdk-go/v3/card"
|
||
"start-feishubot/services"
|
||
)
|
||
|
||
func NewPicResolutionHandler(cardMsg CardMsg, m MessageHandler) CardHandlerFunc {
|
||
return func(ctx context.Context, cardAction *larkcard.CardAction) (interface{}, error) {
|
||
if cardMsg.Kind == PicResolutionKind {
|
||
CommonProcessPicResolution(cardMsg, cardAction, m.sessionCache)
|
||
return nil, nil
|
||
}
|
||
return nil, ErrNextHandler
|
||
}
|
||
}
|
||
|
||
func NewPicModeChangeHandler(cardMsg CardMsg, m MessageHandler) CardHandlerFunc {
|
||
return func(ctx context.Context, cardAction *larkcard.CardAction) (interface{}, error) {
|
||
if cardMsg.Kind == PicModeChangeKind {
|
||
newCard, err, done := CommonProcessPicModeChange(cardMsg, m.sessionCache)
|
||
if done {
|
||
return newCard, err
|
||
}
|
||
return nil, nil
|
||
}
|
||
return nil, ErrNextHandler
|
||
}
|
||
}
|
||
func NewPicTextMoreHandler(cardMsg CardMsg, m MessageHandler) CardHandlerFunc {
|
||
return func(ctx context.Context, cardAction *larkcard.CardAction) (interface{}, error) {
|
||
if cardMsg.Kind == PicTextMoreKind {
|
||
go func() {
|
||
m.CommonProcessPicMore(cardMsg)
|
||
}()
|
||
return nil, nil
|
||
}
|
||
return nil, ErrNextHandler
|
||
}
|
||
}
|
||
|
||
func CommonProcessPicResolution(msg CardMsg,
|
||
cardAction *larkcard.CardAction,
|
||
cache services.SessionServiceCacheInterface) {
|
||
option := cardAction.Action.Option
|
||
//fmt.Println(larkcore.Prettify(msg))
|
||
cache.SetPicResolution(msg.SessionId, services.Resolution(option))
|
||
//send text
|
||
replyMsg(context.Background(), "已更新图片分辨率为"+option,
|
||
&msg.MsgId)
|
||
}
|
||
|
||
func (m MessageHandler) CommonProcessPicMore(msg CardMsg) {
|
||
resolution := m.sessionCache.GetPicResolution(msg.SessionId)
|
||
//fmt.Println("resolution: ", resolution)
|
||
//fmt.Println("msg: ", msg)
|
||
question := msg.Value.(string)
|
||
bs64, _ := m.gpt.GenerateOneImage(question, resolution)
|
||
replayImageCardByBase64(context.Background(), bs64, &msg.MsgId,
|
||
&msg.SessionId, question)
|
||
}
|
||
|
||
func CommonProcessPicModeChange(cardMsg CardMsg,
|
||
session services.SessionServiceCacheInterface) (
|
||
interface{}, error, bool) {
|
||
if cardMsg.Value == "1" {
|
||
|
||
sessionId := cardMsg.SessionId
|
||
session.Clear(sessionId)
|
||
session.SetMode(sessionId,
|
||
services.ModePicCreate)
|
||
session.SetPicResolution(sessionId,
|
||
services.Resolution256)
|
||
|
||
newCard, _ :=
|
||
newSendCard(
|
||
withHeader("🖼️ 已进入图片创作模式", larkcard.TemplateBlue),
|
||
withPicResolutionBtn(&sessionId),
|
||
withNote("提醒:回复文本或图片,让AI生成相关的图片。"))
|
||
return newCard, nil, true
|
||
}
|
||
if cardMsg.Value == "0" {
|
||
newCard, _ := newSendCard(
|
||
withHeader("️🎒 机器人提醒", larkcard.TemplateGreen),
|
||
withMainMd("依旧保留此话题的上下文信息"),
|
||
withNote("我们可以继续探讨这个话题,期待和您聊天。如果您有其他问题或者想要讨论的话题,请告诉我哦"),
|
||
)
|
||
return newCard, nil, true
|
||
}
|
||
return nil, nil, false
|
||
}
|