Skip to content

AirportR/fulltclash

Repository files navigation

FullTClash

🤖 节点质量检测的Telegram机器人

English    简体中文


Docker Pulls Docker Image Size


基本介绍

FullTClash名字来源于 Full Test base on Clash 。后端部分使用Clash项目(现在亦可称之为mihomo)相关代码作为出站代理,前端部分使用Telegram API作为交互界面,需配合Telegram使用,即为一个Telegram机器人(bot), FullTClash bot 是承载其测试任务的Telegram 机器人(以下简称bot)。
目前支持以Clash配置文件为载体的批量连通性测试,支持以下测试条目:

  1. Netflix
  2. Youtube
  3. DisneyPlus
  4. steam货币
  5. OpenAI(ChatGPT)
  6. 落地ip风险(IP欺诈度)
  7. 维基百科
  8. TVBAnyware
  9. Viu

此外还有:

  1. HTTP延迟测试
  2. 链路拓扑测试(节点出入口分析)。
  3. 下行速度测试

主要功能

  • asyncio异步支持
  • 订阅管理
  • 测试结果绘图
  • 权限控制
  • 文档支持
  • 基于Pyrogram框架
  • 规则系统
  • 支持Docker
  • 命令行支持
  • 日志输出
  • 插件扩展
  • 自由定制化配置

分支说明

  • master 主分支,主打稳定。
  • backend 纯后端代码,无前端BOT,意味着需要额外的bot作主端。
  • dev 开发进度最前沿。
  • old 依靠调用原版Clash Restful API进行测试。可随意更换内核,但已停止新功能开发。

支持协议

出站协议 Clash Mihomo(Clash.Meta)
SOCKS (4/4a/5)
HTTP(S)
Shadowsocks
VMess
Trojan
Snell
VLESS
TUIC
Hysteria
Hysteria2
Wireguard
ShadowsocksR

本项目默认使用mihomo内核。

使用文档

可以在 这里 找到fulltclash的使用文档。

效果预览

流媒体测试:

测试图片

测试图片

如何开始

基础准备

要成功运行该Telegram 机器人,首先需要准备以下信息:

  • Telegram 的api_id 、api_hash 获取地址 不会请Google。(部分IP已被拉黑,无法正常申请成功,请尝试更换干净IP)

  • @BotFather 那里创建一个机器人,获得该机器人的bot_token,应形如:

    bot_token = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"

    这步不会请Google。

  • 字体文件。(可选,可以用默认的)

拉取源码

方法1:直接下载(不会有人不知道在哪下吧?)
方法2:使用git(Linux推荐,方便更新),首先安装git,然后拉取仓库。以下指令为 Ubuntu 发行版作示例,Windows自行解决。

apt install -y git && git clone https://github.com/AirportR/fulltclash.git && cd fulltclash

此方法在中国大陆可能需要代理加速,请自行解决。

环境准备

  • Python 3.9 以上
  • 以及各种相关包依赖

您可以用以下命令,在当前项目目录下运行以快速安装环境:

pip install -r requirements.txt

为bot进行相关配置

以下为启动bot的最低要求(如果您是新手,建议先以最低要求把bot跑起来,否则自己乱改配置容易出现不可预知的错误。)

新建一个名为config.yaml的文件,放在./resources下,项目有模板例子名为./resources/config.yaml.example,在config.yaml中写入如下信息:

  • bot相关配置

    bot:
     api_id: 123456 #改成自己的api_id
     api_hash: 123456ABCDefg #改成自己的api_hash
     bot_token: 123456:ABCDefgh123455  # bot_token, 从 @BotFather 获取
     # 如果是在中国大陆地区使用,则程序需要代理才能连接上Telegram服务器。写入如下信息:
     proxy: 127.0.0.1:7890 #必须是socks5类型 替换成自己的代理地址和端口
  • 代理客户端路径配置

    从3.6.8开始,初次启动将自动下载以下(Windows,MacOS,Linux)(x86_64,arm64)的二进制文件,无需配置。

    当然如果您想手动下载, 请自行前往以下网址获取: https://github.com/AirportR/FullTCore/releases
    下载解压后可以放到 ./bin/ 目录下,比如文件名为 FullTCore ,下面的配置文件这样写:

    clash:
     path: "./bin/FullTCore" #这里改成代理客户端文件路径

    Windows系统名字后缀名.exe要加上,其他类Unix系统不需要加后缀名。

  • 管理员配置(可选)

    从3.6.10版本开始,bot在首次启动时会将接收到的第一条消息的发送者作为管理员,一般无需手动配置,除非您想设置多个管理员:

    admin:
    - 12345678 # 改成自己的telegram uid
    - 8765431 # 这是第二行,表示第二个管理员,没有第二个管理员就把该行删除。
  • HTTP代理配置(可选)

    如果是在中国大陆地区使用,可能部分网址无法直接连接。可在config.yaml中写入如下信息,下载资源文件时将自动应用该项配置:

    # 获取订阅时使用代理(可选)
    proxy: 127.0.0.1:7890 #http代理类型 替换成自己的代理地址和端口,注意,此配置与上面的独立分开。
    
  • 自定义buildtoken(可选)

    个人使用请直接跳过这条

    buildtoken是构建 ./bin/FullTCore(.exe) 代理客户端二进制文件的编译Token,此token为数据加密密钥,一般来说,用项目自带的编译token在本地运行不会有任何问题,但是如果您选择自己编译并且更改了 build.key文件,则主端需要改变默认配置,以此用到编译token,这个token需要写入到配置文件里,供Bot加密信息。

    buildtoken: 12345678ABCDEFG

