forked from carrydela/mygoTgChanBot
3.9 KiB
3.9 KiB
Telegram 频道目录机器人
交互式、数据库驱动的 Telegram 频道内容管理系统。
功能
- 数据库管理分类 - 动态 CRUD,无需硬编码
- 交互式按钮投稿 - Inline Keyboard 选择分类
- 快捷回复投稿 - 回复消息直接添加到目录
- 内容同步发布 - 转发的内容会复制发送到频道(非转发,可编辑)
- 相册/多文件支持 - 自动收集相册消息,一次性发送到频道
- 目录封面图 - 可配置封面图片美化目录展示
- 交互式删除 - 删除条目时可选择是否同步删除频道消息
- 防抖目录更新 - 多次操作合并为一次渲染,避免限流
安装
go mod tidy
go build -o bot ./cmd/bot
配置
编辑 config.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" # 可选,目录封面图片
运行
./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 - Telegram Bot 框架
- bbolt - 嵌入式 KV 数据库
- shortid - 短 ID 生成
License
MIT
