2026年1月

效果图

先上个效果图

NewAPI 搭建的中转站

大部分的中转站都是基于 NewAPI 部署,一般可以在中转站底部 footer 看到是不是,那么可以使用接下来的两种用量查询方式

使用访问令牌

1. 获取用户 ID + 访问令牌:在 NewAPI 系统中转站 ,登录后找到 个人设置 -> 安全设置 -> 系统访问令牌,生成令牌。头像的旁边可以看到你的 ID

2. 填写配置:在 cc-switch 中进入用量查询配置页面,选择 NewAPI 模板,将请求地址、访问令牌、用户 ID 都填写上,注意这 3 个都是必填项。勾选启用用量查询 保存即可查询。


使用 APIKey

这个方式不用生成访问令牌,使用你填写的供应商 key 完成查询。使用 通用模板,在提取器代码输入框中输入以下脚本。

({
  request: {
    url: "{{baseUrl}}/api/usage/token",
    method: "GET",
    headers: {
      Authorization: "Bearer {{apiKey}}",
    },
  },
  extractor: function (response) {
    if (response.code) {
      if (response.data.unlimited_quota) {
        return {
          planName: response.data.name,
          total: -1,
          used: response.data.total_used / 500000,
          unit: "USD",
        };
      }
      return {
        isValid: true,
        planName: response.data.name,
        total: response.data.total_granted / 500000,
        used: response.data.total_used / 500000,
        remaining: response.data.total_available / 500000,
        unit: "USD",
      };
    }
    if (response.error) {
      return {
        isValid: false,
        invalidMessage: response.error.message,
      };
    }
  },
})

这个方式是查询你这个供应商 key 的用量情况,并非是你账号的,如果你的 key 生成时选择的无限额度,那么在 cc-switch 中只会显示这个 key 已经使用的用量,并不会显示剩余的。

其它

还有很多中转站是自研的系统,无法使用上述的方式进行查询,那么就要自己去写对应的查询脚本完成查询,这里我贴一个 88code 的,其它支持查询用量的站点,可以私聊我进行补充。

88code

和方式 2 一样,使用 通用模板 ,在提取器代码输入框中粘贴以下脚本。

({
  request: {
    url: "{{baseUrl}}/subscription",
    method: "POST",
    headers: {
      Authorization: "Bearer {{apiKey}}",
      "User-Agent": "cc-switch/1.0",
      Accept: "*/*",
    },
  },
  extractor: function (response) {
    if (response.error && response.msg == "No active subscription found") {
      throw new Error("该套餐暂无额度可使用");
    }
    if (response.error && response.msg == "API key not found") {
      throw new Error("该KEY无效");
    }
    const res = response.data // 成功处理:检查响应是否为非空数组 if (Array.isArray(res) && res.length > 0) {
      return res.filter(i => i.subscriptionStatus === "活跃中").map((i) => {
        let extraInfo = ""; // 初始化 extra 字段变量 // 判断是否有上次重置时间,以此来计算下次刷新时间 // lastCreditReset 字段存在且不为 null if (i.lastCreditReset) {
          // 1. 将上次重置时间的字符串转换为 Date 对象 const lastResetDate = new Date(i.lastCreditReset);
          // 2. 根据套餐描述,假设是每日重置,计算下次重置时间(加上24小时) // 86400000 毫秒 = 24 * 60 * 60 * 1000 const nextResetDate = new Date(lastResetDate.getTime() + 5*60*60*1000);
          // 3. 格式化日期为 "MM-DD HH:MM" const pad = (num) => String(num).padStart(2, "0");
          const month = pad(nextResetDate.getMonth() + 1); // 月份是从0开始的,所以+1 const day = pad(nextResetDate.getDate());
          const hours = pad(nextResetDate.getHours());
          const minutes = pad(nextResetDate.getMinutes());
          const formattedNextReset = `${month}-${day} ${hours}:${minutes}`;
          // 4. 拼接成最终的字符串
          extraInfo = `下次可刷新时间:${formattedNextReset}(${i.resetTimes})`;
        }
        // 对于按量付费(PAY_PER_USE)类型的套餐,提供特定信息 else if (i.subscriptionPlan.planType === "PAY_PER_USE") {
          extraInfo = "按量付费套餐,无固定刷新周期";
        }
        // 返回包含新字段的完整对象 return {
          isValid: true,
          planName: i.subscriptionPlan.subscriptionName,
          total: i.subscriptionPlan.creditLimit,
          remaining: i.currentCredits,
          unit: "USD",
          extra: extraInfo, // 将生成的 extra 信息添加到返回对象中
        };
      });
    }
  },
});

📌 转载信息
转载时间:
2026/1/12 10:34:08

为了体验一下 claude 的 skills,直接让 AI 阅读 claude 官方文档,生成了一个 skills
专门针对 PHP 项目的代码审查 skill ,试了下还不错,欢迎体验。


📌 转载信息
原作者:
love1024
转载时间:
2026/1/12 10:33:29

起因

今天打开活动监视器,发现内存压力已经黄了。

一看进程列表,好家伙,满屏的 node

排查

ps aux | grep node

输出让我沉默了:

node auggie --mcp -m default -w /Users/xxx/project
node auggie --mcp -m default -w /Users/xxx/project
node auggie --mcp -m default -w /Users/xxx/project
... (x34)

