Sign inSign up

kejizhihui/openbot-bot

By kejizhihui

•Updated about 14 hours ago

Image
0

408

kejizhihui/openbot-bot repository overview

直接给你粘贴这份 openbot-bot 最终版(镜像名已全部改为 kejizhihui/openbot-bot:latest):


⁠OpenBot - Telegram 插件化下载机器人

⁠版本:v2.7
Python:3.11-slim-bookworm
架构:Core系统层 + Features插件层,完全插件化设计

⁠✨ 核心功能

⁠📥 下载管理
  • 群文件批量扫描下载,支持断点续传
  • 大文件分块并行下载(默认4块并发)
  • 支持图片、视频、音频、文档等所有媒体类型
  • 自动跳过重复文件(按document_id去重)
  • 网络断网自动等待恢复,恢复后自动续传
  • Web面板可视化管理下载任务
  • 批量任务调度,支持上万文件队列
⁠📢 自动推广转发
  • A群消息自动转发到B群
  • 支持转发时自动携带消息里的#标签
  • 支持转发时自动附带所有文件名列表
  • 来源群禁止转发时,自动改为下载再上传
  • Web面板可视化管理转发任务
  • 显示运行中/已停止/故障状态,统计已转发数量
⁠👥 群管理
  • 发言权限自动管理
  • 关键词过滤
  • 防刷屏检测
  • 成员自动管理
  • 群命令白名单(群里仅响应白名单命令)
⁠🤖 AI对话
  • 支持所有OpenAI兼容接口(豆包、腾讯混元、OpenAI等)
  • 临时插件模式,一键添加新AI模型
  • 支持对话修改插件代码
  • 豆包AI命令:/ai
  • 腾讯混元AI命令:/hunyuan
⁠🌐 Web管理面板
  • 群文件批量扫描统计
  • 下载任务可视化管理
  • 推广转发规则配置
  • 群管理配置
  • 管理员权限面板

⁠🏗️ 系统架构

┌─────────────────────────────────────────┐
│           bootstrap/ 启动引导层         │
│  launcher.py / web_server.py / cli.py  │
└─────────────────┬───────────────────────┘
                  │
┌─────────────────▼───────────────────────┐
│             core/ 核心系统层            │
│  client_manager / mtproto_client /     │
│  command_registry / plugin_scanner /   │
│  download_engine / media_scanner /    │
│  web_bridge / context.py               │
└─────────────────┬───────────────────────┘
                  │
┌─────────────────▼───────────────────────┐
│          features/ 插件功能层           │
│  downloader / gfiles / promote /       │
│  group_mgr / task_mgr / help_center /  │
│  devverify / tmp_plugins/              │
└─────────────────────────────────────────┘
⁠设计原则
  1. Core不依赖Features:系统层只提供基础能力,不知道业务插件存在
  2. 插件只依赖Core:所有业务插件通过Core提供的接口注册命令、挂载handler
  3. On-demand模式:所有请求都是写入即触发,无轮询桥接
  4. 数据统一收拢:所有数据库、下载文件统一存放在data/和download/

⁠📦 完整环境变量配置

