Skip to content

mqiancheng/telegram-forward

Repository files navigation

Telegram 消息转发管理工具 🚀

License Version Platform

这是一个用于管理 Telegram 消息转发的 Bash 脚本,支持多账号私聊消息实时转发到指定群组。通过交互式菜单,你可以轻松安装依赖、配置脚本、启动/停止脚本、查看日志等。

✨ 功能特性

  • 多系统支持:兼容 Alpine、Ubuntu/Debian、CentOS/RHEL/Fedora 等多种 Linux 发行版。
  • 依赖安装:自动安装 Python 和 Telethon,自动检测系统类型。
  • 脚本配置:生成 Telegram 消息转发脚本,支持多账号。
  • 进程管理:内置监控进程,支持自动重启。
  • 日志管理:通过 logrotate 自动轮转日志,节省空间。
  • 配置备份:支持配置和会话文件的备份与恢复。
  • 快捷命令:安装后可使用 tg 命令快速启动脚本。
  • 智能引导:自动检测配置状态,引导用户完成必要步骤。
  • 账户监控:自动检测小号状态,提示需要重新授权的账户。
  • 交互式菜单:一键操作,简单易用。

📋 前提条件

确保你的服务器满足以下条件:

  • 操作系统:支持 Alpine、Ubuntu/Debian、CentOS/RHEL/Fedora 等主流 Linux 发行版。
  • 工具:已安装 curlbash
  • 网络:可以访问 Telegram API 和 GitHub。
  • 权限:需要有安装软件包的权限(通常需要 sudo 或 root)。

🚀 快速开始

1. 下载并运行脚本

curl -fsSL https://raw.githubusercontent.com/mqiancheng/telegram-forward/main/telegram_forward.sh -o telegram_forward.sh && chmod +x telegram_forward.sh && ./telegram_forward.sh

2. 使用交互式菜单

运行脚本后,你会看到以下菜单:

=== Telegram 消息转发管理工具 ===
版本: 1.7.4
--- 当前状态 ---
脚本未运行
虚拟环境已创建
脚本已配置(forward.py 存在)
小号状态:正常(2 个小号)
----------------
1. 安装依赖
2. 配置管理
3. 小号状态
4. 启动脚本
5. 停止脚本
6. 重启脚本
7. 查看日志(按q可退出查看日志)
8. 卸载脚本
0. 退出
请选择一个选项:

菜单选项说明

选项 功能描述
1. 安装依赖 安装 Python、Telethon 和日志管理工具,并创建 tg 快捷命令。
2. 配置管理 进入配置管理子菜单,可以新建、修改、备份和恢复配置。
3. 小号状态 进入小号状态管理菜单,查看所有小号状态并重新授权失效的小号。
4. 启动脚本 启动消息转发,首次运行需登录小号。如果配置文件不存在,会自动进入配置管理菜单。
5. 停止脚本 停止消息转发脚本。
6. 重启脚本 重启消息转发脚本。如果配置文件不存在,会自动进入配置管理菜单。
7. 查看日志 实时查看转发日志。
8. 卸载脚本 卸载脚本及相关文件,但保留备份文件。
0. 退出 退出程序。

配置管理子菜单

选择主菜单中的"2. 配置管理"后,会进入以下子菜单:

=== 配置管理菜单 ===
1. 新建配置
2. 修改配置
3. 备份配置
4. 恢复配置
5. 管理备份
0. 返回主菜单
请选择一个选项:
选项 功能描述
1. 新建配置 输入群组 Chat ID 和小号 API,生成转发脚本。
2. 修改配置 使用文本编辑器查看和编辑 forward.py 文件。
3. 备份配置 备份脚本配置和会话文件。
4. 恢复配置 从备份文件恢复配置到项目目录。
5. 管理备份 管理备份文件,可选择性删除备份。
0. 返回主菜单 返回到主菜单。

小号状态子菜单

选择主菜单中的"3. 小号状态"后,会进入以下子菜单:

=== 小号状态菜单 ===
1. 查看小号状态
2. 重新授权小号
3. 添加新小号
4. 删除小号
0. 返回主菜单
请选择一个选项:

在这个菜单中,您可以:

  1. 查看小号状态:显示所有小号的状态(正常或异常)
  2. 重新授权小号:选择需要重新授权的小号,按照提示完成重新授权过程
  3. 添加新小号:添加新的小号,输入API ID和API Hash,自动创建会话文件
  4. 删除小号:删除不需要的小号,同时删除配置信息和会话文件

