Files
picoclaw/pkg/channels/feishu.go
2026-02-09 19:20:19 +08:00

71 lines
1.6 KiB
Go

package channels
import (
"context"
"fmt"
"log"
"github.com/sipeed/picoclaw/pkg/bus"
"github.com/sipeed/picoclaw/pkg/config"
)
type FeishuChannel struct {
*BaseChannel
config config.FeishuConfig
}
func NewFeishuChannel(cfg config.FeishuConfig, bus *bus.MessageBus) (*FeishuChannel, error) {
base := NewBaseChannel("feishu", cfg, bus, cfg.AllowFrom)
return &FeishuChannel{
BaseChannel: base,
config: cfg,
}, nil
}
func (c *FeishuChannel) Start(ctx context.Context) error {
log.Println("Feishu channel started")
c.setRunning(true)
return nil
}
func (c *FeishuChannel) Stop(ctx context.Context) error {
log.Println("Feishu channel stopped")
c.setRunning(false)
return nil
}
func (c *FeishuChannel) Send(ctx context.Context, msg bus.OutboundMessage) error {
if !c.IsRunning() {
return fmt.Errorf("feishu channel not running")
}
htmlContent := markdownToFeishuCard(msg.Content)
log.Printf("Feishu send to %s: %s", msg.ChatID, truncateString(htmlContent, 100))
return nil
}
func (c *FeishuChannel) handleIncomingMessage(data map[string]interface{}) {
senderID, _ := data["sender_id"].(string)
chatID, _ := data["chat_id"].(string)
content, _ := data["content"].(string)
log.Printf("Feishu message from %s: %s...", senderID, truncateString(content, 50))
metadata := make(map[string]string)
if messageID, ok := data["message_id"].(string); ok {
metadata["message_id"] = messageID
}
if userName, ok := data["sender_name"].(string); ok {
metadata["sender_name"] = userName
}
c.HandleMessage(senderID, chatID, content, nil, metadata)
}
func markdownToFeishuCard(markdown string) string {
return markdown
}