# Telegram 频道目录机器人 交互式、数据库驱动的 Telegram 频道内容管理系统。 ## 功能 - **数据库管理分类** - 动态 CRUD,无需硬编码 - **交互式按钮投稿** - Inline Keyboard 选择分类 - **快捷回复投稿** - 回复消息直接添加到目录 - **内容同步发布** - 转发的内容会复制发送到频道(非转发,可编辑) - **防抖目录更新** - 多次操作合并为一次渲染,避免限流 ## 安装 ```bash go mod tidy go build -o bot ./cmd/bot ``` ## 配置 编辑 `config.yaml`: ```yaml bot: token: "YOUR_BOT_TOKEN" admins: - 123456789 # 管理员 Telegram User ID channel: id: -1001234567890 # 目标频道 ID database: path: "./data/bot.db" toc: debounce_seconds: 3 ``` ## 运行 ```bash ./bot # 或指定配置文件 ./bot -config /path/to/config.yaml ``` ## 命令 | 命令 | 说明 | |------|------| | `/post` | 开始投稿流程 | | `/post <分类> /tt <标题>` | 快捷投稿 (回复消息时使用) | | `/list [分类]` | 查看条目 | | `/del ` | 删除条目 | | `/edit <新标题>` | 修改标题 | | `/move <新分类>` | 移动条目到其他分类 | | `/cat_add <名称> [排序]` | 创建分类 | | `/cat_del <名称>` | 删除分类 | | `/cat_list` | 列出所有分类 | | `/refresh` | 手动刷新频道目录 | ## 投稿方式 ### 方式一:交互式流程(私聊 Bot) ``` 1. 私聊 Bot 发送 /post 2. 转发任意消息给 Bot(支持来自任意来源:个人、群组、频道等) 3. 点击分类按钮 4. 确认标题 (使用默认 / 自定义输入) 5. 确认添加 ``` Bot 会将消息内容复制发送到频道,目录链接指向频道中的新消息。 ### 方式二:快捷回复(群组内) ``` 1. 在关联群组找到目标消息 2. 回复该消息,发送: /post iOS /tt 某个APP推荐 ``` - `/tt` 后的内容为自定义标题 - 省略标题则自动提取消息首行 ## 支持的消息类型 - ✅ 纯文本 - ✅ 图片(带说明文字) - ✅ 视频(带说明文字) - ✅ 文档(带说明文字) - ✅ 音频(带说明文字) - ✅ 动图(带说明文字) - ✅ 语音 - ✅ 贴纸 ## 目录结构 ``` ├── cmd/bot/main.go # 程序入口 ├── config.yaml # 配置文件 ├── internal/ │ ├── config/config.go # 配置加载 │ ├── storage/ │ │ ├── storage.go # BoltDB 初始化 │ │ ├── category.go # 分类 CRUD │ │ └── entry.go # 条目 CRUD │ ├── telegram/ │ │ ├── bot.go # Bot 初始化与路由 │ │ ├── middleware.go # 权限中间件 │ │ ├── state.go # 用户状态管理 │ │ ├── handlers_cat.go # 分类命令 │ │ ├── handlers_post.go # 投稿流程 │ │ └── handlers_entry.go # 条目命令 │ └── toc/ │ ├── manager.go # 目录管理器 (防抖) │ └── renderer.go # 目录渲染 ``` ## 技术栈 - Go 1.23+ - [telebot.v3](https://gopkg.in/telebot.v3) - Telegram Bot 框架 - [bbolt](https://go.etcd.io/bbolt) - 嵌入式 KV 数据库 - [shortid](https://github.com/teris-io/shortid) - 短 ID 生成 ## License MIT