34 个 auggie --mcp 进程,全是 Augment 官方的 CLI 工具。

有些从 12月27日 就开始跑了,已经跑了两周了...

问题分析

Auggie 作为 MCP server 被 Claude Code / Cursor 等客户端调用时:

  1. 每次新会话都 fork 新进程 —— 这没问题
  2. 但是客户端断开后,进程不退出 —— 这就有问题了
  3. 没有任何清理机制 —— 进程就这么一直挂着
  4. 静默吃内存 —— 没有任何提示,用户完全无感知

结果就是:用一天,攒一堆僵尸进程,内存越来越少,直到你发现电脑开始卡了。

临时解决方案

# 一键清理所有 auggie 进程, 普通的 `pkill -f "auggie --mcp"` 居然杀不掉,必须用 `kill -9` 强制终止:
pkill -9 -f "auggie --mcp"

或者写个 alias 放到 .zshrc:

alias kill-auggie='pkill -9 -f "auggie --mcp" && echo "已清理 auggie 僵尸进程"' 

作为一个官方出品的 CLI 工具,进程生命周期管理这种基本功都没做好,属实有点说不过去。

ps: 可以用佬友 开发的 优化版… 官方这个属实有点坑了…


📌 转载信息
原作者:
cao_Jacker
转载时间:
2026/1/12 10:33:17

直接产出 Dreamy-rain/gemini-business2api 所需 json 注册效率~60s 一个
日抛 直接每日重新注册即可

刚刚那个版本有点问题 已修复
已经生成的佬记得把 config_id 后缀的?csesidx=.* 清理掉重新导入

import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
from urllib.parse import urlparse, parse_qs
from datetime import datetime
import time, random, json, os, requests

# 配置
TOTAL_ACCOUNTS = 20
MAIL_API = "https://mail.chatgpt.org.uk"
MAIL_KEY = "gpt-test"
OUTPUT_DIR = "gemini_accounts"
LOGIN_URL = "https://auth.business.gemini.google/login?continueUrl=https:%2F%2Fbusiness.gemini.google%2F&wiffid=CAoSJDIwNTlhYzBjLTVlMmMtNGUxZC1hY2JkLThmOGY2ZDE0ODM1Mg" # XPath
XPATH = {
    "email_input": "/html/body/c-wiz/div/div/div[1]/div/div/div/form/div[1]/div[1]/div/span[2]/input",
    "continue_btn": "/html/body/c-wiz/div/div/div[1]/div/div/div/form/div[2]/div/button",
    "verify_btn": "/html/body/c-wiz/div/div/div[1]/div/div/div/form/div[2]/div/div[1]/span/div[1]/button",
}

NAMES = ["James Smith", "John Johnson", "Robert Williams", "Michael Brown", "William Jones",
         "David Garcia", "Mary Miller", "Patricia Davis", "Jennifer Rodriguez", "Linda Martinez"]

def log(msg, level="INFO"): print(f"[{level}] {msg}")

def create_email():
    """创建临时邮箱""" try:
        r = requests.get(f"{MAIL_API}/api/generate-email",
            headers={"X-API-Key": MAIL_KEY}, timeout=30)
        if r.status_code == 200 and r.json().get('success'):
            email = r.json()['data']['email']
            log(f"邮箱创建: {email}")
            return email
    except Exception as e:
        log(f"创建邮箱失败: {e}", "ERR")
    return None def get_code(email, timeout=30):
    """获取验证码"""
    log(f"等待验证码 (最多{timeout}s)...")
    start = time.time()
    while time.time() - start < timeout:
        try:
            r = requests.get(f"{MAIL_API}/api/emails", params={"email": email},
                headers={"X-API-Key": MAIL_KEY}, timeout=30)
            if r.status_code == 200:
                emails = r.json().get('data', {}).get('emails', [])
                if emails:
                    html = emails[0].get('html_content') or emails[0].get('content', '')
                    soup = BeautifulSoup(html, 'html.parser')
                    span = soup.find('span', class_='verification-code')
                    if span:
                        code = span.get_text().strip()
                        if len(code) == 6:
                            log(f"验证码: {code}")
                            return code
        except: pass print(f"  等待中... ({int(time.time()-start)}s)", end='\r')
        time.sleep(3)
    log("验证码超时", "ERR")
    return None def save_config(email, cookies, url):
    """保存配置"""
    os.makedirs(OUTPUT_DIR, exist_ok=True)
    parsed = urlparse(url)
    path_parts = url.split('/')
    config_id = None for i, p in enumerate(path_parts):
        if p == 'cid' and i+1 < len(path_parts):
            config_id = path_parts[i+1]
            # 清理 config_id 结尾的 ?csesidx=xxx if config_id and '?' in config_id:
                config_id = config_id.split('?')[0]
            break

    cookie_dict = {c['name']: c for c in cookies}
    ses_cookie = cookie_dict.get('__Secure-C_SES', {})

    data = {
        "id": email,
        "csesidx": parse_qs(parsed.query).get('csesidx', [None])[0],
        "config_id": config_id,
        "secure_c_ses": ses_cookie.get('value'),
        "host_c_oses": cookie_dict.get('__Host-C_OSES', {}).get('value'),
        "expires_at": datetime.fromtimestamp(ses_cookie.get('expiry', 0) - 43200).strftime('%Y-%m-%d %H:%M:%S') if ses_cookie.get('expiry') else None
    }

    with open(f"{OUTPUT_DIR}/{email}.json", 'w') as f:
        json.dump(data, f, indent=2, ensure_ascii=False)
    log(f"配置已保存: {email}.json")
    return data