⁠系统基础
# 是否启动Web服务 + 隧道(true=启动,false=纯命令行)
WEB_ENABLED=true
# 日志级别
LOG_LEVEL=INFO
# 时区
TZ=Asia/Shanghai
⁠Telegram 配置
# BotFather创建的Bot Token
BOT_TOKEN=123456:ABC-DEF...
# my.telegram.org申请的API_ID和API_HASH
API_ID=123456
API_HASH=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
⁠代理配置
# 方式一:外部代理(推荐,简单)
PROXY=[http://127.0.0.1:7890](http://127.0.0.1:7890)
# 方式二:内置mihomo代理(不需要外部Clash)
# SUB_URL=https://你的订阅地址
# MIHOMO_ENABLED=1
⁠管理员配置
# 超级管理员(可多个,逗号分隔)
ADMIN_ID=111111111,222222222
# 普通管理员
ADMIN_LIST=333333333
⁠下载性能调优
# 全局下载并发数(同时最多下载几个文件)
DL_MAX_CONCURRENT=6
# 批量调度文件数(海量文件时分批)
DL_BATCH_SIZE=50
# 失败自动重试次数
DL_RETRY_COUNT=1
# 下载进度落库间隔(秒)
DL_PROGRESS_INTERVAL=3
# 断网恢复检测间隔(秒)
DL_NETWORK_POLL=3
# 网络等待超时(秒):断网时任务最多等待多少秒后转"待下载"
DL_NETWORK_MAX_WAIT=600
# 单文件网络错误重试上限
DL_FILE_NET_RETRY=8
# 单文件下载超时(秒)
DL_FILE_TIMEOUT=1800
# 单次MTProto读请求超时(秒)
DL_API_TIMEOUT=30
# 大文件分块并行下载阈值(MB)
DL_CHUNK_MIN_SIZE_MB=20
# 分块数(越大越快,注意Telegram限流)
DL_CHUNK_PARTS=4
# 同时允许几个大文件分块
DL_CHUNK_PARALLEL=1
⁠扫描限速(防FloodWait)
# 每扫N条消息停顿X秒
DL_SCAN_RATE_EVERY=20
DL_SCAN_RATE_SLEEP=0.3
# 每扫N条加重停顿
DL_SCAN_HEAVY_EVERY=100
DL_SCAN_HEAVY_SLEEP=2.0
# 扫描停止阈值:连续N条已下载即停止
DL_SCAN_STOP_AFTER=50
# 单次/dl指定ID模式的数量上限
DL_MAX_IDS=5000
⁠转发配置
# 批次窗口(秒):连续转发的消息在这个窗口内归为同一任务
DL_FORWARD_BATCH_SEC=3.0
# 延迟启动下载(秒)
DL_FORWARD_START_DELAY=4.0
⁠AI配置(OpenAI兼容接口)
AI_BASE_URL=[https://ark.cn-beijing.volces.com/api/v3](https://ark.cn-beijing.volces.com/api/v3)
AI_API_KEY=ark-xxxxxxxx
AI_MODEL=doubao-seed-2-1-turbo-260628

⁠🚀 完整部署命令

⁠Docker Run 启动
docker run -d \
  --name openbot \
  --restart unless-stopped \
  --memory="2g" \
  --cpus="2" \
  -p 7777:7777 \
  -v /your/path/.env:/app/.env \
  -v /your/path/sessions:/app/sessions \
  -v /your/path/download:/app/download \
  -v /your/path/logs:/app/logs \
  -v /your/path/data:/app/data \
  -v /your/path/tmp_plugins:/app/tmp_plugins \
  -e TZ=Asia/Shanghai \
  kejizhihui/openbot-bot:latest
⁠Docker Compose 启动

创建 docker-compose.yml:

services:
  openbot:
    image: kejizhihui/openbot-bot:latest
    container_name: openbot
    restart: unless-stopped
    ports:
      - "7777:7777"
    volumes:
      - ./.env:/app/.env
      - ./sessions:/app/sessions
      - ./download:/app/download
      - ./logs:/app/logs
      - ./data:/app/data
      - ./tmp_plugins:/app/tmp_plugins
    environment:
      - TZ=Asia/Shanghai
    deploy:
      resources:
        limits:
          memory: 2G
          cpus: "2"

然后启动:

docker-compose up -d

⁠🌐 Web面板详解

启动成功后访问:http://你的服务器IP:7777

⁠1. 首页 /
  • 系统状态总览
  • Bot连接状态
  • MTProto登录状态
  • Web服务状态
⁠2. 群文件扫描 /qwjcxsm
  • 批量扫描群内所有文件
  • 单个群手动统计
  • 一键更新所有群统计
  • 支持按文件类型筛选
  • 文件大小、类型、数量统计
⁠3. 下载任务 /xzrw
  • 输入Telegram链接直接下载
  • 任务状态实时显示(排队中/下载中/已完成/失败)
  • 支持停止、继续、删除任务
  • 已下载大小/总大小进度条
  • 聚合下载(同相册一起下载)
  • 跳过重复文件ID
⁠4. 推广转发 /tgzf
  • 配置A群→B群转发规则
  • 显示运行中/已停止/故障状态
  • 已转发数量统计
  • 可选:附带消息标签
  • 可选:附带文件列表
  • 无权限自动下载再上传
⁠5. 群管理 /qungl
  • 群命令白名单配置
  • 哪些群允许使用哪些命令
  • 发言权限自动管理
  • 关键词过滤配置
⁠6. 管理员面板 /admin
  • 超管列表管理
  • 命令权限矩阵
  • Web访问密码设置
  • 系统状态查看

⁠📝 完整命令列表

⁠基础命令
命令说明权限
/start开始使用,显示欢迎信息所有人
/help显示帮助菜单所有人
/ping测试Bot是否在线所有人
/id查看当前聊天ID所有人
/status查看系统状态(CPU/内存/运行时间)超管
/disk查看磁盘使用情况超管
/python显示Python版本超管
⁠下载相关命令
命令说明权限
/dl 链接下载Telegram链接里的文件超管
/dl_photo 链接强制按图片下载超管
/dl_video 链接强制按视频下载超管
/dls查看下载任务列表超管
/dl_stop 任务ID停止指定下载任务超管
/dl_continue 任务ID继续已停止的任务超管
/dl_no 任务ID删除任务(保留已下载文件)超管
/dl_clear清空所有已完成任务超管
/at转发消息自动下载开关超管
⁠群文件相关
命令说明权限
/look查看当前群文件列表群成员
/sc收藏转发相关超管
⁠推广转发
命令说明权限
/promote推广转发管理超管
⁠群管理命令
命令说明权限
/ban 用户ID封禁用户群管
/unban 用户ID解封用户群管
/delall删除用户所有消息群管
/gm群管理设置群管
/groupinfo查看群信息群成员
⁠管理员命令
命令说明权限
/add_admin 用户ID添加超级管理员超管
/remove_admin 用户ID删除超级管理员超管
/admins查看所有管理员超管
/czbot重启Bot超管
⁠插件管理命令
命令说明权限
/plugins查看所有已加载插件超管
/reload_plugins重新加载所有插件超管
/add_plugin添加临时插件超管
⁠AI对话命令
命令说明权限
/ai 你的问题豆包AI对话超管
/hunyuan 你的问题腾讯混元AI对话超管
⁠其他
命令说明权限
/mtloginMTProto登录管理器超管
/cj开发手册超管

⁠📂 目录说明

目录说明
sessions/MTProto登录session文件(挂载后不用重新登录)
download/下载的文件保存目录
logs/日志文件
data/数据库文件
tmp_plugins/临时插件目录(放AI插件等)

⁠🔌 插件开发指南

⁠插件结构
features/my_plugin/
├── __init__.py
├── plugin.py          # 主逻辑
├── help.txt          # 帮助说明(自动加载到命令菜单)
└── static/           # Web页面(可选)
    └── my_plugin.html
⁠最小插件示例
from telegram import Update
from telegram.ext import CommandHandler, ContextTypes
async def hello(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text("你好!我是自定义插件!")
def register(app):
    app.add_handler(CommandHandler("hello", hello))
⁠临时插件(tmp_plugins/)
  • 放在tmp_plugins/目录下,自动加载
  • 支持热重载,不用重启Bot
  • 一个目录一个插件
  • 开发完成后直接移到features/目录就是正式插件
⁠可用Core接口
# 获取MTProto客户端
from core.context import get_mtproto_client
# 获取Bot应用
from core.context import get_application
# 注册Web路由
from core.web_server import add_route
# 写入下载任务队列
from core.web_bridge import add_download_task

⁠🔧 常用操作命令

# 查看实时日志
docker logs -f openbot
# 重启机器人
docker restart openbot
# 停止机器人
docker stop openbot
# 停止并删除容器
docker stop openbot && docker rm openbot
# 更新到最新版
docker pull kejizhihui/openbot-bot:latest
docker stop openbot && docker rm openbot
# 然后重新运行docker run命令启动

⁠🚨 故障排查FAQ

⁠1. Bot连不上Telegram
  • 检查.env里的PROXY是否配置正确
  • 测试代理是否能访问Telegram:curl [https://api.telegram.org](https://api.telegram.org)
  • 中国大陆必须配置代理,不能直连
⁠2. MTProto登录失败
  • 第一次启动需要在Bot私聊发/mtlogin
  • 输入手机号(带国家码,如+86138xxxxxxxx)
  • 输入Telegram收到的验证码
  • 两步验证需要输入密码
  • 登录成功后sessions目录会生成session文件,挂载后不用重复登录
⁠3. Web面板打不开
  • 检查7777端口是否被占用
  • 检查防火墙是否开放7777端口
  • 查看日志:docker logs openbot | grep uvicorn
⁠4. 下载速度慢
  • 调大DL_MAX_CONCURRENT(默认6,最大10)
  • 调大DL_CHUNK_PARTS(分块数,默认4)
  • 检查代理带宽
  • Telegram有限流,不要调太大,否则会被FloodWait
⁠5. 群列表加载不出来
  • 检查MTProto是否登录成功
  • 查看日志:docker logs openbot | grep MTProto
  • 第一次加载需要拉取所有群,群多的话等1-2分钟

⁠📊 性能参考

配置适合场景
512M内存 + 1核小群(<100群),每天下载<100个文件
1G内存 + 1核中等规模(100-300群),日常使用
2G内存 + 2核大规模(300+群),批量下载大文件

Tag summary

Content type

Image

Digest

sha256:160b65846…

Size

288.3 MB

Last updated

about 14 hours ago

docker pull kejizhihui/openbot-bot:6.0