71 lines
1.6 KiB
Go
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
|
|
}
|