# 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 <ID>` | 删除条目（可选是否删除频道消息） |
| `/edit <ID> <新标题>` | 修改标题 |
| `/move <ID> <新分类>` | 移动条目到其他分类 |
| `/refresh` | 手动刷新频道目录 |

### 分类管理

| 命令 | 说明 |
|------|------|
| `/cat_add <名称> [排序]` | 创建分类 |
| `/cat_del <名称>` | 删除分类 |
| `/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
