Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
137 changes: 47 additions & 90 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 🤖 Telegram Private Chatbot (v5.3)
# 🤖 Telegram Private Chatbot (v5.4)

[![Deploy to Cloudflare Workers](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/jikssha/telegram_private_chatbot)
![GitHub stars](https://img.shields.io/github/stars/jikssha/telegram_private_chatbot?style=social)
Expand All @@ -13,29 +13,22 @@
---

<details>
<summary>📢 <b>v5.1 版本重要更新公告 (2026-01-05)</b></summary>
<summary>📢 <b>v5.4 版本更新公告 (2026-05-16)</b></summary>

### 主要修复:
- **自动话题修复**:被删除话题用户不再转发到 General,会自动新建话题。
- **话题无限循环修复**:针对创建失败添加重试机制,最多重试 3 次。
- **消息路由规范化**:修复字符串与数字混用问题,统一规范化为 String 类型。
- **并发验证加固**:添加验证锁机制,彻底杜绝并发绕过漏洞。
- **数据读取保护**:实现 `safeGetJSON()` 安全读取机制,防止 KV 数据损坏导致崩溃。
- **验证系统重构**:改用索引方案,完全避免按钮回调截断问题,100% 可用。
### 新增功能:
- **关键词过滤系统**:新增硬编码+KV动态词库,支持文本及媒体描述 (Caption) 拦截。
- **动态管理指令**:新增 `/addword`, `/delword`, `/listwords`,无需重启即可实时维护屏蔽词库。
- **性能优化**:引入内存缓存,保证高并发下的词库查询速度。

### 更新功能:
**批量清理工具**:/cleanup # 扫描并清理已删除话题的用户数据

### ⚠️ 更新指南:
Fork用户可直接点击sync 更新同步,自动更新
手动部署用户复制worker.js代码到worker,重新部署一次
### 历史修复:
- 自动话题修复、消息路由规范化、并发验证加固、多媒体转发优化等。
</details>

---

## 📑 目录 (Table of Contents)

* [✨ 核心特性](#-核心特性)
*[✨ 核心特性](#-核心特性)
* [🛠️ 管理员指令](#-管理员指令)
* [🚀 部署教程](#-部署教程)
* [方法一:GitHub 一键连接 (推荐)](#方法一github-一键连接部署-推荐-)
Expand Down Expand Up @@ -68,14 +61,21 @@ v4.0 版本移除了所有不稳定的外部 API 依赖,专注于**极致的

| 指令 | 作用 | 适用场景 |
| :--- | :--- | :--- |
| `/close` | **强制关闭对话**<br>机器人会提示用户对话已结束,并拒收新消息。 | 工单处理完成,礼貌结束咨询。 |
| `/open` | **重新开启对话**<br>恢复对该用户的消息转发。 | 误操作关闭,或用户需再次联系。 |
| `/ban` | **封禁用户**<br>机器人将完全无视该用户的所有消息(无提示)。 | 遇到恶意刷屏、广告机器人。 |
| `/unban` | **解封用户**<br>恢复该用户的正常通讯权限。 | 给予改过自新的机会。 |
| `/trust` | **永久信任**<br>该用户将永久免除人机验证(永不过期)。 | 熟人、VIP 客户、长期合作伙伴。 |
| `/reset` | **重置验证**<br>强制清除该用户的验证状态,下次需重新验证。 | 测试验证流程,或怀疑账号被盗。 |
| `/info` | **查看信息**<br>显示当前用户的 UID、话题 ID 和链接。 | 查询用户资料。 |
| `/cleanup` | **批量清理**<br>扫描并清理已删除话题的用户数据。 | 清理失效用户。 |
| `/close` | **强制关闭对话** | 工单处理完成,礼貌结束咨询。 |
| `/open` | **重新开启对话** | 恢复对该用户的消息转发。 |
| `/ban` | **封禁用户** | 遇到恶意刷屏、广告机器人。 |
| `/unban` | **解封用户** | 恢复该用户的正常通讯权限。 |
| `/trust` | **永久信任** | 熟人、VIP 客户、长期合作伙伴。 |
| `/reset` | **重置验证** | 测试验证流程,或怀疑账号被盗。 |
| `/info` | **查看信息** | 查询用户资料。 |
| `/cleanup` | **批量清理** | 扫描并清理已删除话题的用户数据。 |
| `/addword <词>` | **添加屏蔽词** | 将词汇加入动态词库,实时拦截。 |
| `/delword <词>` | **删除屏蔽词** | 从动态词库中移除已添加的屏蔽词。 |
| `/listwords` | **查看词库** | 查看当前生效的全部屏蔽词列表。 |

#### 🚫 关键词过滤功能说明
- 本版本新增了关键词智能拦截功能,支持拦截文本及图片/视频描述 (Caption)。
- 通过命令添加的词汇会存入 KV,修改后 60 秒内全局生效。

---

Expand All @@ -87,95 +87,52 @@ v4.0 版本移除了所有不稳定的外部 API 依赖,专注于**极致的
2. **管理员群组**:创建一个 Telegram 群组,并**开启话题功能 (Topics)**。
* 将机器人拉入群组,并设为**管理员**(给予管理话题权限)。
* 获取群组 ID(通常以 `-100` 开头)。
``获取 SUPERGROUP_ID 小技巧:
在 Telegram 桌面端右键群内任意消息,复制消息链接;链接里会有一段 -100xxxxxxxxxx 或 xxxxxxxxxx;若只看到纯数字 xxxxxxxxxx,在前面加上 -100,就是完整的 SUPERGROUP_ID(私密频道/群组同理)。``

### 方法一:GitHub 一键连接部署 (推荐 ★)

这是最简单的自动化部署方式,当您更新 GitHub 仓库时,Cloudflare 会自动重新部署您的 Worker。

1. **Fork 本仓库** 到您的 GitHub 账户。
2. 登录 [Cloudflare Dashboard](https://dash.cloudflare.com/)。
3. 导航到 **Workers & Pages** -> **Create Application**。
4. 点击 **Connect to Git** 标签页。
5. 授权 Cloudflare 访问您的 GitHub,并选择您刚才 Fork 的 `telegram_private_chatbot` 仓库。
6. **配置部署设置**:
* 项目名称:`telegram-private-chatbot` (或任意名称)。
* 生产分支:通常是 `main` 或 `master`。
* 其余保持默认,点击 **Save and Deploy**。
7. **⚠️ 关键步骤:绑定数据库与变量**
* 部署完成后,进入该 Worker 的 **Settings** -> **Variables** 页面。
* **绑定 KV 数据库** (必须):
* 在 Cloudflare 左侧菜单 **KV** 中创建一个新的 Namespace(例如叫 `TOPIC_MAP`)。
* 回到 Worker 的 Variables 页面,向下滚动到 **KV Namespace Bindings**。
* 点击 **Add binding**,变量名填写 `TOPIC_MAP` (必须全大写),Namespace 选择刚才创建的那个。
* **添加环境变量**:
* `BOT_TOKEN`: 你的机器人 Token。
* `SUPERGROUP_ID`: 你的群组 ID (例如 -100123...)。
8. **最后一步**:配置完成后,点击页面顶部的 **Deployments** 标签,找到最新的部署记录,点击右侧的 **Retry deployment** (重新部署),让变量生效。

### 方法二:手动复制部署 (简单直接)

如果您不想关联 GitHub,可以直接复制代码。

1. 登录 [Cloudflare Dashboard](https://dash.cloudflare.com/)。
2. 进入 **Workers & Pages** -> **Create Application** -> **Create Worker** ,选择从`hello world`开始。
3. 命名你的 Worker,点击 **Deploy**。
4. 点击 **Edit code**,将本项目 `worker.js` 的所有代码复制粘贴进去,覆盖原代码。
5. 点击右上角 **Deploy** 保存。
6. **配置 KV 与变量**:
* 去 **Settings** -> **Variables**。
* 添加 KV 绑定:Variable name 填 `TOPIC_MAP`,并绑定一个 KV 数据库。
* 添加环境变量:`BOT_TOKEN` 和 `SUPERGROUP_ID`。
* 点击 **Save and Deploy**。
4. 点击 **Connect to Git** 标签页,选择刚才 Fork 的 `telegram_private_chatbot` 仓库。
5. **配置部署设置**:点击 **Save and Deploy**。
6. **⚠️ 关键步骤:绑定数据库与变量**
* 进入 Worker 的 **Settings** -> **Variables**。
* **绑定 KV 数据库**:添加 binding,名称填写 `TOPIC_MAP`,Namespace 选择你的 KV 数据库。
* **添加环境变量**:`BOT_TOKEN` 和 `SUPERGROUP_ID`。
7. **最后一步**:在 **Deployments** 页面点击 **Retry deployment**。

---
### 方法二:手动复制部署

### 最后一步:激活 Webhook (至关重要)
1. 在 Cloudflare 创建一个 Worker。
2. 点击 **Edit code**,将 `worker.js` 代码全部粘贴进去。
3. 点击 **Deploy**。
4. 在 **Settings** -> **Variables** 中添加 `TOPIC_MAP` 绑定以及 `BOT_TOKEN`、`SUPERGROUP_ID` 变量。

无论使用哪种部署方式,最后都需要手动告诉 Telegram 你的 Worker 地址。请在浏览器中**严格按顺序**访问以下 URL:
---

**设置新 Webhook**:
```
(https://api.telegram.org/bot)<YOUR_TOKEN>/setWebhook?url=<YOUR_WORKER_URL>
```
*将 `<YOUR_TOKEN>` 替换为机器人 Token,`<YOUR_WORKER_URL>` 替换为 Worker 的完整域名或者你绑定的自定义的域名 (如 `https://xxx.workers.dev`)。*

*举例:https://api.telegram.org/bot1234:HUSH2GW/setWebhook?url=https://1234.workers.dev* `<YOUR_TOKEN>前面的bot别删了`
### 最后一步:激活 Webhook (至关重要)

如果返回 `{"ok":true, "result":true, "description":"Webhook was set"}`,即表示部署成功!
在浏览器中访问以下 URL(请替换 `<YOUR_TOKEN>` 和 `<YOUR_WORKER_URL>`):
`https://api.telegram.org/bot<YOUR_TOKEN>/setWebhook?url=<YOUR_WORKER_URL>`

---

## ❓ 常见问题 (FAQ)

**Q1: 为什么点击验证按钮没有反应?**
A: 请检查 Webhook 是否正确设置。必须确保 Telegram 允许发送 `callback_query` 事件。请务必执行上述“最后一步”中的重置操作。

**Q2: 为什么机器人无法在群里创建话题?**
A: 请确保:1. 群组 ID 正确(-100开头);2. 群组已开启 Topics 功能;3. 机器人是群管理员且拥有 "Manage Topics" 权限。

**Q3: 为什么人机验证能通过收不到转发的消息?**
A: 请仔细检查所有变量名称和id是否准确,删除webhook再重新激活。
`(https://api.telegram.org/bot)<YOUR_TOKEN>/deleteWebhook?drop_pending_updates=true`

如果依然无法正常转发消息,尝试完成所有步骤后,最后再添加bot的管理员权限。

**Q4: 为什么webhook设置失败?**
A: 如果你设置了自定义域名不成功,Webhook 改回 workers.dev 域名再尝试。这种情况是你域名解析失败或者网络环境阻断造成的

---
A: 请确保 Webhook 设置正确,Telegram 必须能向你的 Worker 发送回调请求。

## 🔒 安全说明
**Q2: 为什么关键词过滤没有拦截成功?**
A: 请确保在管理员群组的话题内执行指令。系统有 60 秒的内存缓存,添加指令后稍等片刻即可。

> [!IMPORTANT]
> 请妥善保管您的 Bot API Token ,不要泄露,这些信息关系到您服务的安全性
**Q3: 为什么机器人无法在群里创建话题?**
A: 确保机器人拥有群组的 "Manage Topics" 权限,且群组已开启话题功能

---

## 📈 Star History

[![Star History Chart](https://api.star-history.com/svg?repos=jikssha/telegram_private_chatbot&type=date&legend=top-left)](https://www.star-history.com/#jikssha/telegram_private_chatbot&type=date&legend=top-left)
[![Star History Chart](https://api.star-history.com/svg?repos=jikssha/telegram_private_chatbot&type=date&legend=top-left)](https://star-history.com/#jikssha/telegram_private_chatbot&type=date&legend=top-left)

---
**如果这个项目对你有帮助,请给个 Star ⭐️ 吧!**
**如果这个项目对你有帮助,请给个 Star ⭐️ 吧!**
Loading