惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
I
InfoQ
The Register - Security
The Register - Security
L
LangChain Blog
H
Help Net Security
The GitHub Blog
The GitHub Blog
S
Schneier on Security
博客园 - 【当耐特】
W
WeLiveSecurity
Attack and Defense Labs
Attack and Defense Labs
IT之家
IT之家
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Google DeepMind News
Google DeepMind News
The Cloudflare Blog
H
Heimdal Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Y
Y Combinator Blog
雷峰网
雷峰网
N
Netflix TechBlog - Medium
Security Archives - TechRepublic
Security Archives - TechRepublic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
Lohrmann on Cybersecurity
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Exploit Database - CXSecurity.com
P
Privacy & Cybersecurity Law Blog
G
GRAHAM CLULEY
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
V
Visual Studio Blog
博客园 - 聂微东
PCI Perspectives
PCI Perspectives
Last Week in AI
Last Week in AI
A
Arctic Wolf
宝玉的分享
宝玉的分享
T
The Blog of Author Tim Ferriss
S
Secure Thoughts
T
Threat Research - Cisco Blogs
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
SegmentFault 最新的问题
SecWiki News
SecWiki News
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
Schneier on Security
Schneier on Security
P
Proofpoint News Feed
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
AI
AI
Engineering at Meta
Engineering at Meta

博客园 - wuty007

C# 范围运算符 C# 调用WGC 实现桌面屏幕的捕获 完善基于WPF开发的标尺控件(含实例代码) C# 依赖注入 Microsoft.Extensions.DependencyInjection 实现 控制反转(IOC) C# 获取Windows系统的设备名称 记录 Windows系统开启hyper-v ,部分端口被保留,导致端口不能使用而报错的问题 WPF 调用 Win32的SetWindowDisplayAffinity 函数 实现捕获屏幕时,过滤指定的窗口 记录WPF 在清单列表设置了UIACESS为true,没有签名的报错“从服务器返回了一个参照” WPF 的ListBox 去除默认的Item项的 鼠标hover的背景颜色 WPF 调用 ChangeWindowMessageFilterEx 修改指定窗口 (UIPI) 消息筛选器的用户界面特权隔离 记录一下 WPF进程 SendMessage 发送窗口消息进行进程间通信,存在进程权限无法接受消息的问题 记录 使用PsExec启动System权限的WPF 程序 记录 命令行的 findstr 的使用 排查Windows 下的内存使用率过高,但是任务管理器看不到进程 Everything 支持 多实例 运行 指定应用 在 控制面板或者 设置的安装应用 置灰或隐藏卸载按钮 WPF 通过RawInput 获取 系统全局触摸事件 C# 定时任务 Quartz.NET 的使用 记录一下Windows系统下的命令行参数的字符个数限制 WPF 实现支持动态调整高度的文本显示控件
TelegramConsole
wuty007 · 2026-07-25 · via 博客园 - wuty007

TelegramConsole:把 Telegram 多账号、定时任务、消息检索和 NAS 后台放进一个控制台

项目地址:https://github.com/wutangyuan/TelegramConsole

最近把 TelegramConsole 做了一轮比较系统的整理:它已经不只是一个“能登录 Telegram 的 WPF 小工具”,而是逐渐变成了一个面向长期运行的 Telegram 控制台。桌面端负责日常交互,NAS/Docker 端负责后台常驻,底层把 Telegram 连接、定时调度、日志、异常、SQLite 索引、发件箱和 AI 摘要能力拆成了相对清楚的模块。

最新 README 里也补上了完整的界面图集:docs/SCREENSHOTS.md 覆盖了账号工作区、效率工具、全局设置和管理中心共 20 个页签,所有公开图片都使用脱敏演示数据,不包含真实账号、会话、消息、密钥或网络信息。这篇文章也按最新 README 的结构重新整理一下:它解决什么问题、架构怎么拆、以及几个最值得展开的功能点。

TelegramConsole 架构速览

为什么要做这个项目

Telegram 官方客户端很强,但如果想把它当成“自动化入口”或者“长期运行的消息控制台”,就会遇到一些细碎问题:

  • 多账号同时跑时,需要统一看状态、日志和异常。
  • 群消息监控、关键词通知、@我的消息 记录、定时签到这些事,靠手工客户端不太适合。
  • NAS 上希望有一个轻量 Web 控制台,能长期跑,不依赖 Windows 桌面会话。
  • 消息检索、引用回复、编辑、撤回、转发、自动化规则等操作,最好复用同一套 Telegram 服务接口,而不是各写各的。
  • AI 摘要、回复草稿、群成员自动回复这类能力,也需要一个统一的模型调用入口。

所以 TelegramConsole 的目标不是替代 Telegram 客户端,而是把“可自动化、可观测、可长期运行”的那部分能力抽出来。

项目结构