每次修改小号配置后,系统会询问是否立即重启转发脚本以应用更改。

🔑 获取 API 和 Chat ID

获取 api_idapi_hash

  1. 访问 my.telegram.org,用小号登录。
  2. 点击 API development tools,创建应用:
    • App titleMyForwardApp
    • Short nameforward
    • PlatformOther
    • Description:留空
  3. 提交后,记录 api_id(例如 25018336)和 api_hash(例如 f3dba3011e3b2f9a59e0bbeff20d5db9)。

获取群组 Chat ID

  1. 用大号创建私有群组,邀请小号加入。
  2. 在 Telegram 中搜索 @username_to_id_bot,发送 /start
  3. 发送群组邀请链接(例如 t.me/+xxxxx)。
  4. 记录返回的 Chat ID(例如 -4688142035)。

⚙️ 脚本工作原理

  1. 监听消息:脚本登录小号,监听私聊消息。
  2. 消息转发:将消息实时转发到指定群组。
  3. 自动重启:内置监控进程每30秒检查一次主脚本状态,确保脚本持续运行。
  4. 配置持久化:用户设置会保存到配置文件,重启后自动加载。
  5. 多系统适配:自动检测系统类型,使用对应的包管理器和配置路径。
  6. 智能引导:自动检测配置状态,引导用户完成必要步骤。

📜 日志管理

  • 日志文件:位于用户主目录下的 forward.log
  • 自动轮转:每天轮转,保留最近 7 天日志,旧日志会被压缩。
  • 查看方式:通过菜单选项 7 可以方便地查看日志。

💾 备份与恢复

脚本提供了配置备份和恢复功能,可以备份以下内容:

  • forward.py 脚本文件
  • Telegram 会话文件(session_account*.session)
  • 用户配置文件

备份文件保存在 /home/backup-TGfw 目录中,格式为 forward_backup_YYYYMMDD_HHMMSS.tar.gz

⚠️ 注意事项

  • 首次运行:需输入小号的手机号和验证码登录。
  • 安全性:保护好会话文件(session_*.session),避免泄露。
  • 权限:确保小号有权限向目标群组发送消息。
  • 日志隐私:脚本不记录消息内容,仅记录转发事件。
  • 系统兼容性:脚本会自动检测系统类型,但在某些特殊环境可能需要手动调整。
  • 账户授权:如果在 Telegram 端删除了设备授权,小号会显示为异常状态,需要通过"小号状态"菜单重新授权。
  • 状态检查:脚本会在启动时自动检查小号状态,并在状态栏显示结果。

🛠️ 故障排除

  • 转发失败

    1. 使用菜单选项 7 查看日志。
    2. 使用菜单选项 3 检查小号状态,确认是否需要重新授权。
    3. 确认小号是否在群组中,且有发送消息权限。
    4. 确保 allowed_senders 配置正确(留空则转发所有私聊消息)。
  • 脚本未运行

    1. 使用菜单选项 3 检查小号状态。
    2. 使用菜单选项 6 重启脚本。
    3. 检查日志查找错误信息。
  • 小号授权失效

    1. 使用菜单选项 3 进入小号状态菜单。
    2. 查看标红的小号,这些小号需要重新授权。
    3. 输入需要重新授权的小号序号,按照提示完成重新授权。
  • 依赖安装失败

    1. 确保系统有足够的权限安装软件包。
    2. 检查网络连接是否正常。
    3. 对于不支持的系统,可能需要手动安装依赖。
  • 配置恢复失败

    1. 确保备份文件完整且未损坏。
    2. 尝试手动解压备份文件并复制到正确位置。

📦 上传到 GitHub

  1. 创建 GitHub 仓库(例如 telegram-forward)。
  2. 提交文件:
    git init
    git add telegram_forward.sh README.md LICENSE
    git commit -m "Initial commit"
    git remote add origin https://github.com/mqiancheng/telegram-forward.git
    git push -u origin main

🔄 更新日志

版本 1.7.4

  • 修复共享库中的重启脚本功能
  • 改进 start_script 函数,添加自动创建启动脚本的功能
  • 增强 restart_script 函数,添加更多的错误处理和日志输出
  • 解决重启脚本时卡在"正在启动服务..."界面的问题
  • 提高脚本启动和重启的可靠性

