# Telegram 频道目录机器人 ![Cover](assets/mygo.png) 交互式、数据库驱动的 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 cover_image: "./assets/cover.jpg" # 可选,目录封面图片 ``` ## 运行 ```bash ./bot # 或指定配置文件 ./bot -config /path/to/config.yaml ``` ## 命令 ### 投稿管理 | 命令 | 说明 | |------|------| | `/post` | 开始投稿流程 | | `/post <分类> /tt <标题>` | 快捷投稿 (回复消息时使用) | | `/list [分类]` | 查看条目 | | `/del ` | 删除条目(可选是否删除频道消息) | | `/edit <新标题>` | 修改标题 | | `/move <新分类>` | 移动条目到其他分类 | | `/refresh` | 手动刷新频道目录 | ### 分类管理 | 命令 | 说明 | |------|------| | `/cat_add <名称> [排序]` | 创建分类 | | `/cat_del <名称>` | 删除分类 | | `/cat_rename <旧名称> <新名称>` | 重命名分类(自动更新所有条目) | | `/cat_list` | 列出所有分类 | ### 管理员管理 (仅超级管理员) | 命令 | 说明 | |------|------| | `/admin_add <用户ID>` | 添加管理员 | | `/admin_del <用户ID>` | 移除管理员 | | `/admin_list` | 列出所有管理员 | ## 投稿方式 ### 方式一:私聊转发(推荐) ``` 1. 私聊 Bot,直接转发任意消息(支持来自个人、群组、频道等) 2. 点击分类按钮 3. 确认标题 (使用默认 / 自定义输入) 4. 确认添加 ``` 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