Refactor post handling and add command setup for Telegram bot

This commit is contained in:
dela
2026-02-05 00:52:29 +08:00
parent d82badc6e3
commit 8a6859269c
9 changed files with 612 additions and 21 deletions

132
README.md Normal file
View File

@@ -0,0 +1,132 @@
# 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 <ID>` | 删除条目 |
| `/edit <ID> <新标题>` | 修改标题 |
| `/move <ID> <新分类>` | 移动条目到其他分类 |
| `/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