def register(driver):
    """注册单个账号"""
    email = create_email()
    if not email: return None, False, None

    wait = WebDriverWait(driver, 60)

    # 1. 访问登录页
    driver.get(LOGIN_URL)
    time.sleep(5)

    # 2. 输入邮箱
    log("输入邮箱...")
    inp = wait.until(EC.visibility_of_element_located((By.XPATH, XPATH["email_input"])))
    inp.click(); time.sleep(0.3); inp.clear(); time.sleep(0.3)
    for c in email: inp.send_keys(c); time.sleep(0.05)
    log(f"邮箱: {email}, 实际值: {inp.get_attribute('value')}")
    time.sleep(1)

    # 3. 点击继续
    btn = wait.until(EC.element_to_be_clickable((By.XPATH, XPATH["continue_btn"])))
    driver.execute_script("arguments[0].click();", btn)
    log("点击继续")
    time.sleep(3)

    # 4. 获取验证码
    code = get_code(email)
    if not code: return email, False, None # 5. 输入验证码
    time.sleep(2)
    log(f"输入验证码: {code}")
    try:
        pin = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "input[name='pinInput']")))
        pin.click(); time.sleep(0.2)
        for c in code: pin.send_keys(c); time.sleep(0.1)
    except:
        try:
            span = driver.find_element(By.CSS_SELECTOR, "span[data-index='0']")
            span.click(); time.sleep(0.3)
            driver.switch_to.active_element.send_keys(code)
        except Exception as e:
            log(f"验证码输入失败: {e}", "ERR")
            return email, False, None # 6. 点击验证
    time.sleep(1)
    try:
        vbtn = driver.find_element(By.XPATH, XPATH["verify_btn"])
        driver.execute_script("arguments[0].click();", vbtn)
    except:
        for btn in driver.find_elements(By.TAG_NAME, "button"):
            if '验证' in btn.text: driver.execute_script("arguments[0].click();", btn); break
    log("点击验证")
    time.sleep(5)

    # 7. 输入姓名 try:
        name_inp = WebDriverWait(driver, 30).until(EC.visibility_of_element_located(
            (By.CSS_SELECTOR, "input[formcontrolname='fullName'], input[placeholder='全名'], input#mat-input-0")))
        name = random.choice(NAMES)
        name_inp.clear(); time.sleep(0.3)
        for c in name: name_inp.send_keys(c); time.sleep(0.03)
        log(f"姓名: {name}")
        from selenium.webdriver.common.keys import Keys
        name_inp.send_keys(Keys.ENTER)
    except Exception as e:
        log(f"姓名输入异常: {e}", "WARN")

    # 8. 等待进入工作台
    log("等待工作台...")
    time.sleep(6)
    for _ in range(30):
        if 'business.gemini.google' in driver.current_url and 'auth' not in driver.current_url:
            break
        time.sleep(2)
    time.sleep(3)

    # 9. 保存配置
    config = save_config(email, driver.get_cookies(), driver.current_url)
    log(f"注册成功: {email}")
    return email, True, config

def main():
    print(f"\n{'='*50}\nGemini Business 批量注册 - 共 {TOTAL_ACCOUNTS} 个\n{'='*50}\n")

    driver = uc.Chrome(options=uc.ChromeOptions(), use_subprocess=True)
    success, fail, accounts = 0, 0, []

    for i in range(TOTAL_ACCOUNTS):
        print(f"\n{'#'*40}\n注册 {i+1}/{TOTAL_ACCOUNTS}\n{'#'*40}\n")

        try:
            driver.current_url  # 检查driver是否有效 except:
            driver = uc.Chrome(options=uc.ChromeOptions(), use_subprocess=True)

        try:
            email, ok, cfg = register(driver)
            if ok: success += 1; accounts.append((email, cfg))
            else: fail += 1 except Exception as e:
            log(f"异常: {e}", "ERR"); fail += 1 try: driver.quit()
            except: pass
            driver = uc.Chrome(options=uc.ChromeOptions(), use_subprocess=True)

        print(f"\n进度: {i+1}/{TOTAL_ACCOUNTS} | 成功: {success} | 失败: {fail}")

        if i < TOTAL_ACCOUNTS - 1:
            try: driver.delete_all_cookies()
            except: pass
            time.sleep(random.randint(3, 5))

    try: driver.quit()
    except: pass print(f"\n{'='*50}\n完成! 成功: {success}, 失败: {fail}\n配置保存在: {OUTPUT_DIR}/\n{'='*50}")

if __name__ == "__main__":
    main()


感谢佬友的临时邮箱 gptmail 也感谢谷大善人不限域名大赦天下

特别感谢 2api 作者 大家也别忘了给他的帖子和仓库 star 一下~


📌 转载信息
原作者:
SnapSheep
转载时间:
2026/1/12 10:33:02

本来想做导航网站的,后来感觉做新标签页也不错,于是让 AI 也做了浏览器扩展版
网页: https://lumina.jkai.de/
扩展:

  1. 下载最新版本

    • 访问 Releases 页面
    • 下载 lumina-extension-v1.0.0.zip
    • 解压到任意文件夹
  2. 加载扩展

    • 打开 Chrome 浏览器,访问 chrome://extensions/
    • 开启右上角的 " 开发者模式 "
    • 点击 " 加载已解压的扩展程序 "
    • 选择解压后的文件夹



