2026-01-05 00:40:09 +08:00
|
|
|
package milky
|
|
|
|
|
|
|
|
|
|
import (
|
2026-01-05 18:42:45 +08:00
|
|
|
"cellbot/pkg/net"
|
2026-01-05 00:40:09 +08:00
|
|
|
"fmt"
|
|
|
|
|
|
|
|
|
|
"go.uber.org/zap"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// WebhookServer Webhook 服务器
|
2026-01-05 18:42:45 +08:00
|
|
|
// 使用 pkg/net.SimpleWebhookServer 实现,避免重复的 fasthttp 代码
|
2026-01-05 00:40:09 +08:00
|
|
|
type WebhookServer struct {
|
2026-01-05 18:42:45 +08:00
|
|
|
server *net.SimpleWebhookServer
|
|
|
|
|
logger *zap.Logger
|
|
|
|
|
addr string
|
2026-01-05 00:40:09 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// NewWebhookServer 创建 Webhook 服务器
|
2026-01-05 18:42:45 +08:00
|
|
|
func NewWebhookServer(addr string, accessToken string, logger *zap.Logger) *WebhookServer {
|
|
|
|
|
eventChan := make(chan []byte, 100)
|
|
|
|
|
|
|
|
|
|
config := net.SimpleWebhookConfig{
|
|
|
|
|
Addr: addr,
|
|
|
|
|
AccessToken: accessToken,
|
|
|
|
|
EventChannel: eventChan,
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-05 00:40:09 +08:00
|
|
|
return &WebhookServer{
|
2026-01-05 18:42:45 +08:00
|
|
|
server: net.NewSimpleWebhookServer(config, logger),
|
|
|
|
|
logger: logger.Named("webhook-server"),
|
|
|
|
|
addr: addr,
|
2026-01-05 00:40:09 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Start 启动服务器
|
|
|
|
|
func (s *WebhookServer) Start() error {
|
|
|
|
|
s.logger.Info("Starting webhook server", zap.String("addr", s.addr))
|
|
|
|
|
|
2026-01-05 18:42:45 +08:00
|
|
|
if err := s.server.Start(); err != nil {
|
|
|
|
|
return fmt.Errorf("failed to start webhook server: %w", err)
|
2026-01-05 00:40:09 +08:00
|
|
|
}
|
|
|
|
|
|
2026-01-05 18:42:45 +08:00
|
|
|
return nil
|
2026-01-05 00:40:09 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Events 获取事件通道
|
|
|
|
|
func (s *WebhookServer) Events() <-chan []byte {
|
2026-01-05 18:42:45 +08:00
|
|
|
return s.server.Events()
|
2026-01-05 00:40:09 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Stop 停止服务器
|
|
|
|
|
func (s *WebhookServer) Stop() error {
|
2026-01-05 18:42:45 +08:00
|
|
|
s.logger.Info("Stopping webhook server")
|
|
|
|
|
|
|
|
|
|
if err := s.server.Stop(); err != nil {
|
|
|
|
|
return fmt.Errorf("failed to stop webhook server: %w", err)
|
2026-01-05 00:40:09 +08:00
|
|
|
}
|
2026-01-05 18:42:45 +08:00
|
|
|
|
2026-01-05 00:40:09 +08:00
|
|
|
return nil
|
|
|
|
|
}
|