当前解决方案按职责拆成了几个项目:

  • TelegramConsole.Core:业务模型与服务接口。
  • TelegramConsole.Infrastructure:Telegram、Quartz、SQLite、日志、加密存储、代理和邮件实现。
  • TelegramConsole.Runtime:跨界面复用的多账户长期运行管理器。
  • TelegramConsole.AI:独立 AI 能力库,封装 Microsoft Agent Framework、OpenAI 兼容模型和本机 Codex CLI 登录适配。
  • TelegramConsole.Web:面向 NAS/Docker 的 Web 管理站和 API。
  • TelegramConsoleApp:WPF 桌面界面。

这里我比较满意的一点是:桌面端和 Web 端不直接抢业务主导权,它们都围绕 Runtime 和 Core 组织功能。这样 WPF 可以继续保持桌面体验,NAS 版本也可以用自己的数据目录独立运行,不读取 Windows DPAPI 配置,也不会占用 WPF 当前使用的 Session。

重点界面:不再只靠文字说明

最新提交把界面文档补齐了:仓库中的 docs/SCREENSHOTS.md 按模块列出了完整页签说明,README 则挑出聊天终端、定时签到、AI 助手、账户管理和设备资源这几个最能代表项目形态的界面。

聊天终端:控制台、可视化与分屏

账号工作区目前覆盖 9 个页签:聊天终端、群消息监控、定时签到、间隔分析、@我的消息、异常中心、发件箱、AI 助手和运行日志。效率工具另有消息搜索、服务器定时、自动化规则、草稿与文件夹 4 个页签;全局设置包括代理、SMTP 和 AI;管理中心则负责账户、设备资源、异常和运行日志。

这套图集的意义不只是“好看一点”。它把项目边界讲清楚了:哪些功能属于单个 Telegram 账号,哪些功能是跨账号公共资源,哪些配置应该放在全局设置里。

管理中心:先把多账号跑稳

WPF 端现在有一个唯一管理中心,用来维护多账户、设备资源、全局异常和运行日志。后台自动启动账号时,不会弹出或闪烁工作区窗口;各账号工作区只承载聊天、监控和账号自动化业务。

账户管理:独立账号工作区与统一运行状态

管理中心资源页

资源页会集中展示进程内存、应用数据、磁盘 I/O 和 Telegram 流量。这个页面的价值不在于指标多复杂,而是排查问题时可以快速确认:到底是账号掉线、代理不通、消息流量异常,还是程序资源本身有波动。

运行日志也统一收口到了管理中心:

管理中心运行日志

日志和异常是分开的:业务校验类问题只做界面提示,真正的程序异常才会入库。这样异常中心不会被“输入为空”“权限不足”这类正常提示淹没。

聊天终端:从 TUI 到可视化消息流

桌面端支持私聊、群聊和独立 TUI 风格聊天控制台。聊天终端有“控制台 / 可视化 / 分屏”三种显示模式;可视化模式参考 Unigram 的消息气泡结构,但复用同一条历史与实时消息流,不改变登录、监控、发送和定时任务流程。

可视化消息不是只把文字换成气泡。它支持引用关系、自己/他人/@我的消息样式、撤回缓存标识,以及图片、视频、动图、语音、音频、文件、贴纸、投票、位置、联系人和网页等媒体卡片。可下载媒体会按账号隔离缓存,正文链接可直接打开,引用块可跳转原消息。

右键操作也尽量贴近真实聊天场景:引用、编辑、撤回、转发、复制正文、复制链接和快速表情回应,都复用 WTelegramClient 服务接口,而不是在 UI 层单独造一套行为。

效率工具:搜索、服务器定时、自动化和云草稿

效率工具里目前包括消息搜索与操作、Telegram 服务器定时、自动化规则、草稿和会话文件夹。

效率工具:消息搜索与操作

消息搜索会合并两个来源:

  • Telegram 远端搜索。
  • 本地 SQLite FTS 索引。

同一条消息同时出现在两个来源时只显示一条。本地索引不是全量历史备份,只保存程序运行期间收到或加载过的消息;这个边界很重要,避免以后误以为它能凭空搜到 Telegram 没返回、且本地从未见过的旧消息。

搜索结果支持直接回复、引用回复、转发、编辑、删除和复制频道消息链接。最终是否成功仍然取决于 Telegram 权限、消息类型和服务端限制。

自动化规则可以按关键词、正则、@我的消息、指定会话或发送人触发动作,动作包括记录日志、发送 Telegram 消息和发送邮件。草稿与文件夹则走 Telegram 云端能力:云草稿会同步到同账号其他客户端,自定义/共享文件夹也直接读取 Telegram 当前配置。

定时任务:Quartz 和 Telegram 原生计划消息各司其职

项目里有两类定时能力:

  • 每日/每周签到:由 Quartz 执行,程序需要保持运行和登录。
  • Telegram 服务器定时消息:提交后由 Telegram 服务器计时,即使程序关闭也能按时发送。

