xiaohack's Blog - 自动化工具
type: channel
link: https://blog.xiaohack.org/tag/%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E5%85%B7/
items: 告别手动搬砖： JoyCode + i18n-mcp 实现前端项目多语言自动化
items: 蓝队：蓝队福音-静默之门
items: gemini3pro 生图无限用
items: 有没有自动管理下载目录的工具或者方法？
items: 两名高薪员工闪辞，创始人直接用 Agent 换掉大半人
items: 【开源】一键完成 Discord Quest 任务获取奖励
items: Grok 注册机插件

告别手动搬砖： JoyCode + i18n-mcp 实现前端项目多语言自动化
type: item
date: 2026-01-19T18:22:00+08:00
description: 作者：王元1. 背景与痛点：存量代码的“多语言噩梦”在前端开发中，将一个成熟的中文存量项目进行国际化多语言（i18n）改造，往往面临着以下困境：•工作量巨大： 项目包含数百个 .vue/.js/.ts 等文件，散落着成千上万个硬编码的中文字符串。•人工易错： 手动提取容易遗漏，且极其枯燥，极易产生 Copy/Paste 错误。•命名困难： 为每一个中文词条想一个语义化的英文 Key（如 homePageTitle）不仅耗时，而且难以保证团队风格统一。•维护成本高： 翻译文件（zh.ts/en.ts）的维护和代码中的替换需要同步进行，稍有不慎就会导致报错。如果按照传统的人工查找替换方式，预计需要耗费数周的人力。为了打破这一僵局，我决定利用 JoyCode 结合我开发的 i18n-mcp 工具，打造一套自动化的国际化多语言解决方案。﻿2. 解决方案：JoyCode + i18n-mcp我基于 MCP (Model Context Protocol) 开发了一个工具 i18n-mcp，通过 JoyCode 的 AI 能力来调度和执行以下三个核心步骤，实现了从“提取”到“替换”的全链路自动化。流程图以下是i18n-mcp的流程图（由JoyCode生成）﻿核心流程拆解第一步：智能提取中文与去重i18n-mcp 自动扫描所有源文件。利用正则或 AST（抽象语法树）精准识别代码中的中文字符串（包括 Template、Script 和 JSX 部分）。•全量扫描（full-project-scan工具）： 文件过多的时候，全量扫描会有问题。可以通过指定文件夹的方式，扫描该文件夹下面的文件。•增量扫描（git-change工具）：针对git变更的文件，进行扫描。精准定位变更文件，仅处理本次变更涉及的代码，大幅提升效率。•智能去重： 对提取出的文本进行去重，确保相同的中文文案（如“确认”、“取消”）只生成一个 Key，避免冗余。第二步：AI 辅助翻译与文件生成•翻译缓存： 优先查询 数据存储层 中的 Translation Cache，已翻译过的文案直接复用，显著降低 Token 消耗并加速流程。•自动化翻译： 提取的中文列表没有在缓存中或zh文件中的，被发送给 LLM，自动翻译成英文。•语义化 Key 生成： 区别于传统 Hash 值，LLM 根据代码上下文（Context）自动生成符合语义的 Key（如将“请输入密码”生成为 pleaseInputPassword），提升代码可读性。•文件落地： 自动在 lang 文件夹下生成标准的 zh.ts 和 en.ts 文件。﻿生成示例： zh.ts: { "pleaseSelect": "请选择" } en.ts: { "pleaseSelect": "Please Select" }﻿﻿第三步：一键代码替换•变更预览 (Preview)： 在实际修改前，可调用 preview-changes 工具展示即将变更的代码对比，确保修改符合预期。•AST 节点替换： 使用 extract-and-replace 工具，将源代码中的硬编码字符串精准替换为国际化方法（如 $t('pleaseSelect')）。•无损格式保持： 基于 AST 的替换策略能够完美保留原代码的缩进、换行和注释，修改后的代码无需二次 Lint 即可直接提交。﻿﻿3. 成果与收益：从“数周”到“数小时”通过引入 JoyCode + i18n-mcp 的实践，我在项目的国际化改造中取得了显著的成效：📊 定量收益维度传统人工方式JoyCode + i18n-mcp提升幅度单页面改造耗时约 10-30 分钟< 1 分钟效率提升 90%+词条遗漏率高低质量显著提升变量命名耗时需人工构思AI 秒级生成完全自动化💡 定性收益1.解放生产力： 从枯燥的“搬运工”工作中解脱出来，可以专注于业务逻辑和核心功能的开发。2.代码规范统一： AI 生成的 Key 风格高度统一（全驼峰），避免了“千人千面”的命名混乱。3.可维护性增强： 建立了自动化的语言包管理机制，后续新增词条只需运行脚本即可。﻿4. i18n-mcp开发i18n-mcp是我首次开发MCP，整体难度相对较低。对于前端部分，基于github模板进行开发，随后发布至公司NPM私服即可。核心代码主要由JoyCode的编码功能协助完成。按照上述核心流程步骤通过问答交互的方式，引导JoyCode完成核心代码的开发工作。整个i18n-mcp架构图如下所示（架构图亦由JoyCode生成）。﻿﻿MCP配置如下{ "mcpServers": { "i18n-mcp": { "autoApprove": [], "disabled": true, "timeout": 180, "command": "npx"…

告别手动搬砖： JoyCode + i18n-mcp 实现前端项目多语言自动化
type: item
date: 2026-01-19T18:13:41+08:00
description: 作者：王元1. 背景与痛点：存量代码的“多语言噩梦”在前端开发中，将一个成熟的中文存量项目进行国际化多语言（i18n）改造，往往面临着以下困境：•工作量巨大： 项目包含数百个 .vue/.js/.ts 等文件，散落着成千上万个硬编码的中文字符串。•人工易错： 手动提取容易遗漏，且极其枯燥，极易产生 Copy/Paste 错误。•命名困难： 为每一个中文词条想一个语义化的英文 Key（如 homePageTitle）不仅耗时，而且难以保证团队风格统一。•维护成本高： 翻译文件（zh.ts/en.ts）的维护和代码中的替换需要同步进行，稍有不慎就会导致报错。如果按照传统的人工查找替换方式，预计需要耗费数周的人力。为了打破这一僵局，我决定利用 JoyCode 结合我开发的 i18n-mcp 工具，打造一套自动化的国际化多语言解决方案。﻿2. 解决方案：JoyCode + i18n-mcp我基于 MCP (Model Context Protocol) 开发了一个工具 i18n-mcp，通过 JoyCode 的 AI 能力来调度和执行以下三个核心步骤，实现了从“提取”到“替换”的全链路自动化。流程图以下是i18n-mcp的流程图（由JoyCode生成）﻿核心流程拆解第一步：智能提取中文与去重i18n-mcp 自动扫描所有源文件。利用正则或 AST（抽象语法树）精准识别代码中的中文字符串（包括 Template、Script 和 JSX 部分）。•全量扫描（full-project-scan工具）： 文件过多的时候，全量扫描会有问题。可以通过指定文件夹的方式，扫描该文件夹下面的文件。•增量扫描（git-change工具）：针对git变更的文件，进行扫描。精准定位变更文件，仅处理本次变更涉及的代码，大幅提升效率。•智能去重： 对提取出的文本进行去重，确保相同的中文文案（如“确认”、“取消”）只生成一个 Key，避免冗余。第二步：AI 辅助翻译与文件生成•翻译缓存： 优先查询 数据存储层 中的 Translation Cache，已翻译过的文案直接复用，显著降低 Token 消耗并加速流程。•自动化翻译： 提取的中文列表没有在缓存中或zh文件中的，被发送给 LLM，自动翻译成英文。•语义化 Key 生成： 区别于传统 Hash 值，LLM 根据代码上下文（Context）自动生成符合语义的 Key（如将“请输入密码”生成为 pleaseInputPassword），提升代码可读性。•文件落地： 自动在 lang 文件夹下生成标准的 zh.ts 和 en.ts 文件。﻿生成示例： zh.ts: { "pleaseSelect": "请选择" } en.ts: { "pleaseSelect": "Please Select" }﻿﻿第三步：一键代码替换•变更预览 (Preview)： 在实际修改前，可调用 preview-changes 工具展示即将变更的代码对比，确保修改符合预期。•AST 节点替换： 使用 extract-and-replace 工具，将源代码中的硬编码字符串精准替换为国际化方法（如 $t('pleaseSelect')）。•无损格式保持： 基于 AST 的替换策略能够完美保留原代码的缩进、换行和注释，修改后的代码无需二次 Lint 即可直接提交。﻿﻿3. 成果与收益：从“数周”到“数小时”通过引入 JoyCode + i18n-mcp 的实践，我在项目的国际化改造中取得了显著的成效：📊 定量收益维度传统人工方式JoyCode + i18n-mcp提升幅度单页面改造耗时约 10-30 分钟< 1 分钟效率提升 90%+词条遗漏率高低质量显著提升变量命名耗时需人工构思AI 秒级生成完全自动化💡 定性收益1.解放生产力： 从枯燥的“搬运工”工作中解脱出来，可以专注于业务逻辑和核心功能的开发。2.代码规范统一： AI 生成的 Key 风格高度统一（全驼峰），避免了“千人千面”的命名混乱。3.可维护性增强： 建立了自动化的语言包管理机制，后续新增词条只需运行脚本即可。﻿4. i18n-mcp开发i18n-mcp是我首次开发MCP，整体难度相对较低。对于前端部分，基于github模板进行开发，随后发布至公司NPM私服即可。核心代码主要由JoyCode的编码功能协助完成。按照上述核心流程步骤通过问答交互的方式，引导JoyCode完成核心代码的开发工作。整个i18n-mcp架构图如下所示（架构图亦由JoyCode生成）。﻿﻿MCP配置如下{ "mcpServers": { "i18n-mcp": { "autoApprove": [], "disabled": true, "timeout": 180, "command": "npx"…

蓝队：蓝队福音-静默之门
type: item
date: 2026-01-18T13:51:09+08:00
description: 前言最近刚结束了一个HVV蓝队，比较头疼，甲方内部设备简直太多了，目前各个大厂都是这么玩儿的，本地MSS不好好适配不同厂家的产品，弹起来适配的问题最好的借口就是需要开发介入调整适配，不单单是在适配不同厂商的防火墙上扯皮还是在适配不同厂商探针上同样扯皮，有这扯皮功夫还不如直接写个工具一键封禁得了。其实就目前防守状态来讲，通过告警事件联动不同区域的防火墙这种技术手段太简单了，本地MSS在态感的基础上优化剧本再加上GPT介入研判已经基本上可以解决绝大部分的告警攻击了，可能目前唯一的问题可能就是出现在厂商态感底层告警逻辑上，目前探针获取的流量也只能获取非SSL流量，不做SSL卸载或者SSL证书解密的话一部分告警是无法获取的，另外常见的横向行为和隐藏流量也只能基于厂商设备底层逻辑或者剧本编排。这次的工具功能是封禁共享情报的ip，或者是基于不同边界的不同品牌的防火墙和WAF的封禁。下载地址：https://github.com/Am1azi3ng/BT_SuperTools功能介绍支持多种防火墙设备统一管理(H3C,QAX,SXF,山石，K01,DP等) 网防K01提供黑名单批量查询、添加、删除功能 支持 IP 规则化、过滤、清洗等功能 界面简洁，操作便捷，可以选择性的根据不同的情报源头选择不同边界的设备进行封禁 关于产品型号可支持大部分型号，除网防K01外其它产品封禁实现原理是基于添加地址到地址簿，封禁策略需手动处理工具介绍和代码逻辑配置文件配置文件存放在config/config.json中，需要提前配置json文件，负责无法使用程序。这里关于config的文件内容务必按照格式规则设置，否则无法解析。DP防火墙DP防火墙的登录方式是telnet，逻辑是通过添加ip地址进入地址簿，添加ip地址package devices import ( "BT_supertoolsV2/utils" "fmt" "strings" "time" "github.com/reiver/go-telnet" ) type DPConfig struct { Name string `json:"name"` DeviceIP string `json:"device_ip"` TelnetPort int `json:"telnet_port"` Username string `json:"username"` Password string `json:"password"` AddressGroup string `json:"address_group"` Type string `json:"type"` } func AddIPsToDP(cfg DPConfig, ips []string) string { var output strings.Builder output.WriteString(fmt.Sprintf("=== 开始配置 DP 设备 %s ===\n", cfg.DeviceIP)) // IP 规则化处理 normalizedIPs := utils.NormalizeIP(strings.Join(ips, "\n")) if normalizedIPs == "" { return "没有有效的 IP 地址！" } ipList := strings.Split(normalizedIPs, "\n") // 连接 Telnet address := fmt.Sprintf("%s:%d", cfg.DeviceIP, cfg.TelnetPort) conn, err := telnet.DialTo(address) if err != nil { return fmt.Sprintf("Telnet 连接失败: %v\n", err) } defer conn.Close() // 封装发送命令函数 send := func(cmd string) { conn.Write([]byte(cmd + "\n")) time.Sleep(500 * time.Millisecond) output.WriteString(fmt.Sprintf("[发送] %s\n", cmd)) } // 开始发送指令：用户名 -> 密码 -> conf -> 封禁命令 -> exit send(cfg.Username) send(cfg.Password) send("conf") for _, ip := range ipList { send(fmt.Sprintf("address-object %s %s/32", cfg.AddressGroup, ip)) } send("exit") output.Wr…

gemini3pro 生图无限用
type: item
date: 2026-01-14T18:06:04+08:00
description: Gemini Business 自动注册 & 2API 上传工具基于大佬们的开源成果，整合了定时注册、自动上传、过期剔除等功能。实现全自动化的账号池维护。核心逻辑优化自动维护：定时注册并直接传到 2API，自动剔除已过期账号，保留可用账号。失败重试：修改了注册机逻辑，设定申请 N 个，即使中间失败，也会一直重试直到成功申请到 N 个为止。丰俭由人：建议每 11 小时注册 2-3 个即可满足个人使用。避免对随机邮箱大佬提供不必要的压力。感谢各位大佬的无私奉献：2API：Gemini-Business2api注册机：Gemini Business 注册机邮箱服务：400 + 域名的临时邮箱环境准备请确保已安装 Python 环境，并安装以下依赖库：pip install undetected-chromedriver selenium beautifulsoup4 requests pystray pillow配置说明1. 先去 hf 部署一个 2api, 记住 API 地址和 admin_key。2. 新建并复制代码生成 py 文件，右键编辑，在顶部的配置区域填入你的 2API 信息： # 服务器 API 配置 API_HOST = "请输入你的服务器API地址" ADMIN_KEY = "请输入你的管理员密钥" # 无头模式开关 (True=后台运行无窗口, False=显示浏览器窗口) HEADLESS_MODE = True ##无头注册率会低点，但胜在静默，结合重试其实体验更好。 运行脚本在命令行中执行：py gemini_auto.py代码如下： gemini_auto.py """ Gemini Business 自动注册上传工具 """ # 标准库 import sys import json import time import random from pathlib import Path from datetime import datetime, timedelta, timezone from urllib.parse import urlparse, parse_qs from concurrent.futures import ThreadPoolExecutor # 第三方库 import requests from bs4 import BeautifulSoup import undetected_chromedriver as uc from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # ==================== 配置区域 ==================== # 服务器 API 配置 API_HOST = "请输入你的服务器API地址" ADMIN_KEY = "请输入你的管理员密钥" # 临时邮箱 API 配置 MAIL_API = "https://mail.chatgpt.org.uk" MAIL_KEY = "gpt-test" # Gemini 登录页面 LOGIN_URL = "https://auth.business.gemini.google/login?continueUrl=https:%2F%2Fbusiness.gemini.google%2F&wiffid=CAoSJDIwNTlhYzBjLTVlMmMtNGUxZS1hY2JkLThmOGY2ZDE0ODM1Mg" # 本地账号文件 ACCOUNTS_FILE = "accounts.json" # 页面元素定位 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", } # 随机姓名池 NAME…

有没有自动管理下载目录的工具或者方法？
type: item
date: 2026-01-12T18:00:52+08:00
description: 需求是： 安装包自动在一周后清理 书籍移动到书籍目录，并且去重 文档移动到文档目录 压缩包根据解压后的内容，移动到安装包或者书籍目录

两名高薪员工闪辞，创始人直接用 Agent 换掉大半人
type: item
date: 2026-01-07T20:10:37+08:00
description: 整理 | 华卫 “是时候在工作场景中突破 AI 的应用极限了。”在近期的一档播客节目中，素有 “SaaS 教父” 之称的 Jason Lemkin 表示，这意味着其销售部门将不再招聘人工员工。Lemkin 是全球最大的企业服务创业者社区 SaaStr 的创始人，曾向 B2B 初创公司投资超过 2 亿美元，如今他正领导 SaaStr 全面押注 AI Agent。 他透露，公司目前部署了 20 个 Agent，已承接原本需要 10 名销售开发代表和客户主管协作完成的工作。从全人工团队到 AI 主导的转型，SaaStr 的推进速度相当迅速。两名高薪员工闪辞，创始人直接用 Agent 换掉大半人今年 5 月时，SaaStr 仅有 1 个 Agent 投入实际运营，用于处理各类数字化任务。然而就在当月举办的 SaaStr 年度大会期间，公司两名高薪销售代表突然宣布离职。Lemkin 回忆道，他随即找到公司首席 AI 官 Amelia Lerutte，明确表示：“我们的销售部门再也不招人工了，要全力用 Agent 突破行业天花板。” 在他看来，与其花费 15 万美元年薪招聘一名最终可能离职的初级销售代表，不如启用忠诚度更高的 Agent，这笔人力成本投入完全得不偿失。据 Lerutte 透露，到 6 月时，SaaStr 已开始大幅扩充投入运营的 Agent 数量。她表示：“当时我们只和 Delphi 合作部署了 1 个非核心业务 Agent，直到 6 月初才着手将 Agent 数量从 2 个增至 20 多个。那两名员工离职后，我们审慎决定将部分（非全部）人力预算转而投入 Agent 的研发与部署。” Lemkin 称，让他做出此决定的还有一个原因是，大会筹备期间，Delphi 这个既没受过销售训练、也没做过市场推广的通用 Agent，居然独立签下了一笔 7 万美元的赞助订单。 “可能有人会觉得我这么做不够 ‘酷’，但我实在不想再招聘第 28 个注定会离职的销售了。”Lemkin 坦言道。 他还提到，如今在 SaaStr 的办公区，原先归属市场拓展团队 10 名员工的工位，都已换上了 Agent 的专属名牌，比如负责客户资质审核的 “Quali”、主打定制化服务的 “Arty”，以及对接代码协作平台 Replit 的 “Repli”。 “我坐在办公室最里面，中间的工位全是 Agent。整个办公室安静得不得了。”“Agent 生产力不输人工，但别自己动手做” 如今 SaaStr 的销售团队已发展成为一种全新的运营模式：20 个 Agent 是主力，由 1.2 名员工管理，完成之前由 10 名销售开发代表 (SDR) 和客户经理 (AE) 完成的工作。据介绍，其中0.2 个人工指的是负责公司大小事的 Lerutte，她只需要花 20% 的工作时间，就能把所有 Agent 的调度和管理都搞定。 “用最优秀的员工、最完善的工作流程去训练 Agent，它就能逐步成长为你团队里顶尖销售的‘数字分身’。”Lemkin 指出，SaaStr 正以公司内部顶尖员工为标杆训练 Agent。 抛开安全隐患不谈，Agent 的综合生产力与人工员工基本持平，但优势在于效率更高、且能像软件一样实现规模化复制。 Lemkin 表示，现在大部分公司宁愿雇一个 60、70 岁的资深工程师，也不愿意花时间培养新人。毕竟这样做效率更高，这种趋势也在蔓延到销售行业。 只要是价格谈判空间不大，而且 Agent 对产品的了解程度超过人类的场景，顶尖的 Agent 完全能独立完成签单，至少在他们的业务场景里是完全可行的。懂得管理 Agent、与 Agent 协作，而且对自家产品了如指掌的人，价值会越来越高，其他的人则会慢慢被边缘化。 “我们的目标不是用 AI 取代所有人，核心逻辑是：AI 正在接管那些没人愿意干的活，淘汰那些业绩平平、能力平庸的岗位。而顶尖的销售人才，AI 会成为他们的‘超级外挂’。” 据 Lemkin 预测，靠邮件跟进的销售开发专员、人工筛选线索的岗位，不仅效率低、客户体验也很差，明年这些岗位基本都会消失。至于负责谈单的核心销售岗位，到明年年底还能保住 70% 的工作内容，但长远来看，这个比例会降到 40% 到 50%。 此外，他表示，SaaStr 所有的市场推广类 Agent 都不是自建的，全都是直接采购的，并建议大家也别自己动手。“这些工具理论上确实能自己开发，但真的没必要。这类产品的成本不算特别高，完全值得购买。而且 AI 领域的创新迭代太快了，就算你真的自己做出来，可能几个月后就过时了。” Lemkin 坚称，2026 年，不管是哪类公司，都应该有足够的动力去探索 AI 在市场推广中的应用边界。现在所有公司的诉求都很明确：要么靠 AI 提升效率，要么靠 AI 缓…

【开源】一键完成 Discord Quest 任务获取奖励
type: item
date: 2026-01-07T19:10:41+08:00
description: 写了个小工具可以在后台完成 Discord Quests 中除了 Discord Activity 以外全部类型任务。视频任务通过发心跳包实现，游戏任务通过模拟游戏进程实现。Discord Quests 搞了这么久，奖励类别一般有游戏内道具和 Orbs 两种。前者一般是游戏厂商来推广时送的一些游戏道具，后者可以换 Discord 内的账号装饰。 github.com GitHub - Masterain98/discord-quest-helper: A Windows desktop application to complete Discord...A Windows desktop application to complete Discord Quests automatically - supports video, stream, and game quests 📌 转载信息来源： https://linux.do/t/topic/1416218转载时间： 2026/1/7 19:10:39

Grok 注册机插件
type: item
date: 2025-12-19T18:07:18+08:00
description: // ==UserScript== // @name Grok/X.ai 自动化注册机 (集成自动清理与循环版) // @namespace http://tampermonkey.net/ // @version 5.0 // @description 全自动流程：注册 -> 提取Token -> 清理Cookie -> 循环重启 // @author Bytebender // @match *://*/* // @match https://x.ai/* // @match https://www.x.ai/* // @match https://accounts.x.ai/* // @match https://grok.com/* // @match https://www.grok.com/* // @grant GM_setValue // @grant GM_getValue // @grant GM_registerMenuCommand // @grant GM_notification // @grant GM_xmlhttpRequest // @grant GM_setClipboard // @grant GM_cookie // @connect mail.chatgpt.org.uk // @connect 100.64.0.101 // @connect api.x.ai // @connect x.ai // @connect grok.com // @connect www.grok.com // @connect accounts.x.ai // ==/UserScript== (function() { 'use strict'; // ======================================================== // 1. 随机数据生成工具 // ======================================================== // 生成随机姓名 (首字母大写) function getRandomName() { const chars = 'abcdefghijklmnopqrstuvwxyz'; const len = Math.floor(Math.random() * 5) + 4; // 长度 4-8 let result = ''; for (let i = 0; i < len; i++) { result += chars.charAt(Math.floor(Math.random() * chars.length)); } return result.charAt(0).toUpperCase() + result.slice(1); } // 生成强密码 (12位，包含大小写+数字+特殊符号) function getRandomPassword() { const lower = "abcdefghijklmnopqrstuvwxyz"; const upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; const nums = "0123456789"; const symbols = "!@#$%^&*"; // 1. 确保每种字符至少有一个 let pass = ""; pass += lower[Math.floor(Math.random() * lower.length)]; pass += upper[Math.floor(Math.random() * upper.length)]; pass += nums[Math.floor(Math.random() * nums.length)]; pass += symbols[Math.floor(Math.random() * symbols.length)]; // 2. 补足剩余长度 const allChars = lower + upper + nums + symbols; for (let i = 0; i < 8; i++) { pass += allChars[Math.floor(Math.random() * allChars.length)]; } // 3. 打乱顺序 (洗牌) return pass.split('').sort(() => 0.5 - Math.random()).join(''); } // ======================================================== // 2. 任务编排配置 // =============…