版本 1.7.3

  • 修复共享库 utils.py 的下载和使用问题
  • 添加 download_utils 函数,确保在使用 Python 模块前下载共享库
  • 修改所有调用 Python 模块的函数,先下载共享库
  • 解决 "No module named 'utils'" 错误
  • 提高脚本的稳定性和可靠性

版本 1.7.2

  • 创建共享库 utils.py,包含所有通用功能
  • 修改 account_manager.pyconfig_manager.py 以使用共享库
  • 减少代码重复,提高代码的可维护性
  • 统一脚本状态检查和控制功能
  • 优化代码结构,减少冗余代码

版本 1.7.1

  • 优化重启脚本功能,添加脚本运行状态检查
  • 在重启脚本前检查脚本是否正在运行,避免不必要的重启
  • 在停止脚本前检查脚本是否正在运行,避免不必要的停止
  • 统一使用 restart_script 函数进行脚本重启操作
  • 修复代码中的冗余和无效代码

版本 1.7.0

  • 在小号管理菜单中添加"添加小号"和"删除小号"功能
  • 添加小号时自动创建会话文件并进行验证
  • 删除小号时同时删除配置信息和会话文件
  • 在修改配置和修改小号后,添加重启脚本的确认功能
  • 优化小号管理菜单结构,分离查看状态和重新授权功能
  • 改进用户体验,提供更清晰的操作引导

版本 1.6.0

  • 完全剥离配置管理功能到独立的 Python 模块
  • 移除主脚本中的备份和恢复功能,改为调用配置管理模块
  • 移除主脚本中的配置脚本功能,改为调用配置管理模块
  • 优化代码结构,减少冗余代码
  • 减少主脚本代码量,提高可维护性
  • 修复配置管理模块中的事件循环问题

版本 1.5.5

  • 移除无用的 supervisor 相关代码和参数
  • 添加配置管理模块,将配置相关功能分离到单独的 Python 脚本
  • 改进备份功能,只备份核心文件(API 凭证和会话文件)
  • 添加备份文件管理功能,支持选择性删除备份
  • 将备份目录改为 /home/backup-TGfw,更易于访问
  • 优化代码结构,减少冗余

版本 1.5.0

  • 添加小号状态检测和管理功能
  • 在主菜单中显示小号状态信息
  • 添加小号状态管理菜单,支持查看所有小号状态
  • 添加重新授权功能,支持选择性地重新授权失效的小号
  • 优化用户体验,提供清晰的状态指示和操作引导
  • 更新文档,反映新的功能和菜单结构

版本 1.4.1

  • 优化恢复配置功能,减少不必要的提示信息
  • 改进恢复配置时的脚本停止逻辑,只在脚本运行时显示停止提示
  • 修复在恢复配置时可能出现的混淆提示

版本 1.4.0

  • 移除 supervisord 依赖,使用内置监控进程实现自动重启功能
  • 添加 tg 快捷命令,可在任何位置快速启动脚本
  • 优化用户体验,移除不必要的 Enter 确认步骤
  • 增强智能引导,在配置文件不存在时自动进入配置管理菜单
  • 简化菜单结构,移除冗余选项
  • 更新文档,反映新的功能和变化

版本 1.3.0

  • 优化菜单结构,合并配置相关功能到统一的配置管理菜单
  • 改进恢复配置功能,确保从备份目录复制到项目目录
  • 在启动脚本时添加配置文件检查,提示用户先配置
  • 改进卸载功能,保留备份文件但删除其他所有项目相关文件
  • 确保卸载时退出虚拟环境
  • 更新文档,反映新的菜单结构和功能

版本 1.2.0

  • 添加多系统支持(Alpine、Ubuntu/Debian、CentOS/RHEL/Fedora)
  • 增强错误处理和恢复机制
  • 添加配置备份和恢复功能
  • 添加系统信息和网络连接测试
  • 改进 supervisord 管理
  • 配置持久化保存
  • 更新文档

版本 1.1.0

  • 添加 supervisord 停止设置
  • 改进进程管理
  • 修复进程残留问题

版本 1.0.7

  • 初始版本

🤝 贡献

欢迎提交 Issue 或 Pull Request,优化脚本功能!如果你有任何建议或发现了 bug,请在 GitHub 上提交 Issue。

📄 许可证

MIT License

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published