获取session文件(可选)

您需要在项目文件目录下,放置一个已经登陆好的.session后缀文件,这个文件是程序生成的,是Telegram的登录凭据,形如: my_bot.session

  • 方法1:

    可以直接在配置文件config.yaml中配置,这样程序启动后会自动读取配置文件里面的值来生成session文件(要求一定要正确)。

    #配置文件示例,注意缩进要正确
    bot:
     api_id: 123456
     api_hash: 123456ABCDefg
     bot_token: 123456:ABCDefgh123455
  • 方法2: 您可以参阅这篇文档,以快速获得后缀为 .session 的文件

  • 方法3: 项目的 ./utils/tool/ 目录下有一个文件名为 login.py ,可以通过指令运行它:

    python login.py
    

    当程序退出后即可自动生成一个名为 my_bot.session 的文件 ,之后将它移动到项目根目录。 运行后它会尝试给你输入的用户名的目标发送消息,当接收到:嗨, 我在正常工作哦!

    这句话时,即可说明该session文件有效,否则无效。

如果启动后无法验证,请删除生成的mybot.session文件,此时的session登录令牌是不可用的,如果不删除程序会一直使用坏的文件,不会重新生成。

开始启动

配置好后,在项目目录下运行以下指令

python3 main.py

等待初始化操作, 等待初始化完毕后进入运行状态了,运行之后和bot私聊指令:

/help 可查看所有命令说明

/testurl <订阅地址> (Clash配置格式) 即可开始测试

代理客户端编译(高级)

FullTClash有专用的代理客户端,存放在 ./bin/下。初次启动会自动帮您下载(仅限win、linux、darwin)对应平台的二进制文件。

文件的压缩包格式为: FullTCore_{版本号}_{平台}_{CPU架构}.{压缩包后缀}

没有所用架构? 如果发现没有自动下载,说明没有在仓库中找到您所用架构的二进制文件,比如mips架构,那么您需要自行编译。

此仓库 下有一源码文件为 fulltclash.go ,您需要将该文件自行用Golang编译器编译成二进制文件。

编译完成覆盖原文件即可 ,如果操作难度太大,可以发起issue详谈。

Docker启动

./docker/ 目录

持久化运行

自行Google搜索即可

控制台测试

您可以在本机的控制台使用命令行的方式进行测试,但仅支持基本测试功能:

python ./utils/tool/console.py -h

交流探讨

我们欢迎各方朋友提出针对性的反馈:

项目贡献:

1、在本项目的主GitHub仓库进行fork,你可以只fork dev的分支。
2、在你的计算机上使用git clone来下载你fork后的仓库。
3、在下载后的本地仓库进行修改。
4、执行git add .(请不要忘记句号!!!)
5、执行git commit,并输入你做出的更改。
6、回到你的仓库,发起pr请求到dev分支,等待下一步(通过/驳回/修改)。

答疑

  1. FullTClash测试原理
    原理是在后台启动一个代理客户端,然后开启多个socks5入站端口,通过配置里的配置信息匹配代理客户端出站协议类型进行测试。代理客户端是基于上游的Clash项目改动得到的专属客户端,并将其命名为FullTCore。
  2. 为什么不使用原版的Clash客户端二进制
    自从FullTClash的3.5.8版本起,支持前后端模式,我们把后端部分单独分离,使之可以让前端的bot运行环境与后端运行的环境不在同一台机器上,在当时Clash并没有提供符合本项目的特性,再加上FullTClash仅仅只需要其中出站功能,所以不得已进行一些改动。事实上,FullTClash的old分支是依靠Clash提供的Restful API运行的,现在已不再维护。
  3. 什么是Telegram UID
    Telegram官方并没有承认UID的说法,但确实存在于Telegram中。每一个TG用户都存在一个唯一的身份ID,这个在官方的TG客户端是查询不到的。Bot依靠UID确定管理员身份,至于如何获取Google搜索即可。
  4. 是否有一键部署脚本
    目前只有Docker部署脚本,期待你的贡献!

致谢