Refactor post handling and add command setup for Telegram bot
This commit is contained in:
132
README.md
Normal file
132
README.md
Normal 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
|
||||
Reference in New Issue
Block a user