用途:帮助用户为 Telegram 机器人找到一个简短、易记且可用的用户名,满足 BotFather 的命名规则。
主要能力:接收自由文本上下文(通常是主题与受众,如“weather bot for Russian users”或“@weatherly_bot free?”);生成约 20 个候选名;在发起网络请求前先做本地规则校验;批量检查 t.me 可用性;输出按长度、可读性、可发音性等排序的短名单。
BotFather 规则:总长 5–32 字符;仅允许 a-z、A-Z、0-9、_;必须以 bot 结尾(大小写不敏感);下划线不能开头或结尾,不能连续出现 __;首字符必须是字母;部分保留词会被静默拒绝。Fragment 上的收藏用户名可跳过 bot 后缀,但需付费升级(1000+ TON),除非用户明确要求,否则不建议。
可用性判断:以 https://t.me/<username> 主按钮文本为准——“Start Bot”或“View Bot”表示已被占用,“Send Message”表示空闲。t.me 始终返回 HTTP 200,页面样板文字不反映可用性。注意“t.me 空闲”不等于“可在 BotFather 创建”,最终须在 @BotFather 用 /newbot 验证。
使用方式:技能自带 check-usernames.mjs,应使用它而非逐 URL 的 WebFetch。示例:node skills/gramio-pick-username/check-usernames.mjs --json weatherbot weatheritbot meteobot;也可从 stdin 传入列表,或用 --concurrency、--timeout 调参。脚本需 Node ≥18、Bun 或 Deno,零依赖,输出 JSON 数组,verdict 可为 free、taken、invalid、rate_limited、error、unknown。
限制:存在速率限制,遇到 429 应降低并发并等待重试;error 可提高超时重试一次,仍失败则标记为需人工确认;unknown 需手动检查页面。不要依据样板文字或 HTTP 状态码判断可用性,不要跳过 BotFather 最终验证,不要建议含连续下划线、结尾下划线或数字开头的名字。用户选定后,提醒将 @username 与 BotFather 返回的 token 写入 .env 的 BOT_TOKEN=...。