From 38ebdebd1418d5dd1a84d996b6a06e8bdd2e6dcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AC=E6=98=8E?= <83812544+Ed1s0nZ@users.noreply.github.com> Date: Mon, 6 Jul 2026 13:59:13 +0800 Subject: [PATCH] Add files via upload --- internal/app/app.go | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/internal/app/app.go b/internal/app/app.go index 37f592e2..a1f783b8 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -55,11 +55,15 @@ type App struct { knowledgeIndexer *knowledge.Indexer // 知识库索引器(用于动态初始化) knowledgeHandler *handler.KnowledgeHandler // 知识库处理器(用于动态初始化) agentHandler *handler.AgentHandler // Agent处理器(用于更新知识库管理器) - robotHandler *handler.RobotHandler // 机器人处理器(钉钉/飞书/企业微信) - robotMu sync.Mutex // 保护钉钉/飞书长连接的 cancel + robotHandler *handler.RobotHandler // 机器人处理器(钉钉/飞书/企业微信等) + robotMu sync.Mutex // 保护机器人长连接的 cancel dingCancel context.CancelFunc // 钉钉 Stream 取消函数,用于配置变更时重启 larkCancel context.CancelFunc // 飞书长连接取消函数,用于配置变更时重启 wechatCancel context.CancelFunc // 微信 iLink 长轮询取消函数 + telegramCancel context.CancelFunc // Telegram 长轮询取消函数 + slackCancel context.CancelFunc // Slack Socket Mode 取消函数 + discordCancel context.CancelFunc // Discord Gateway 取消函数 + qqCancel context.CancelFunc // QQ WebSocket 取消函数 c2Manager *c2.Manager // C2 管理器(未启用 C2 时为 nil) c2Watchdog *c2.SessionWatchdog // C2 会话看门狗 c2WatchdogCancel context.CancelFunc // 看门狗取消函数 @@ -728,6 +732,26 @@ func (a *App) startRobotConnections() { a.wechatCancel = cancel go robot.StartWechat(ctx, cfg.Robots, a.robotHandler, cfg.Version, a.logger.Logger) } + if cfg.Robots.Telegram.Enabled && strings.TrimSpace(cfg.Robots.Telegram.BotToken) != "" { + ctx, cancel := context.WithCancel(context.Background()) + a.telegramCancel = cancel + go robot.StartTelegram(ctx, cfg.Robots, a.robotHandler, a.logger.Logger) + } + if cfg.Robots.Slack.Enabled && strings.TrimSpace(cfg.Robots.Slack.BotToken) != "" && strings.TrimSpace(cfg.Robots.Slack.AppToken) != "" { + ctx, cancel := context.WithCancel(context.Background()) + a.slackCancel = cancel + go robot.StartSlack(ctx, cfg.Robots, a.robotHandler, a.logger.Logger) + } + if cfg.Robots.Discord.Enabled && strings.TrimSpace(cfg.Robots.Discord.BotToken) != "" { + ctx, cancel := context.WithCancel(context.Background()) + a.discordCancel = cancel + go robot.StartDiscord(ctx, cfg.Robots, a.robotHandler, a.logger.Logger) + } + if cfg.Robots.QQ.Enabled && strings.TrimSpace(cfg.Robots.QQ.AppID) != "" && strings.TrimSpace(cfg.Robots.QQ.ClientSecret) != "" { + ctx, cancel := context.WithCancel(context.Background()) + a.qqCancel = cancel + go robot.StartQQ(ctx, cfg.Robots, a.robotHandler, a.logger.Logger) + } } // RestartRobotConnections 重启钉钉/飞书/微信长连接,使前端应用配置后立即生效(实现 handler.RobotRestarter) @@ -745,6 +769,22 @@ func (a *App) RestartRobotConnections() { a.wechatCancel() a.wechatCancel = nil } + if a.telegramCancel != nil { + a.telegramCancel() + a.telegramCancel = nil + } + if a.slackCancel != nil { + a.slackCancel() + a.slackCancel = nil + } + if a.discordCancel != nil { + a.discordCancel() + a.discordCancel = nil + } + if a.qqCancel != nil { + a.qqCancel() + a.qqCancel = nil + } a.robotMu.Unlock() // 给旧 goroutine 一点时间退出 time.Sleep(200 * time.Millisecond)