Search: #小课堂

  1. Sub-Store 根据参数下发 mihomo smart 配置▎使用场景在文件链接后添加 URL 参数 smart=true / smart=1 来选择性下发 smart 策略组▎在文件中添加一个脚本操作const { smart } = $options?._req?.query || {};

    Sub-Store 根据参数下发 mihomo smart 配置

    ▎使用场景

    在文件链接后添加 URL 参数 smart=true / smart=1 来选择性下发 smart 策略组

    ▎在文件中添加一个脚本操作

    const { smart } = $options?._req?.query || {};
    
    if (smart && JSON.parse(smart)) {
      const config = ProxyUtils.yaml.safeLoad($content)
      config['proxy-groups'] = config['proxy-groups'].map(group => ({
        ...group,
        type: ['url-test'].includes(group.type) ? 'smart' : group.type
      }));
      $content = ProxyUtils.yaml.safeDump(config)
    }


    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #Sub-Store #小课堂 #tips #订阅 #配置 #smart #覆写 #mihomo

    • ❤️2
  2. Sub-Store 通过机场节点更新机场订阅技巧有些机场只能通过机场节点更新之前写的 代理策略说明 也有讲过一些除了配置分流外 还有个办法就是如图所示填一个节点/策略然后在通过机场节点更新机场订阅之后, 自动取其中一个有效节点更新如图的位置function operator(proxies, targetPlatform, context) {

    Sub-Store 通过机场节点更新机场订阅技巧

    有些机场只能通过机场节点更新
    之前写的 代理策略说明 也有讲过一些

    除了配置分流外 还有个办法就是如图所示填一个节点/策略
    然后在通过机场节点更新机场订阅之后, 自动取其中一个有效节点更新如图的位置

    function operator(proxies, targetPlatform, context) {
      const SUBS_KEY = 'subs'
      const $ = $substore
    
      const { source } = context
    
      if (source._collection) throw new Error('不支持组合订阅, 请在单条订阅中使用此脚本')
    
      // 这个可以自己改一下, 目的是从 proxies 取一个有效的节点出来
      // 这里示范的是取一个节点包含 🇭🇰 的节点
      const proxy = proxies.find(p => p.name.includes('🇭🇰'))
      
      
      const subs = $.read(SUBS_KEY).map(sub => {
        if(sub.name === proxy._subName) {
          sub.proxy = ProxyUtils.produce([proxy], 'Surge')
          console.log(`订阅 ${proxy._subDisplayName || proxy._subName} 写入代理/策略 ${sub.proxy}. 刷新后可见`)
        }
        return sub
      })
      $.write(subs, SUBS_KEY)
      return proxies
    }


    Sub-Store 合集 频道资源合集 恰饭推荐 群组 联系推广

    #SubStore #Sub-Store #小课堂 #tips #节点 #代理 #策略 #订阅

    • ❤️6
    • 👍2
  3. Sub-Store 小课堂: 根据请求头内容自动过滤协议例如根据 Surge 客户端实际解锁了哪些来进行筛选可让 AI 帮忙修改 我人废了function operator(proxies, target, context) {

    Sub-Store 小课堂: 根据请求头内容自动过滤协议

    例如根据 Surge 客户端实际解锁了哪些来进行筛选

    可让 AI 帮忙修改 我人废了

    function operator(proxies, target, context) {
      if ($options?._req) {
        const { headers, url, path } = $options?._req || {};
        // 获取 user-agent
        const ua = headers?.["user-agent"] || headers?.["User-Agent"];
        console.log(`User-Agent: ${ua}`);
        let types = [];
        if (target === "Surge") {
          const isSurgeiOS = ua?.startsWith("Surge iOS/");
          if (isSurgeiOS) {
            // 获取 Surge 已解锁的功能
            const features = (
              headers?.["x-surge-unlocked-features"] ||
              headers?.["X-Surge-Unlocked-Features"]
            )?.split(/\s*,\s*/);
            console.log(`Surge 已解锁的功能: ${features}`);
    
            // 如果能取到 Surge 已解锁的功能 并且 里面没有 anytls, 就过滤掉 anytls
            if (features && !features.includes("anytls")) {
              types.push("anytls");
            }
          } else if (
            ua?.startsWith("Surge Mac/") &&
            ua?.match(/\/(\d+)/)?.[1] < 9860
          ) {
            // 若 Surge Mac 版本小于 9860,就过滤掉 anytls
            types.push("anytls");
          }
        } else if (target === "Egern") {
          const build = ua?.match(/Build\/(\d+)/)?.[1];
          console.log(`Egern Build: ${build}`);
          // 更旧的版本里 user-agent 里没 build
          // 判断旧版 就过滤掉 anytls
          if (ua?.startsWith("egern/") && (!build || build < 718)) {
            types.push("anytls");
          }
        }
        return proxies.filter((proxy) => !types.includes(proxy.type));
      }
      return proxies;
    }


    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #Sub-Store #小课堂 #tips #协议 #协议筛选 #筛选 #过滤 #节点 #请求 #请求头

    • ❤️3
    • 🫡3
    • 🥰2
    • 😁1
  4. 再说明一下 Sub-Store 脚本处理超时的问题使用脚本测试不开缓存可能会导致每次请求都耗时过长而请求超时, 可选择▎ 方案 1配置 Gist 定时上传, 客户端拉取 Gist 链接定时任务没有超时的说法. 就是花一些时间跑完▎ 方案 2配置缓存和定时处理订阅在对应的脚本中使用参数( 别忘了这个, 一般为 cache, 值设为 true 即可) 开启缓存, 如图所示这样你定时跑, 让客户端从 Sub-Store 拉取的时候都能走缓存 , 也不会超时▎ 方案 3类似方案 2 但是用同步配置来触发创建一个同步配置 设置定时 然后选择订阅 然后选不上传产物 Sub-Store 合集 频道资源合集 恰饭推荐 群组 #SubStore #小课堂 #脚本 #缓存 #超时 #Gist

    再说明一下 Sub-Store 脚本处理超时的问题

    使用脚本测试不开缓存可能会导致每次请求都耗时过长而请求超时, 可选择

    ▎ 方案 1

    配置 Gist 定时上传, 客户端拉取 Gist 链接

    定时任务没有超时的说法. 就是花一些时间跑完

    ▎ 方案 2

    配置缓存和定时处理订阅

    在对应的脚本中使用参数( 别忘了这个, 一般为 cache, 值设为 true 即可) 开启缓存, 如图所示

    这样你定时跑, 让客户端从 Sub-Store 拉取的时候都能走缓存 , 也不会超时

    ▎ 方案 3

    类似方案 2 但是用同步配置来触发
    创建一个同步配置 设置定时 然后选择订阅 然后选不上传产物


    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #小课堂 #脚本 #缓存 #超时 #Gist

    • ❤️3
  5. 修改 QX 的 obfs=http 为 obfs=vmess-http / obfs=shadowsocks-

    修改 QX 的 obfs=httpobfs=vmess-http / obfs=shadowsocks-http

    来自群友 @ICoeMix 的需求

    QX 说明:
    The obfs=http for shadowsocks protocol follows the shadowsocks project's simple-obfs plugin. The obfs=http for VMess protocol follows V2Ray's implementation. These 2 obfuscations are totally different. Sometimes to comply with your special server settings (「shadowsocks」 + 「http obfuscation of VMess」 or 「VMess」 + 「http obfuscation of shadowsocks」. The latter rarely happens, and the former happens when the server side deployed by V2Ray (or similar programs) with shadowsocks protocol and V2Ray built-in http obfuscation), you may set obfs=vemss-http for shadowsocks protocol, or obfs=shadowsocks-http for vmess protocol.


    脚本操作:
    if($server.type == 'ss' && $server['plugin-opts']?.mode === 'http'){
      $server['plugin-opts'].mode = 'vmess-http'
      // $server['plugin-opts'].mode = 'shadowsocks-http'
    }


    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #Sub-Store #小课堂 #tips #节点 #SS #obfs #QX #http #vmess-http #shadowsocks-http

    • ❤️2
  6. Sub-Store 小课堂: 域名解析多 IP 裂变节点🆕 更新1. 手动解析中也设置 _domain 字段方便之后使用2. 结构调整, 支持 ip + 名称 裂变3. 群友的一个小需求, 裂变后需要还保留一条原始域名的节点 原消息 Sub-Store 合集 频道资源合集 恰饭推荐 群组 #SubStore #Sub-Store #小课堂 #tips #域名解析 #裂变 #IP #节点

    Sub-Store 小课堂: 域名解析多 IP 裂变节点

    🆕 更新

    1. 手动解析中也设置 _domain 字段方便之后使用

    2. 结构调整, 支持 ip + 名称 裂变

    3. 群友的一个小需求, 裂变后需要还保留一条原始域名的节点

    原消息

    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #Sub-Store #小课堂 #tips #域名解析 #裂变 #IP #节点

    • ❤️1
  7. Sub-Store 使用本地配置项控制脚本操作示例1. 从 sni 文件中读取内容并进行节点操作

    Sub-Store 使用本地配置项控制脚本操作示例

    1. 从 sni 文件中读取内容并进行节点操作
    const sni = await produceArtifact({
    type: 'file',
    name: 'sni' // 文件名
    });
    $server.sni = sni


    2. 从 config 文件中读取配置项并进行节点操作
    config 的本地内容为 { "reuse": false } 假设我们用 JSON 配置(也支持 JSON5)
    脚本操作为
    const config = (ProxyUtils.JSON5 || JSON).parse(await produceArtifact({
    type: 'file',
    name: 'config' // 文件名
    }))
    $server.reuse = config.reuse



    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #Sub-Store #小课堂 #配置 #文件 #脚本 #JSON #JSON5

    • ❤️1
  8. Sub-Store 小课堂: 根据 Surge 已解锁的功能输出不同的配置在最新的 iOS 版本中,为 Surge 的托管配置、外部资源和模块 HTTP 请求,新增了 X-Surge-Unlocked-Features 字段,用于服务器判定 Surge 已解锁的功能以区分返回结果详见 频道消息在 Sub-Store 中, 可以创建一个文件, 如图. 根据 Surge 已解锁的功能输出不同的配置const headers = $options?._req?.headers

    Sub-Store 小课堂: 根据 Surge 已解锁的功能输出不同的配置

    在最新的 iOS 版本中,为 Surge 的托管配置、外部资源和模块 HTTP 请求,新增了 X-Surge-Unlocked-Features 字段,用于服务器判定 Surge 已解锁的功能以区分返回结果

    详见 频道消息

    在 Sub-Store 中, 可以创建一个文件, 如图. 根据 Surge 已解锁的功能输出不同的配置

    const headers = $options?._req?.headers
    const features = (headers?.['x-surge-unlocked-features'] || headers?.['X-Surge-Unlocked-Features'])?.split(/\s*,\s*/)
    console.log(features)
    // 如果包含某个功能
    if (features?.includes('encrypted-dns')) {
      // 就修改内容
      $content = $content.replace(/a/,'b')
    }


    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #Sub-Store #小课堂 #tips #配置 #解锁 #功能 #托管 #脚本

    • ❤️2
    • 👍1
  9. Sub-Store 小课堂: 以云通为例, 从节点名称提取流量信息和套餐等级并写入此机场响应头中 total=0, 无法得到总流量. 但是节点中返回了 预计可用:1963.00 GB 和 当前等级:企业可使用脚本操作, 实现如图效果脚本见本消息评论区 Sub-Store 合集 频道资源合集 恰饭推荐 群组 #SubStore #Sub-Store #小课堂 #tips #流量 #订阅 #云通 #机场 #脚本

    Sub-Store 小课堂: 以云通为例, 从节点名称提取流量信息和套餐等级并写入

    此机场响应头中 total=0, 无法得到总流量. 但是节点中返回了 预计可用:1963.00 GB当前等级:企业

    可使用脚本操作, 实现如图效果

    脚本见本消息评论区

    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #Sub-Store #小课堂 #tips #流量 #订阅 #云通 #机场 #脚本

    • ❤️6
  10. Sub-Store 小课堂: 域名解析多 IP 裂变节点更新 如果你的真实需求是解析出不同运营商/不同地区的不同 IP, 请把 Sub-Store 内置的域名解析这一步操作换成脚本操作, 内容为:

    折腾啥
    Sub-Store 小课堂: 域名解析多 IP 裂变节点 群友的需求 使用了域名解析功能,如果有一个域名解析出来多个ip,如何让每个ip都变成一个节点 1. 如果你的真实需求是解析出不同运营商/不同地区的不同 IP 1.1 请把 Sub-Store 内置的域名解析这一步操作换成脚本操作, 内容为: const server = 'https://223.6.6.6/dns-query'; // DoH 阿里和腾讯的可能会触发限速 可以换别的试试 const edns = [{ name: '联通', ip:…
    Sub-Store 小课堂: 域名解析多 IP 裂变节点更新

    如果你的真实需求是解析出不同运营商/不同地区的不同 IP, 请把 Sub-Store 内置的域名解析这一步操作换成脚本操作, 内容为:
    const server = 'https://223.6.6.6/dns-query'; // DoH
    const edns = ['140.207.122.197', '183.47.126.35']; // 不同运营商/地区的 IP, 作为 EDNS Client Subnet (ECS)
    const type = 'A'; // A 或 AAAA

    if (!ProxyUtils.isIP($server.server)) {
    const cache = scriptResourceCache;
    const resolve = async (url, domain, type, edns) => {
    const id = `${url}:${domain}:${type}:${edns}`;
    const cached = cache.get(id);
    // 使用缓存
    if (cached) return cached;
    const res = await ProxyUtils.doh({
    url,
    domain,
    type,
    edns,
    });
    const { answers } = res;
    if (!Array.isArray(answers) || answers.length === 0) {
    throw new Error('No answers');
    }
    const result = answers
    .filter((i) => i?.type === type)
    .map((i) => i?.data)
    .filter((i) => i);
    if (result.length === 0) {
    throw new Error('No answers');
    }
    cache.set(id, result);
    return result;
    };
    const result = await Promise.all(
    edns.map((i) => resolve(server, $server.server, type, i)),
    );
    $server._resolved_ips = [...new Set(result.flat())];
    }

    然后接着用裂变脚本

    原消息

    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #Sub-Store #小课堂 #tips #域名解析 #裂变 #IP #节点

    • 👍4
  11. Sub-Store 小课堂: 域名解析多 IP 裂变节点群友的需求使用了域名解析功能,如果有一个域名解析出来多个ip,如何让每个ip都变成一个节点1. 如果你的真实需求是解析出不同运营商/不同地区的不同 IP1.1 请把 Sub-Store 内置的域名解析这一步操作换成脚本操作, 内容为:

    Sub-Store 小课堂: 域名解析多 IP 裂变节点

    群友的需求
    使用了域名解析功能,如果有一个域名解析出来多个ip,如何让每个ip都变成一个节点


    1. 如果你的真实需求是解析出不同运营商/不同地区的不同 IP
    1.1 请把 Sub-Store 内置的域名解析这一步操作换成脚本操作, 内容为:
    const server = 'https://223.6.6.6/dns-query'; // DoH 阿里和腾讯的可能会触发限速 可以换别的试试
    const edns = [{ name: '联通', ip: '119.36.124.169' }, { name: '电信', ip: '116.207.181.162' }, { name: '移动', ip: '111.47.229.151' }]; // 不同运营商/地区的 IP, 作为 EDNS Client Subnet (ECS)
    const type = 'A'; // A 或 AAAA

    if (!ProxyUtils.isIP($server.server)) {
    const cache = scriptResourceCache;
    const resolve = async (url, domain, type, { name, ip }) => {
    const id = `${url}:${domain}:${type}:${name}:${ip}`;
    const cached = cache.get(id);
    // 使用缓存
    if (cached) return cached;
    const res = await ProxyUtils.doh({
    url,
    domain,
    type,
    edns: ip,
    });
    const { answers } = res;
    if (!Array.isArray(answers) || answers.length === 0) {
    throw new Error('No answers');
    }
    let result = answers
    .filter((i) => i?.type === type)
    .map((i) => i?.data)
    .filter((i) => i);
    if (result.length === 0) {
    throw new Error('No answers');
    }
    result = [...new Set(result.flat())];
    const data = {
    ip,
    name,
    result,
    }
    cache.set(id, data);
    return data;
    };

    $server._domain = $server.server
    $server._resolved_ips = await Promise.all(
    edns.map(({ip, name}) => resolve(server, $server.server, type, { ip, name })),
    );
    }

    1.2 然后接一个脚本操作
    function operator(proxies = []) {
    const list = []
    proxies.map((p = {}) => {
    let ips = p._resolved_ips
    if (Array.isArray(ips) && ips.length > 0) {
    ips.map(({ name, ip, result }) => {
    result.map((server, index) => {
    list.push({
    ...p,
    name: `${name} ${index + 1} - ${p.name}`,
    server,
    })
    })
    })
    // 取消下面几行的注释, 可以添加一个原始域名的节点
    // list.push({
    // ...p,
    // name: `原始 - ${p.name}`,
    // server: p._domain,
    // })
    } else {
    list.push(p)
    }
    })
    return list
    }


    2. 如果你的需求只是裂变, 先添加一个内置的域名解析, 然后添加一个脚本操作:
    function operator(proxies = []) {
    const list = []
    proxies.map((p = {}) => {
    let ips = p._resolved_ips
    if (Array.isArray(ips) && ips.length > 0) {
    ips.map((server, index) => {
    list.push({
    ...p,
    name: `${p.name}${index + 1}`,
    server,
    })
    })
    // 取消下面几行的注释, 可以添加一个原始域名的节点
    // list.push({
    // ...p,
    // name: `原始 - ${p.name}`,
    // server: p._domain,
    // })
    } else {
    list.push(p)
    }
    })
    return list
    }


    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #Sub-Store #小课堂 #tips #域名解析 #裂变 #IP #节点

    • ❤️6
  12. Sub-Store 节点按 IP+端口去重不废话 上代码导入 这个 自己摸一下就会了 Sub-Store 合集 频道资源合集 恰饭推荐 群组 #SubStore #Sub-Store #小课堂 #tips #节点 #去重

    Sub-Store 节点按 IP+端口去重

    不废话 上代码

    导入 这个 自己摸一下就会了

    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #Sub-Store #小课堂 #tips #节点 #去重

    • 👍2
    • ❤️1
  13. Sub-Store 小课堂: 如何标记 IPv6 节点示范一个逻辑, 仅演示如何给能解析到 IPv6 地址的节点加上 [IPv6] 前缀其他需求可以自己改

    Sub-Store 小课堂: 如何标记 IPv6 节点

    示范一个逻辑, 仅演示如何给能解析到 IPv6 地址的节点加上 [IPv6] 前缀

    其他需求可以自己改

    
    if(ProxyUtils.isIPv6($server.server)) {
      $server.name = `[IPv6] ${$server.name}`
    }
    // 还原节点域名
    if ($server._domain) $server.server = $server._domain


    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #Sub-Store #小课堂 #tips #IP #IPv6 #节点 #域名 #DNS #解析 #域名解析 #脚本

    • ❤️5
    • 👍5
  14. Sub-Store 小课堂: Egern Trojan 节点补全 SNI目前 Egern Trojan SNI 字段是必填的暂时可以先这样节点操作补全一下if($server.type === 'trojan' && !$server.sni) {

    Sub-Store 小课堂: Egern Trojan 节点补全 SNI

    目前 Egern Trojan SNI 字段是必填的

    暂时可以先这样节点操作补全一下

    if($server.type === 'trojan' && !$server.sni) {
      $server.sni = $server.server
    }


    ℹ️ 相关内容

    📌 Sub-Store 相关教程/脚本整合

    👏 欢迎评论 & 转发(请保留来源)

    加入 折腾啥 📢 频道 | 👥 群组

    ※ 机场推荐 大流量电话卡 支付宝红包

    可点击查看 👉 恰饭推荐

    🙏 本频道 99.99% 的内容均为原创 感谢老板们的支持

    #SubStore #Sub-Store #小课堂 #tips #Egern #Trojan #SNI #节点 #协议 #脚本

    • ❤️1
    • 👍1
  15. Sub-Store 小课堂: 使用文件功能, 实现多加速服务拉取 GitHub 资源1. 创建文件(按图操作)2. 脚本部分 见此文件已经配置了默认的 GitHub 加速服务和参数3. 使用时a. $options 为通过链接传入的参数例如: { arg1: 'a', arg2: 'b' }先这样处理 encodeURIComponent(JSON.stringify({ arg1: 'a', arg2: 'b' }))然后这样用 /api/file/foo?$options=%7B%22arg1%22%3A%22a%22%2C%22arg2%22%3A%22b%22%7Db. 或这样处理 encodeURIComponent('arg1=a&arg2=b')然后这样用 /api/file/foo?$options=arg1%3Da%26arg2%3Db例如: { url: '

    Sub-Store 小课堂: 使用文件功能, 实现多加速服务拉取 GitHub 资源

    1. 创建文件(按图操作)

    2. 脚本部分 见此文件

    已经配置了默认的 GitHub 加速服务和参数

    3. 使用时

    a. $options 为通过链接传入的参数
    例如: { arg1: 'a', arg2: 'b' }
    先这样处理 encodeURIComponent(JSON.stringify({ arg1: 'a', arg2: 'b' }))
    然后这样用 /api/file/foo?$options=%7B%22arg1%22%3A%22a%22%2C%22arg2%22%3A%22b%22%7D

    b. 或这样处理 encodeURIComponent('arg1=a&arg2=b')
    然后这样用 /api/file/foo?$options=arg1%3Da%26arg2%3Db

    例如:
    { url: 'https://raw.githubusercontent.com/lige47/QuanX-icon-rule/main/ligeicon.json' }
    ->
    /api/file/fetch?$options=%7B"url"%3A"https%3A%2F%2Fraw.githubusercontent.com%2Flige47%2FQuanX-icon-rule%2Fmain%2Fligeicon.json"%7D

    同时兼容 $arguments. 但是用的时候, 需要你自己改了.

    4. 其他参数

    支持 timeout , headers 等参数, 会覆盖默认参数. 也可以直接修改脚本里的默认参数


    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #Sub-Store #小课堂 #tips #加速 #GitHub #下载 #拉取 #文件 #脚本

    • ❤️4
  16. Sub-Store 小课堂: 按节点名称排序▎节点操作 - 正则排序如图操作即可实现从上往下, 香港节点, 日本节点, 美国节点, 其他节点PS: 你可以将你维护好的这个操作复制并导入到其他需要使用的地方. 如图点击复制按钮. 再需要使用的地方, 点击 "从剪贴板导入" 即可 Sub-Store 合集 频道资源合集 恰饭推荐 群组 #SubStore #Sub-Store #小课堂 #tips #排序 #节点 #正则排序 #节点排序

    Sub-Store 小课堂: 按节点名称排序

    ▎节点操作 - 正则排序

    如图操作即可实现

    从上往下, 香港节点, 日本节点, 美国节点, 其他节点

    PS: 你可以将你维护好的这个操作复制并导入到其他需要使用的地方. 如图点击复制按钮. 再需要使用的地方, 点击 "从剪贴板导入" 即可

    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #Sub-Store #小课堂 #tips #排序 #节点 #正则排序 #节点排序

    • 👍8
    • ❤️3
  17. Sub-Store 节点按延迟排序1. 先自己按需配置 节点测活(完善版) 2. 然后加入排序逻辑(随便写的, 延迟从小到大)function operator(proxies) {

    Sub-Store 节点按延迟排序

    1. 先自己按需配置 节点测活(完善版)

    2. 然后加入排序逻辑(随便写的, 延迟从小到大)

    function operator(proxies) {
    
      const withLatency = proxies.filter(p => p._latency !== undefined)
      const withoutLatency = proxies.filter(p => p._latency === undefined)
      
    
      withLatency.sort((a, b) => Number(a._latency) - Number(b._latency))
      
    
      return [...withLatency, ...withoutLatency]
    }


    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #Sub-Store #小课堂 #tips #排序 #节点 #延迟 #延迟排序

    • ❤️11
    • 👍2
  18. Sub-Store 小课堂: Sub-Store 拉取 Sub-Store 输出时, 如何获取到所有的节点 众所周知, 没有一个代理 App 支持所有协议. 你指定任何一个 target 都可能导致输出的节点不全.一种常见的操作:假设你朋友给你分享的 Sub-Store 通用订阅为

    Sub-Store 小课堂: Sub-Store 拉取 Sub-Store 输出时, 如何获取到所有的节点

    众所周知, 没有一个代理 App 支持所有协议. 你指定任何一个 target 都可能导致输出的节点不全.

    一种常见的操作:

    假设你朋友给你分享的 Sub-Store 通用订阅为 https://a.com/share/sub/share?token=123

    你可以在自己的 Sub-Store 中填写 https://a.com/share/sub/share?token=123&includeUnsupportedProxy=true

    如果你确定不需要拉取订阅流量信息, 可填写 https://a.com/share/sub/share?token=123&includeUnsupportedProxy=true#noFlow


    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #Sub-Store #小课堂 #tips #协议 #分享 #节点

    • ❤️2
    • 👍1
  19. Sub-Store 小课堂: 筛选出 Shadowsocks 2022 节点▎脚本过滤return ['2022-blake3-aes-128-gcm', '2022-blake3-aes-256-gcm'].includes($server.cipher) Sub-Store 合集 频道资源合集 恰饭推荐 群组 #SubStore #Sub-Store #小课堂 #tips #协议 #协议筛选 #筛选 #SS #SS2022 #Shadowsocks #Shadowsocks2022 #过滤 #节点

    Sub-Store 小课堂: 筛选出 Shadowsocks 2022 节点

    ▎脚本过滤

    return ['2022-blake3-aes-128-gcm', '2022-blake3-aes-256-gcm'].includes($server.cipher)



    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #Sub-Store #小课堂 #tips #协议 #协议筛选 #筛选 #SS #SS2022 #Shadowsocks #Shadowsocks2022 #过滤 #节点

    • ❤️2
    • 🌭1
  20. Sub-Store 小课堂: 按协议筛选节点UDP 协议的未来不容乐观...部分群友有排除掉 UDP 协议的需求 故出一期小课堂▎协议过滤只选你要的协议▎脚本过滤更灵活, 示例为 排除 hysteria2 hysteria tuic juicity 四种协议return !['hysteria2', 'hysteria', 'tuic', 'juicity'].includes($server.type) Sub-Store 合集 频道资源合集 恰饭推荐 群组 #SubStore #Sub-Store #小课堂 #tips #协议 #协议筛选 #筛选 #UDP #过滤 #节点

    Sub-Store 小课堂: 按协议筛选节点

    UDP 协议的未来不容乐观...部分群友有排除掉 UDP 协议的需求 故出一期小课堂

    ▎协议过滤

    只选你要的协议

    ▎脚本过滤

    更灵活, 示例为 排除 hysteria2 hysteria tuic juicity 四种协议

    return !['hysteria2', 'hysteria', 'tuic', 'juicity'].includes($server.type)


    Sub-Store 合集 频道资源合集 恰饭推荐 群组

    #SubStore #Sub-Store #小课堂 #tips #协议 #协议筛选 #筛选 #UDP #过滤 #节点

    • ❤️5
    • 👍4