定时签到配置

每日/每周签到支持勾选、多选、编辑、立即执行,也可以通过 Telegram 或邮件发送完成通知。为了避免重复发送,项目里还有可靠发件箱:发送状态会记录下来,结果未知的消息只允许人工确认后重试。

间隔聊天分析也属于长期运行任务:它会按配置周期读取来源会话,达到最低消息数后生成聊天简报并发送到指定会话;如果消息量不足,就跨间隔继续累计,而不是丢掉上下文。

NAS / Docker:让控制台长期跑在后台

NAS 版本由 TelegramConsole.WebTelegramConsole.Runtime 组成,默认端口是 5080。部署方式很直接:

Copy-Item .env.example .env
docker compose up -d --build

容器里有独立的数据目录和健康检查:

  • /health/live:进程级健康检查。
  • /health/ready:账号汇总状态。

单个 Telegram 账号断线不会让整个容器反复重启,可以在管理首页单独查看和恢复该账号。

持久数据保存在 Docker 卷 telegramconsole-data,包括账号配置、任务设置、主密钥、Session、日志和 SQLite 数据库。备份时必须保存整个数据卷,只备份 accounts.dat 而没有 master.key 是无法恢复的。

部署到 NAS 时还有一个常见坑:容器中的 127.0.0.1 是容器自己,不是宿主机。如果代理跑在宿主机上,Docker Desktop 可以用 host.docker.internal:7890;Linux NAS 上也尽量走 host-gateway 配置,或者直接填 NAS 的局域网地址。

当前 Web 控制台已经能覆盖多账户添加、启动、停止、移除、登录验证码和二次验证、群消息监控、会话列表、消息发送、最近 300 条消息增量刷新、引用回复、编辑、撤回、表情回应、定时任务、间隔分析、@我的消息、异常中心、发件箱、运行日志和 SMTP 设置。也就是说,它已经不是“只能看状态”的管理页,而是可以承担 NAS 常驻场景里的主要操作入口。

AI 能力:作为控制台的增强层

TelegramConsole.AI 被单独拆出来,主要是不想让模型调用散落在 UI 或 Telegram 业务代码里。它目前支持 OpenAI、DeepSeek、本地 Ollama 等 OpenAI 兼容服务,并统一经过 Microsoft Agent Framework 的 Agent 管道执行。

AI 助手:全局服务配置、按账号启用和自动化规则

现阶段 AI 能力主要用于:

  • 会话摘要。
  • 回复草稿。
  • 间隔聊天分析。
  • 指定群成员自动回复。

这部分我更倾向于把它看作“增强层”,而不是核心依赖。即使没有模型配置,Telegram 登录、消息、定时、日志、NAS 这些基础能力仍然应该稳定可用。

AI 的开关也分层处理:全局设置里配置服务商、模型和调用参数;账号侧再决定是否启用摘要、草稿和自动回复。这样可以避免“配置了模型就所有账号都自动参与”的误操作。

构建与运行

本地构建:

dotnet build .\TelegramConsole.sln

NAS / Docker 运行:

Copy-Item .env.example .env
docker compose up -d --build

默认访问地址:

http://localhost:5080

项目使用 GPL-3.0 协议。从当前版本开始,衍生发布物也需要遵守 GPL-3.0 的开源与分发要求。

最新提交里值得注意的变化

最近几次提交的方向很清晰:

  • docs: add bilingual README and AI architecture:补齐中英文 README,并把 AI 架构作为独立能力说明。
  • refactor: extract AI library with MAF pipeline:把 AI 能力抽成 TelegramConsole.AI,通过 MAF 管道统一调用。
  • feat: add configurable AI group auto replies:把群成员自动回复做成可配置能力,而不是固定逻辑。
  • docs: add sanitized UI gallery:新增完整脱敏界面图集。
  • docs: highlight key screens in readme:在 README 里直接展示重点界面,让第一次打开仓库的人能马上看到产品形态。

也就是说,项目最近的重心不只是继续加功能,而是在把“能跑”整理成“能被理解、能被部署、能被二次开发”的形态。

小结

TelegramConsole 现在的重点,是把 Telegram 的长期运行场景做扎实:多账号、日志、异常、定时、搜索、可靠发送、NAS 后台和 AI 摘要都围绕这个目标展开。

后续如果继续迭代,我会优先关注三件事:

  • Web 控制台继续补齐桌面端的高频操作。
  • 自动化规则增加更清晰的调试和命中记录。
  • AI 摘要和自动回复进一步强调可控性,避免“模型能回”和“应该回”混在一起。

项目还在快速变化中,欢迎看源码、提 issue,或者直接按自己的 Telegram 工作流改出一套更适合自己的控制台。

GitHub 项目地址:https://github.com/wutangyuan/TelegramConsole