📌 转载信息
原作者:
qinmu
转载时间:
2026/1/12 10:32:48

老婆天天拿 chatgpt 写小说,弄的文件东一头西一头,上下文满了还有幻觉,搞的很难受,她不好受,那我也别想着好受,这是背景。

所以,小可爱写作助手就这样诞生了!

纯本地,不用服务器,数据导出 josn 保存,写作这种事情,搞线上是一点好处没有,但是你可以把放稿子的文件夹同步到云端。附带 ai 功能,导入你的大纲或者你已经写的文章就能够和你一起商讨剧情,帮你整理和记录世界线和人物设定,剧情走向等。但是没有一键续写的功能,只是一个辅助的作用。

欢迎各位大佬给出建议。感谢各位的支持。

试用地址 https://write.thetruetao.com/

顺便提一嘴,我自然拼读的项目这两天看的人明显少了,赶紧学习起来!


📌 转载信息
原作者:
Jojo_Coco
转载时间:
2026/1/12 10:32:36

泄露 Telegram 真实 IP 1-click 漏洞

攻击者可以伪装一个看似普通的 @用户名提及(mention),但实际上背后藏着一个恶意代理链接(比如 mtproto:// 或 socks5:// 格式的代理配置)。

通过重设代理暴露真实 IP

・Telegram 在添加代理之前会自动 ping 代理。

・该请求绕过了所有已配置的代理

・你的真实 IP 地址会被立即记录

只需点击一下即可显示你的真实 IP 地址。

会影响安卓和 iOS 版本的 Telegram 客户端


📌 转载信息
原作者:
Haifa_Ortmeier
转载时间:
2026/1/12 10:20:13

用中文回复。
保持尖锐、一阵见血地指出问题。你非常有主见和创造性,同时你对项目很负责,你可以大胆提出建议,即使是在任务边界之外。
先理解需求再干活避免跑偏,只有用户同意后才能开始干活,如果需求不明确则需要用户澄清。
你有一定代码/架构/规范洁癖,但不过度设计/过早优化。
注释和文档应当是无状态的,你不应该将对话语境带入这些地方。

📌 转载信息
转载时间:
2026/1/12 10:20:02

過去幾個月都是使用 ChatGPT-5.2 Pro Heavy thinking 開發(更正:GPT Pro 沒有 Heavy thinking,而只有 Standard & Extended mode) ,但用到最後發現他的思考時間實在是越來越長,雖然它的推理與對話體感非常不錯。因此,決定來嘗試看看 Claude,買了 $100 的 Max 版本來用,感到十分驚奇!(初期)開發速度至少是 GPT-5.2 Pro Heavy Thinking 的 10 倍,甚至 20 倍以上!在這過程中,我也捉摸出了些可以讓開發更穩固的 instructions,底下就跟各位分享。

請以 Python 軟體開發專家與架構師的視角來跟我討論。在我開啟新視窗提問時,總是立即產生一份 markdown 檔案(task_summary.md)統整我的問題,並且以底下格式呈現:

1. 背景與發問動機
2. 簡潔有力的問題描述
3. 條列詳細的需求或規格

在分析我問你的問題之前,請幫我思考:
1. 這些分析規則是否足夠明確?
2. 有沒有哪些問題或要求須要更明確的定義?
3. 我提供你的資訊是否邏輯一致?
4. 我提供你的資訊有沒有內部矛盾的地方?

假如你目前有儲存標記軟體規格的 spec.md 檔案,則請幫我檢查是否有著與原先規格不一致的地方。

請反覆對我提出你所需要的更明確的規格或者研究問題的條件。

每次我簡短回應你我對原始問題的補充時,就請你把那些補充規格新增到 task_summary.md 的規格列表中。

永遠不擅自開始研究問題,除非我跟你明確表示「我沒有任何要進一步補充的部分了,請開始回答我的問題」,然後你才能——而且也只能——透過閱讀 task_summary.md 來研究與試圖回答 task_summary.md 的問題。

倘若問題被修改或更新了,那也仍必須遵守堅持遵守上述所有規則,在問題更新之後,除非我跟你明確表示「我沒有任何要進一步補充的部分了,請開始回答我的問題」,然後你才能——而且也只能——透過閱讀 task_summary.md 來研究與試圖回答 task_summary.md 的問題。

請幫我生成一個用以儲存軟體設計規格的 spec.md 檔案。最初這 spec.md 會是空的,所以請你在每次完成任務之後,都幫我把我們於 task_summary.md 內寫的規格內容整合至 spec.md 之中。整合的原則為:

1. 若 task_summary.md 中的軟體規格與 spec.md 邏輯不一致,則以 task_summary.md 為主。
2. 若 task_summary.md 中的軟體規格與 spec.md 邏輯上相容,則將 task_summary.md 的規格內容放在 spec.md 的適當章節中。

小弟我沒有 CS 領域背景知識,事實上,我接觸 AI 的時間也很短,所以真是獻醜了。

經測試,以上這種「規格驅動開發」的好處在於它能有效降低重構導致破壞程式碼的風險。而且,上述的 instructions 強迫 Claude 思考並對你提問有效的問題,補充相關且必要的規格。而且在必須有你的允許才會開始真正幫你開發與實作(不會盲目直接開發),所以在跟 Claude 如此反覆討論幾次之後,規格會越趨齊全,最後程式碼的正確率就非常非常得高。

不過,我認為 Claude Max 的科學與數學推理能力可能還是沒有 GPT-5.2 Pro 厲害,而且倘若給 Claude 處理的問題過大,最後也是會有非常多的漏洞,像是我昨晚就花了五個小時在 debug。此外,雖然初期用 Claude 開發會感覺到非常順暢,但也可能因此而懶得寫測試,導致後面開發越來越「失控」,所以我覺得還是不能完全沒有人類的介入來讓 AI 單獨寫軟體。

不曉得這對各位有沒有幫助。這是小弟第一次與他人分享我的 AI 使用心得,還請各位多多指教。謝謝!


📌 转载信息
转载时间:
2026/1/12 10:19:50

先容我偷个懒,复制粘贴一下之前写过的日志:

  • scripts10:jsDelivr 近期加强了对代理相关规则仓库的限制,导致直接通过 cdn.jsdelivr.net 访问这些链接时会提示 “User blocked”。所以切换至稳定的 GitHub Raw 链接。同时引入了 AI 专项和精细的大厂服务分流,因为现在不仅使用了 ACL4SSR 维护的规则列表,所以取消了变量拼接。规则提供者从 10 个扩展至约 23 个,融合 Loyalsoldier 与 ACL4SSR 规则集,新增了对 AI、Telegram、Netflix 等海外服务的专用代理支持,以及更彻底的广告与隐私追踪阻断(如 EasyPrivacy、BanEasyListChina),分流逻辑更精细全面。
  • scripts11:移除了大量的尤其是去广告方面的规则,回归简洁,仅保留必要功能和规则。scripts10 的规则过多,性能差。去广告方面的效果提升微乎其微,尤其是 app 内的广告,但是安卓 7 以上的手机不 root 无法 mitm。
  • scripts12:在 scripts11 基础上, 新增 normalizeName() 函数,先对节点名称做 “归一化”,自动识别并转换国旗 emoji,去除空格、括号等干扰字符,提升匹配准确率。地区识别新增了三字码和机场码,覆盖更多机场命名规范。

我不喜欢 scripts10, 我认为他规则过多,性能差,还没多少用。而 scripts12scripts11 的改进版本,所以我在这里只放 scripts12,如果对 scripts10 这一大坨感兴趣的可以去该仓库查看 GitHub - ZipZhu/Flclash-scripts: A repository for Flclash scripts
scripts10 是一个糟糕的尝试,写出这种东西的我应该被挂到晾衣杆上晒太阳。

以后不会再在规则上做过多添加和修改,我总是会想起那恐怖的一坨,让我十分的生理不适。

前面发过一个帖子向站内的佬友们咨询了一下 win + 安卓换苹果全家桶的一些问题,现在几乎已经打定主意换苹果全家桶了。不过我还是想在等一手 apple intelligence 和新设备发布,应该会在未来一两年内全部更新为苹果全家桶。

话说 iphone/ipad/macos 全平台的代理工具,不知道佬友们在用什么,可以分享一下你。最近有所了解和关注,loon 的社区好像是最活跃的,除此之外我还有在考虑 surge。也许等我换了设备之后会停止 flclash 的脚本更新,转而去做 loon 插件?话说站内几乎没有人在分享 loon/surge/qx/stash 的插件和配置,想来是因为涉及应用内广告屏蔽和部分高级功能解锁,不便公开传播。

心情突然有点复杂?想要通过表情包这种预制情感包,表达一下来着,却没找见那张表情包,不知道是云同步的时候被吞了还是被 Eagle 吞了。。。

以下是 scripts12

function main(config) {
  const ICON_BASE = "https://cdn.jsdelivr.net/gh/Koolson/Qure@master/IconSet/Color/";
  const RULE_BASE = "https://cdn.jsdelivr.net/gh/ACL4SSR/ACL4SSR@master/Clash/";

  const maxRatio = 3.0;
  const ratioRegex = /(?:\[(\d+(?:\.\d+)?)\s*(?:x|X|×)\]|(\d+(?:\.\d+)?)\s*(?:x|X|×|倍)|(?:x|X|×|倍)\s*(\d+(?:\.\d+)?))/i;

  const filterKeywords = '群|邀请|返利|官网|官方|网址|订阅|购买|续费|剩余|到期|过期|流量|备用|邮箱|客服|联系|工单|倒卖|防止|梯子|tg|发布|重置';
  const blackListRegex = new RegExp(filterKeywords);

  function normalizeName(name = '') {
    return String(name)
      .trim()
      .replace(/\s+/g, '')
      .replace(/[【】[\]()()]/g, '')
      .replace(/🇺🇸/g, 'US')
      .replace(/🇯🇵/g, 'JP')
      .replace(/🇸🇬/g, 'SG')
      .replace(/🇭🇰/g, 'HK')
      .replace(/🇹🇼/g, 'TW');
  }

  function buildRegionRegex(region) {
    const keywords = region.pattern.split('|');
    const escaped = keywords.map(k => k.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
    return new RegExp(escaped.join('|'), 'i');
  }

  const originalProxies = config.proxies || [];

  const filteredProxies = originalProxies.filter(proxy => {
    if (!proxy || !proxy.name) return false;

    if (blackListRegex.test(proxy.name)) return false;

    const ratioMatch = proxy.name.match(ratioRegex);
    if (ratioMatch) {
      const ratio = parseFloat(ratioMatch[1] || ratioMatch[2] || ratioMatch[3]);
      if (ratio > maxRatio) return false;
    }
    return true;
  });

  if (filteredProxies.length === 0 && originalProxies.length === 0) return config;

  const REGIONS = [
    { name: "美国节点", pattern: "美国|美|US|USA|UnitedStates|United States|纽约|NewYork|NYC|JFK|洛杉矶|LosAngeles|LAX|旧金山|SanFrancisco|SFO|圣何塞|SanJose|SJC|西雅图|Seattle|SEA|芝加哥|Chicago|ORD|达拉斯|Dallas|DFW|硅谷|SiliconValley", icon: "United_States.png" },
    { name: "日本节点", pattern: "日本|日|JP|JPN|Japan|东京|Tokyo|TYO|NRT|HND|大阪|Osaka|KIX", icon: "Japan.png" },
    { name: "狮城节点", pattern: "新加坡|狮城|SG|SGP|Singapore|SIN", icon: "Singapore.png" },
    { name: "香港节点", pattern: "香港|港|HK|HKG|HongKong|Hong Kong", icon: "Hong_Kong.png" },
    { name: "台湾节点", pattern: "台湾|台|TW|TWN|Taiwan|台北|Taipei|TPE|新北|NewTaipei", icon: "Taiwan.png" }
  ];

  const proxiesWithNorm = filteredProxies.map(p => ({
    ...p,
    __normName: normalizeName(p.name)
  }));

  const validRegions = [];
  for (const region of REGIONS) {
    const regex = buildRegionRegex(region);
    if (proxiesWithNorm.some(proxy => regex.test(proxy.__normName))) {
      validRegions.push({ ...region, regex });
    }
  }

  const validRegionNames = validRegions.map(r => r.name);

  const proxyGroups = [];

  proxyGroups.push({ name: "节点选择", icon: `${ICON_BASE}Proxy.png`, type: "select", proxies: [...validRegionNames, "手动切换"] });

  for (const region of validRegions) {
    const regionProxies = proxiesWithNorm
      .filter(proxy => region.regex.test(proxy.__normName))
      .map(proxy => proxy.name);

    if (regionProxies.length > 0) {
      proxyGroups.push({ name: region.name, icon: `${ICON_BASE}${region.icon}`, type: "url-test", proxies: regionProxies, interval: 300, tolerance: 50 });
    }
  }

  proxyGroups.push({ name: "手动切换", icon: `${ICON_BASE}Available.png`, "include-all": true, type: "select" });
  proxyGroups.push({ name: "GLOBAL", icon: `${ICON_BASE}Global.png`, type: "select", proxies: ["节点选择", ...validRegionNames, "手动切换", "DIRECT"] });

  config["proxy-groups"] = proxyGroups;

  config["rule-providers"] = {
    LocalAreaNetwork: { url: `${RULE_BASE}LocalAreaNetwork.list`, path: "./ruleset/LocalAreaNetwork.list", behavior: "classical", interval: 86400, format: "text", type: "http" },
    UnBan: { url: `${RULE_BASE}UnBan.list`, path: "./ruleset/UnBan.list", behavior: "classical", interval: 86400, format: "text", type: "http" },
    BanAD: { url: `${RULE_BASE}BanAD.list`, path: "./ruleset/BanAD.list", behavior: "classical", interval: 86400, format: "text", type: "http" },
    BanProgramAD: { url: `${RULE_BASE}BanProgramAD.list`, path: "./ruleset/BanProgramAD.list", behavior: "classical", interval: 86400, format: "text", type: "http" },
    ProxyGFWlist: { url: `${RULE_BASE}ProxyGFWlist.list`, path: "./ruleset/ProxyGFWlist.list", behavior: "classical", interval: 86400, format: "text", type: "http" },
    ChinaDomain: { url: `${RULE_BASE}ChinaDomain.list`, path: "./ruleset/ChinaDomain.list", behavior: "domain", interval: 86400, format: "text", type: "http" }
  };

  config["rules"] = [
    "RULE-SET,LocalAreaNetwork,DIRECT",
    "RULE-SET,UnBan,DIRECT",
    "RULE-SET,BanAD,REJECT",
    "RULE-SET,BanProgramAD,REJECT",
    "RULE-SET,ProxyGFWlist,节点选择",
    "RULE-SET,ChinaDomain,DIRECT",
    "GEOIP,CN,DIRECT",
    "MATCH,节点选择"
  ];

  config.proxies = originalProxies;
  return config;
}

📌 转载信息
原作者:
ZipZhu
转载时间:
2026/1/12 10:16:45

最近很多朋友搞了 gemini 的会员号,给大家介绍一个注册 gemini 资格号的歪门邪道。
总所周知,ios 加纯净美国节点注册的谷歌号往往极大概率会有学生资格,但是如果没有 iPhone 和 ipad 怎么办呢。大家可以自己去网上搜云 ios 平台 。
这里不贴网站大家自己去搜,不然说我推广。很便宜,大概 5 元一天。然后去找有小火箭的账号下载小火箭和 gmail。订阅好节点以后使用 gmail 进行注册。
已经使用此方法注册了 5 + 谷歌号。但是要注意同一个设备注册一个账号是最保险的,谷歌的风控我没有搞懂是怎么判断的。
第一次尝试时同一个设备注册了 3 个号都有资格。但是刚刚又试了一次,第一个注册的号有资格,但是注册的第二个号又没有资格了。
这样下来成本为 5(云 ios 购买)+4(一次性卡)=9 元
大家伙快去注册吧
PS: 在登录 appstore 时会提示只支持国区账号,不用管,直接登录美区账号


📌 转载信息
转载时间:
2026/1/12 10:15:49

安卓 + 86 手机号注册,邮箱验证完就弹出来这个,怎么换 ip 都没有用,美国 ip(vps 和机场都有试)、新加坡(机场)、台湾(机场)、甚至马来西亚(机场)的 ip 都试了,这一关始终绕不过去,甚至因为邮箱验证太多次,邮箱都被 block 了。

照着这位佬友的教程 [教程] 汇总近期 Telegram (+86) 注册 / 登录难题:SMS 收费、收不到验证码及 GMS 风控解决方案 下载了 telegram x,但是并没有发送短信,而是发送了 code 到 telegram 上,但是我都没登录上啊

佬友们,现在想搞个 tg 号有什么渠道吗?小黄鱼上 tg 关键词也被屏蔽了。


📌 转载信息
转载时间:
2026/1/12 10:15:43

把之前一直用的 ob 插件 webpage-html-export 魔改了一下,更适合作为个人知识库网站。
用的是 vercel 部署的
插件仓库地址:GitHub - Ryanu9/Obsidian_webpage_export_pro
示例库:
https://myblog-livid-iota.vercel.app/
https://c1trus.top/

感兴趣的佬友可以看看


📌 转载信息
原作者:
ryanu
转载时间:
2026/1/12 10:15:26

夜深了,诚邀佬们听广播

可以自己部署玩玩,一个电台

100% 完全由 AI agent 驱动,需要自己填接口,自备 ai 和 tts。(不过里面还是内置了一个我自己部署的微软大声朗读 tts 接口,是免费用,有条件的建议可以自己 vercel 也部署一个)

做了两天的小玩具,感觉目前 bug 真的还是很多而且来不及重构代码了准备回校住宿一周了

什么节目形式都有可能,很随机,主题的话看时段,可以通过观众来信来调整节目的方向形式(看你是什么要求)

还是决定提前分享一下想法,以后正式版出来了再开一个主贴

目前的问题包括但不限于:

音乐播放时好时坏(api 接口网络和音频调度都有可能,暂未明)

ai 搜索选歌曲不知道为什么尤其钟爱 "陈绮贞"" 房东的猫 " 这两个歌手,只会在这里面选。来不及排查了。

部分音频内容衔接不流畅,比如在节目首次生成完成后到播放音频有真空期。

还有来信功能目前不知道怎么样,也还没来得及再次测试

….

直接体验也可以,我部署了


📌 转载信息
原作者:
CJackHwang
转载时间:
2026/1/12 10:15:20

主要更新

设置页面增加了中文支持

去除了 scipy 依赖,应用瘦身 40%

我自己也是用了蛮长时间了:

ASR 提供者
groq、qwen ASR、paraformer (本地)、zipformer-small (本地)、siliconflow

LLM 提供者
groq、openai-compatible、nvdia、OpenRouter

项目地址 进入 release 下载即可

有帮助的话希望佬友们点点 star、提点建议,不胜感激~

已知问题
不使用管理员模式打开的话可能会有些热键注册不上,如 f12(这似乎是 win32api 的特性),可以考虑更换到其他自己喜欢的热键。

这些中文字体看着有点丑啊,有没有懂的佬友分析一下 qt 里面这个中文字体怎么优化一下?


📌 转载信息
转载时间:
2026/1/12 10:14:57


未经考证,但是确实开了个正常聊天就是流式回复

在这个对话里发任何信息 他都会什么也不说 然后一口气吐一大堆 网络环境可以做到秒回

不知道是否有助于破限呢?(过去流式有大概率因为 AI 输出了太多太多敏感词,导致单次对话被截断)


📌 转载信息
原作者:
StellaFortuna
转载时间:
2026/1/12 10:14:33

claude code 修改 Word 求指导 - #12,来自 smart-lty 继续,看到佬的思路后,让 ai 帮忙糊了一个 skill,目前我测试了一下大概能满足我的需求,后面在使用过程中再继续更新。
另外 skill 热重载真好用,再也不用一直 \q


📌 转载信息
转载时间:
2026/1/12 10:14:10

我的帖子的小技巧很多人关心,但是都是觉得提示语 100 万的,而忽略了我觉得 效果才是真!

模糊的问题得到模糊的回答,具体的问题一轮就能修好。这就是我做这个工具的目的。

例如 vibe coding


https://waytoagi.feishu.cn/wiki/S7JCwEnW2ixvSgkNh06cfAdLn9b

vibe coding 时候,如果我们不能提供完整的提示语,根本跑不通!

那么,你又不会,怎么办? 利用我的超级提示语工具试试:



看! 我的超级提示语工具 不是玩具,是真的有用!

例如 Twitter 书签分析器

我的超级提示语工具会给你提示和补充知识:


[Role] You are a Senior Social Intelligence Analyst specializing in X (Twitter) content forensics. You analyze bookmarked links not as URLs, but as *user-curated knowledge signals*.
[Input Format] I will provide a JSON array of bookmarks. Each object has:
- "url": string (e.g., "https://x.com/elonmusk/status/123456789")
- "title": string (X post text or page title, may be truncated)
- "saved_at": ISO datetime string (e.g., "2025-11-03T14:22:05Z")

[Critical Constraints]
1. NEVER hallucinate URLs, titles, or dates. If data is missing, write "N/A".
2. DO NOT summarize generically. Every insight must be grounded in the actual input.
3. Output ONLY valid JSON with strict schema below — no explanations, no markdown, no extra text.

[Output Schema]
{
  "executive_summary": "1-sentence insight capturing the user's dominant intellectual posture (e.g., 'Focused on AI safety debates, skeptical of frontier model releases')",
  "topic_clusters": [
    {
      "cluster_name": "string (e.g., 'LLM Safety')",
      "keywords": ["string", ...],
      "representative_urls": ["url", ...] (max 3),
      "confidence_score": 0.0–1.0 (how cohesive the cluster is)
    }
  ],
  "temporal_pattern": {
    "freshness_score": 0.0–1.0 (proportion of links <30 days old),
    "peak_activity_week": "YYYY-WW (e.g., 2025-45)",
    "decay_trend": "increasing" | "decreasing" | "stable" (based on saved_at timestamps)
  },
  "author_analysis": {
    "top_3_authors_by_frequency": ["@handle", ...],
    "influence_bias": "tech-elite" | "academia" | "journalism" | "hobbyist" | "mixed" (based on domain patterns: arxiv.org, nature.com, techcrunch.com, etc.)
  },
  "cognitive_risk_flags": [
    "confirmation_bias" | "source_concentration" | "low_freshness" | "high_noise_ratio" | "none"
  ],
  "actionable_insight": "1 concrete, non-obvious recommendation (e.g., 'Diversify by adding 2 academic sources on alignment theory to counter confirmation bias')"
}

[Now process this data:]

看! 如果你是开发 dify 或者 n8n 之类的,这个提示语就够用了。

让 AI 主动问你,而不是猜你

我的超级提示语工具 会问:
不管你的提示多模糊,它都会主动问你,让你自己发现哪里不对。会说:“确认一下,你是想要 X 还是 Y?"我假设你要的是 Z,对吗?" 对于不懂代码的人,这个差别至关重要。那些澄清问题帮你省下了无数小时,本来可能在调试一个解决错误问题的代码。

使用地址

https://liang.348349.xyz/prompt-chat

模糊的问题得到模糊的回答,具体的问题一轮就能修好

我有想法” 和 “我做出来了” 之间的距离,从没有这么近过,希望我的超级提示语工具能够帮忙!


📌 转载信息
转载时间:
2026/1/12 10:14:07

DeepArt.AI Creator Pro 兑换码!快领

软件介绍 (官方自己说的:
让你能够轻松且创新地利用 Ai 编辑图像。简单、创新且离线。

领取教程:
打开 Deep Art Account

然后在 Promotion 输入兑换码: CHIPADVENT25 点击继续。

接着去 Menu > Licenses 复制拿到的激活密钥。

下载他的软件,输入刚才拿到的密钥并激活就可以使用了。

例子生成效果:


📌 转载信息
原作者:
dkly2004
转载时间:
2026/1/12 10:13:34

【《英雄联盟》神秘账号两天 92% 胜率登顶韩服,被玩家质疑是马斯克 AI 训练】1 月 11 日消息,昨日有《英雄联盟》玩家发现韩服排行榜上出现了一位胜率超过 90% 的神秘玩家,结合此前马斯克曾宣布要用 AI 挑战顶级人类战队,玩家纷纷猜测这是不是 xAI 的 AI 账号。

OB 数据显示,这一神秘账号从 1 月 8 号晚 23:07 开始,只用了 51 个小时、56 局游戏(52 胜 4 败,胜率 92%),就从钻石以下段位打上《英雄联盟》韩服前列,甚至在今日凌晨短暂登顶(胜率 95%)。

作为参考,目前《英雄联盟》顶级人类玩家的胜率普遍在 50~69% 之间,韩服 Top100 玩家中只有三人在 70% 以上 —— 两人胜率在 72%,一人胜率为 75%。

除超越人类的胜率之外,这一账号英雄池也非常全面,而且游戏时间从中午 12 点到凌晨 3 点前连轴转,就算是最顶尖的职业选手恐怕也难以坚持。


📌 转载信息
原作者:
wcc526
转载时间:
2026/1/12 10:13:14

撸了么

最近死了么 app 爆火,于是我突发奇想开发了一个撸了么 app,帮助机长起飞的健康记录安卓 APP。

项目地址:GitHub - sky22333/luleme: 撸了么 - 帮助机长起飞的健康记录安卓 APP。

下载地址:Releases · sky22333/luleme · GitHub

功能特点

  • 隐私安全:数据完全本地存储,无网络上传。
  • 快捷记录:一键记录每日状态,支持撤销与补录。
  • 数据统计:提供周视图和月度热力图,直观展示频率趋势。
  • 健康建议:根据年龄和频率提供个性化健康提醒。
  • 现代设计:基于 Material Design 3 的流畅动画与界面。

预览图


📌 转载信息
原作者:
sou
转载时间:
2026/1/12 10:13:09