mirror of
https://github.com/woodchen-ink/Oapi-Feishu.git
synced 2025-07-18 05:42:08 +08:00
100 lines
2.7 KiB
Go
100 lines
2.7 KiB
Go
package commands
|
|
|
|
import (
|
|
"github.com/go-zoox/chatgpt-for-chatbot-feishu/config"
|
|
"github.com/go-zoox/core-utils/fmt"
|
|
"github.com/go-zoox/feishu"
|
|
"github.com/go-zoox/feishu/contact/user"
|
|
feishuEvent "github.com/go-zoox/feishu/event"
|
|
mc "github.com/go-zoox/feishu/message/content"
|
|
)
|
|
|
|
func replyText(reply func(content string, msgType ...string) error, text string) error {
|
|
msgType, content, err := mc.
|
|
NewContent().
|
|
Post(&mc.ContentTypePost{
|
|
ZhCN: &mc.ContentTypePostBody{
|
|
Content: [][]mc.ContentTypePostBodyItem{
|
|
{
|
|
{
|
|
Tag: "text",
|
|
UnEscape: true,
|
|
Text: text,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}).
|
|
Build()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to build content: %v", err)
|
|
}
|
|
if err := reply(string(content), msgType); err != nil {
|
|
return fmt.Errorf("failed to reply: %v", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func replyImage(reply func(content string, msgType ...string) error, imageKey string) error {
|
|
msgType, content, err := mc.
|
|
NewContent().
|
|
Image(&mc.ContentTypeImage{
|
|
ImageKey: imageKey,
|
|
}).
|
|
Build()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to build content: %v", err)
|
|
}
|
|
if err := reply(string(content), msgType); err != nil {
|
|
return fmt.Errorf("failed to reply: %v", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func isAllowToDo(feishuClient feishu.Client, cfg *config.Config, request *feishuEvent.EventRequest, command string) (reason error) {
|
|
if cfg.AdminEmail != "" {
|
|
eventSender, err := feishuClient.Contact().User().Retrieve(&user.RetrieveRequest{
|
|
UserIDType: "open_id",
|
|
UserID: request.Sender().SenderID.OpenID,
|
|
})
|
|
if err != nil {
|
|
return fmt.Errorf("failed to retrieve user with openid(%s): %v", request.Sender().SenderID.OpenID, err)
|
|
}
|
|
|
|
if eventSender.User.EnterpriseEmail != cfg.AdminEmail && eventSender.User.Email != cfg.AdminEmail {
|
|
return fmt.Errorf("user(%s) is not allow to do action: %s", eventSender.User.Name, command)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
return fmt.Errorf("admin email is not set, not allow to do action: %s", command)
|
|
}
|
|
|
|
func getUser(feishuClient feishu.Client, request *feishuEvent.EventRequest, cfg *config.Config) (*user.RetrieveResponse, error) {
|
|
sender := request.Sender()
|
|
|
|
if cfg.AdminEmail != "" {
|
|
eventSender, err := feishuClient.Contact().User().Retrieve(&user.RetrieveRequest{
|
|
UserIDType: "open_id",
|
|
UserID: sender.SenderID.OpenID,
|
|
})
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to retrieve user with openid(%s): %v", sender.SenderID.OpenID, err)
|
|
}
|
|
|
|
return eventSender, nil
|
|
}
|
|
|
|
return &user.RetrieveResponse{
|
|
User: user.UserEntity{
|
|
Name: sender.SenderID.UserID,
|
|
OpenID: sender.SenderID.OpenID,
|
|
UnionID: sender.SenderID.UnionID,
|
|
UserID: sender.SenderID.UserID,
|
|
},
|
|
}, nil
|
|
}
|