Skip to content

Latest commit

 

History

History
266 lines (185 loc) · 5.06 KB

File metadata and controls

266 lines (185 loc) · 5.06 KB

开发指南

添加自定义规则

1. 创建规则文件

rule/clash/ 目录创建 .list 文件:

vim rule/clash/QR_MyRule.list

规则格式:

DOMAIN-SUFFIX,example.com
DOMAIN,exact.example.com
DOMAIN-KEYWORD,keyword
IP-CIDR,1.2.3.0/24
IP-CIDR6,2001:db8::/32

2. 注册规则

编辑 core/config.py,在 RULES 列表中添加:

RULES = [
    # 在合适的位置添加
    {"file": "QR_MyRule.list", "route": "QG_最快线路"},
]

规则按列表顺序匹配,越靠前优先级越高。

3. 条件规则

使用 qtags 实现条件控制:

{"file": "QR_MyRule.list", "route": "QG_最快线路", "qtags": ["sci"]}

当不使用 -sci 参数时,该规则会路由到 DIRECT

添加代理分组

编辑 core/config.py,在 GROUPS 字典中添加:

GROUPS = {
    "QG_新分组": {
        "type": "url-test",  # 或 "select"
        "filter": "(?i)关键词|keyword",  # 正则表达式过滤节点
        "url": "https://www.google.com/",  # url-test需要
        "add_nodes": ["DIRECT", "QP_MyNode"]  # 可选
    }
}

分组类型:

  • select - 手动选择
  • url-test - 自动测速选择

filter正则示例:

  • (?i)美|us|US - 匹配美国节点(不区分大小写)
  • (?i)^(?!.*重置).* - 排除包含"重置"的节点
  • .* - 匹配所有节点

添加自建节点

编辑 core/config.py,在 SELF_HOSTED_NODES 字典中添加:

SELF_HOSTED_NODES = {
    "QP_MyNode": {
        "server": "192.168.1.100",
        "port": 7890,
        "type": "socks5",
        "tags": ["home", "office"]  # 用于场景过滤
    }
}

tags说明:

  • 使用 -nas 参数时,带 "nas" 标签的节点会被排除
  • 可以添加多个标签,用于不同场景的过滤

添加新场景

1. 在makeurl.sh中添加生成命令

编辑 bin/makeurl.sh

# 添加新场景
python3 core/clash_rule_builder.py -my -o output/files/newscene.yaml

2. 如需新参数

编辑 core/clash_rule_builder.py,添加参数:

parser.add_argument('-newparam', action='store_true',
                    help='新参数说明')

然后在代码中使用:

if args.newparam:
    # 执行特定逻辑
    pass

修改默认配置

端口配置

编辑 core/clash.pyset_basis() 方法:

mixed-port: 7890                 # 混合代理端口
external-controller: 0.0.0.0:7790  # 控制面板端口

DNS配置

编辑 core/clash.pyset_dns() 方法:

nameserver:
  - 223.5.5.5
  - 114.114.114.114
fallback:
  - https://dns.cloudflare.com/dns-query
  - https://dns.google/dns-query

健康检查

编辑 core/config.py

HEALTH_CHECK_URL = "http://cp.cloudflare.com/generate_204"
HEALTH_CHECK_INTERVAL = 60  # 秒

调试技巧

1. 查看生成的配置

# 生成配置
SKIP_UPLOAD=1 bash bin/makeurl.sh

# 查看配置内容
cat output/files/home.yaml

2. 验证配置有效性

mihomo -t -f output/files/home.yaml

3. 测试单个场景

python3 core/clash_rule_builder.py -my -sci -o test.yaml
mihomo -t -f test.yaml

4. 查看节点过滤结果

运行时会输出节点添加信息:

✓ 添加节点: QP_MyNode
⏭️  跳过nas标签节点: QP_NAS
⚠️  警告: 分组 'QG_学术网站' 尝试引用未在节点池中的节点 'QP_NAS'

5. 调试规则匹配

在生成的yaml中查看rules部分:

grep -A 50 "^rules:" output/files/home.yaml

代码修改流程

1. 修改配置常量

修改 core/config.py 中的:

  • SELF_HOSTED_NODES - 自建节点
  • GROUPS - 代理分组
  • RULES - 路由规则

2. 修改生成逻辑

修改 core/clash_rule_builder.py 的主流程。

3. 修改配置管理

修改 core/clash.pyclash_yaml 类方法。

4. 测试

# 语法检查
python3 -m py_compile core/*.py

# 功能测试
SKIP_UPLOAD=1 bash bin/makeurl.sh

# 验证配置
mihomo -t -f output/files/home.yaml

常用正则表达式

# 匹配美国节点
"(?i)美|us|US|unitedstates|united states|美国|🇺🇸"

# 匹配日本节点
"(?i)日本|jp|japan|🇯🇵"

# 匹配香港节点
"(?i)港|hk|hongkong|hong kong|🇭🇰"

# 排除信息节点
"(?i)^(?!.*(?:重置|官网|到期|流量|剩余)).*"

# 排除自定义节点
"(?i)^(?!.*(?:QP|QG)).*"

# 匹配IPv6节点
"(?i)IPv6|ipv6"

# 匹配ChatGPT相关
"(?i)chat|gpt|美|us"

文件命名规范

  • 规则文件:QR_功能名.list
  • 分组名称:QG_功能名
  • 自建节点:QP_节点名
  • 条件标签:小写英文,如 sci

提交代码

# 检查修改
git status

# 添加文件
git add core/config.py rule/clash/QR_MyRule.list

# 提交
git commit -m "添加新规则:QR_MyRule"