155 lines
4.0 KiB
Markdown
155 lines
4.0 KiB
Markdown
# 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
|
||
cover_image: "./assets/cover.jpg" # 可选,目录封面图片
|
||
```
|
||
|
||
## 运行
|
||
|
||
```bash
|
||
./bot
|
||
# 或指定配置文件
|
||
./bot -config /path/to/config.yaml
|
||
```
|
||
|
||
## 命令
|
||
|
||
### 投稿管理
|
||
|
||
| 命令 | 说明 |
|
||
|------|------|
|
||
| `/post` | 开始投稿流程 |
|
||
| `/post <分类> /tt <标题>` | 快捷投稿 (回复消息时使用) |
|
||
| `/list [分类]` | 查看条目 |
|
||
| `/del <ID>` | 删除条目(可选是否删除频道消息) |
|
||
| `/edit <ID> <新标题>` | 修改标题 |
|
||
| `/move <ID> <新分类>` | 移动条目到其他分类 |
|
||
| `/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
|