* First commit
This commit is contained in:
70
pkg/channels/feishu.go
Normal file
70
pkg/channels/feishu.go
Normal file
@@ -0,0 +1,70 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user