拓冰建站拓冰建站
首页 / 资讯中心 / 正文

用命令行管理瓦洛兰特皮肤:Riot API与CLI工具的实战指南

玩《瓦洛兰特》这几年我最大的执念大概就是皮肤了。每次有新皮肤上线第一反应不是打开游戏客户端而是先找个能快速看到高清预览和价格的地方。但说实话游戏内商店的体验一直让我觉得不太痛快想看今天的每日商店得先启动客户端、等加载、进大厅再点进商店页面想查一下自己到底集齐了哪个系列的皮肤又得在收藏界面里翻半天。后来我实在折腾烦了索性自己动手做了个小工具也就是这个valorant-skin-cli——一个纯命令行的瓦洛兰特皮肤查询与管理工具。这玩意儿解决的核心问题特别简单不用进游戏在终端里敲一条命令就能看到今日商店、夜市折扣、皮肤库存、价格信息甚至还能做价格提醒。它不是什么大项目但实用性拉满尤其适合平时喜欢折腾命令行、又不想为了看个商店反复打开游戏的人。如果你也是一个皮肤收藏控同时又对 CLI 工具有点兴趣这篇文章应该正好对你胃口。我会从设计思路、核心原理、安装配置到实操踩坑完整地把这个工具拆开讲一遍。1. 为什么我会写一个皮肤CLI工具1.1 游戏内商店让我抓狂的几个瞬间先说最直接的痛点。瓦洛兰特每天都会刷新一次每日商店按我的经验这个刷新时间大概在固定节点具体会因为时区不同有偏移。问题在于游戏客户端本身是个不小的程序从启动到进大厅通常要一两分钟如果我只是想确认一下今天有没有刷新出心仪的皮肤付出的时间成本其实很高。更麻烦的是每日商店里的皮肤名单是个人随机的而且只展示4个。有时朋友跟我说今天商店里刷出某个终结特效特别棒的皮肤了我不得不立即开游戏去看因为谁也不知道第二天它会不会被替换掉。这就像那种过时不候的限定菜单错过就只能等下次随机轮换心里很难受。还有库存查询。我入坑一年多以后皮肤数量慢慢多起来开始想确认自己哪个系列缺哪一把。游戏内的收藏界面按武器类型分类但没有一个总的筛选逻辑想看我到底有哪几个紫色品质的近战武器这种问题操作起来特别不顺手。1.2 为什么是命令行而不是手机App也许有人会觉得奇怪这种需求用手机 App 或者小程序不更直观吗做成命令行会不会太极客了其实我一开始确实考虑过做个小程序或者 Web 页面但仔细想了几个方案后发现命令行反而有不可替代的优势。首先是轻量。只要装了 Node.js 环境一条npm install就能完成安装不用额外开服务、不用维护数据库更不用去搞一堆前端页面。其次是可脚本化。命令行工具天然适合被集成到自动化流程里我可以在服务器上跑定时任务每天凌晨自动请求一遍商店数据如果有目标皮肤就直接推送通知到手机这件事用图形界面做起来成本会高不少。再者命令行工具的输入输出都是文本天生方便对接其他系统。我可以把返回的 JSON 数据直接喂给其他脚本或者用管道接到通知工具上做进一步处理。如果说小程序解决的是方便看那 CLI 解决的是方便用后者对我的场景更有吸引力。1.3 什么人适合用这个工具那到底谁适合用valorant-skin-cli呢我总结了三类典型用户。第一类是和我一样的皮肤追踪党对每天商店刷新什么非常在意但不想频繁启动游戏的人。第二类是喜欢折腾工具的开发者哪怕不是瓦洛兰特玩家也可以拿这个项目当 CLI 开发的练手案例看看怎么设计命令、怎么对接第三方 API。第三类是有多账号管理需求的人不管是大号小号还是帮朋友代管理命令行切换账号比重新登录游戏快得多。当然工具不是万能的。它只能读取游戏服务端公开给客户端的商店和库存数据不能帮你直接买皮肤也不能改概率刷你想要的皮肤。它能做的是把信息用最快、最方便的方式呈现到你的终端里。2. 工具实现的底层逻辑2.1 数据来源和游戏客户端对话很多玩家会好奇这个工具的数据到底是从哪里来的是不是有什么非官方数据库其实不是。它直接使用了游戏本身的数据通道也就是 Riot 为游戏客户端提供的公开 API 接口。瓦洛兰特游戏客户端在运行时本地会启动一个 HTTPS 服务监听本机某个端口不同版本端口可能不一样。这个服务会携带当前登录用户的一个短时效访问凭证也就是 token。有了这个 token我们就能向 Riot 的服务器发起请求查询每日商店、夜市、库存等数据而这个过程完全不需要重新输入密码。这里有个关键点值得展开本地 API 获取的 token 有两种类型一种是访问令牌 access token另一种是 entitlement token授权令牌。前者用来标识你是谁后者用来标识你能访问什么。在请求商店接口的时候两个 token 基本都会用到。对应的接口地址也有固定规律比如查询每日商店走的是store/v2/storefront这个路径查询夜市走的是store/v1/nightmarket查询皮肤列表走的是personalization/v2/players下的 loadouts 接口。具体到某个版本的代码可能会因为游戏内容更新有一些细微变化但整体思路是不变的。2.2 两种登录方式的选择这是valorant-skin-cli在设计时最纠结的一个环节到底怎么让用户登录我实际测试过两条路线各有利弊。第一条路线是直接通过账号密码换取 token。用户用 Riot 账号密码登录工具模拟登录流程拿到 token 后保存到本地。这种方式用户体验最简单但问题是需要把账号密码交给工具处理如果工具本身没有做好安全措施很容易被有心人利用。而且 Riot 的登录验证机制较复杂还可能有二次验证纯靠账号密码硬解的方案并不稳定。第二条路线是从本地游戏客户端读取 token。只要玩家本地已经启动并登录了游戏工具就能从游戏客户端的本地 API 拿到当前玩家的 token这种方式最大的好处是不需要输入任何密码安全等级更高而且因为是从官方客户端内部拿到的凭证被误判为异常请求的概率也低得多。我最后采用的是方案二同时保留了方案一作为补充。默认情况下如果你已经启动了游戏直接运行认证命令就能完成登录如果游戏没启动工具会提示你先启动游戏再执行。这样既安全又稳定也更符合不额外保存敏感信息的安全原则。2.3 命令和模块怎么划分CLI 工具最忌讳的就是命令设计得毫无章法。我希望使用者看到命令名就能猜到作用所以整体采用了动词 对象的命名方式把功能分成了几个清晰的模块。auth负责登录认证、查看当前会话、注销daily查看每日商店刷新nightmarket查看夜市折扣商品inventory查看自己的皮肤库存bundle查询当前正在售卖的组合包price针对特定皮肤查询价格和历史信息watch定时轮询商店实现价格提醒和上新通知模块之间互不依赖每个命令都是一个独立的子程序内部逻辑清晰后续维护起来也方便。举个实际例子valorant-skin-cli daily --json就能把当日商店的数据以 JSON 格式直接输出方便用户做二次处理。2.4 安全与配置存储因为工具涉及 token 这类敏感信息存储方式我花了不少心思。在 Linux/macOS 上配置文件放在用户主目录下的.config/valorant-skin-cli/在 Windows 上则放在%APPDATA%\valorant-skin-cli。token 字段写入后会立即赋予600权限也就是只有当前用户能读写避免被其他程序偷窥。另外我做了多配置文件支持。用户可以通过环境变量VALORANT_SKIN_CLI_CONFIG指定读取某个配置也可以给每个配置起一个别名这样多账号切换就是一句命令的事。至于账号信息工具本身不会保存密码只保存 token而且 token 是有有效期的到期后需要重新从游戏客户端获取这也在一定程度上降低了长期泄露的风险。3. 从零搭建安装与登录全流程3.1 环境准备先说说前置条件。由于valorant-skin-cli是 Node.js 写的所以系统里需要先有 Node.js 环境建议装 v18 以上的版本。老版本不是说不能跑只是部分语法和依赖可能不兼容我实际在 v16 上遇到过一些异步处理的问题升到 v18 后就顺畅了。验证环境的命令很简单node -v npm -v如果你的机器上还没有 Node.js建议直接用官网的 LTS 版本安装包或者用系统自带的包管理器安装。Windows 用户装完以后记得确认一下环境变量有没有自动配好终端里能正常打印版本号就算成功。3.2 安装valorant-skin-cli安装这个工具本身的流程非常简单因为已经发布到了 npm 仓库一行命令就能搞定npm install -g valorant-skin-cli全局安装的优势是可以在任意目录直接使用valorant-skin-cli命令不需要每次都用 npx 去拉一次。安装完成后运行下面的命令验证版本valorant-skin-cli --version如果你看到类似0.x.x的版本号输出就说明装好了。遇到权限报错的话Linux/macOS 可以试试sudo npm install -g valorant-skin-cliWindows 则建议以管理员身份打开终端再执行。3.3 完成登录认证这是整个使用流程中比较关键的一步。前面说过我推荐从游戏客户端读取 token 的方式所以先启动并登录游戏确保客户端真正跑起来最好看到大厅界面再回到终端执行认证。valorant-skin-cli auth工具会自动去探测本机的游戏客户端API服务。探测成功后你会看到类似成功获取访问令牌当前玩家xxxx的输出。这个过程全程没有要求输入密码token 是从游戏客户端内部直接拿到的在安全性上比较让人放心。如果你在云端服务器上使用游戏客户端没跑起来那auth命令会给出错误提示。这种情况下需要先手动配置一个临时 token具体方式是加--token参数valorant-skin-cli auth --token 你的token不过我不太推荐在服务器上用这种方式因为 token 很容易过期。真要在服务器上长期使用的话最好还是配一个定时任务定期从本地游戏客户端同步最新 token。3.4 配置文件详解登录成功后会在配置目录里生成一个config.json我来解释下最关键的几个字段。{ region: na, currentAccount: main, accounts: { main: { accessToken: xxxx, entitlementToken: yyyy, username: 玩家名#标签 } } }region代表服务器地区这个必须填对。北美是na欧洲是eu亚太常见的有ap和kr你根据自己的账号区域调整。如果地区填错最直接的表现就是请求返回 404因为商店数据是按地区隔离的。currentAccount表示当前激活的是哪个账号配置我做了多账号支持所以这里用字符串标识。accounts下面就是各个账号具体的 token 和玩家信息。每次从游戏客户端获取新 token 后工具会自动更新这个配置文件不需要手动修改。但如果你要手动指定区域或者想给账号起个更直观的名字直接改这个文件是可以的。4. 高频操作场景实操4.1 每日商店一键查询来说说我最常用的场景。进入游戏大厅后终端执行valorant-skin-cli daily输出结果会以表格形式打印今天的4个皮肤包括皮肤名称、所属系列、品质等级、价格单位是 VP 点数。如果你想导出到文件或者给其他脚本用加上--json参数即可valorant-skin-cli daily --json daily.json这样拿到的是结构化 JSON我可以很轻松地写一段脚本判断今天是否出现了某个 ID 的皮肤如果命中就直接触发通知。有个细节我实际使用后才发现需要留意每日商店的4个皮肤不是平均分布的通常会有1到2个高品质皮肤搭配几个中低品质。如果出现某个系列两把皮肤同一天刷出来的情况购买价值会比较高遇到合适的别犹豫太久。4.2 夜市折扣一网打尽夜市是瓦洛兰特里少有的打折渠道每隔一段时间开放一次周期大概持续一到两周会随机给出6个折扣皮肤。虽然这些皮肤每个人看到的不一样但折扣区间一般有规律可循最低能到三四折左右。对应的命令是valorant-skin-cli nightmarket输出里会直接列出原价和折后价省得我在游戏里拿计算器按。用--discount-below 50这样的参数还能只显示折扣力度比较大的商品把真正值得关注的目标筛选出来。这里想提醒一个容易踩的坑夜市开启的时间有时候会和每日商店刷新时间错开如果执行命令提示夜市未开放不代表工具坏了只是当前服务器还没进入夜市周期。遇到这种情况用valorant-skin-cli status查一下当前商店状态就行。4.3 库存与收藏管理皮肤多了以后库存查询就成了高频需求。我经常用下面的命令看自己的武器皮肤valorant-skin-cli inventory --weapon vandal这条命令会把所有 Vandal 步枪皮肤按品质降序列出来。也可以换成--weapon knife查看近战武器或者通过--rarity exclusive只看某个稀有度的皮肤。这个功能的实现原理是从 loadouts 接口拿到整个账号下的装备数据然后按武器类型、皮肤 ID、品质等级进行本地过滤。因为数据量不算小首次查询可能需要一两秒但结果会做本地缓存之后再次查询就快很多了。我做这个功能的时候最大的感悟是游戏界面里展示不直观的库存清单换到终端里用表格渲染出来反而清爽得可怕。4.4 皮肤价格提醒与自动通知这是我觉得整个工具最值钱的功能。每天自己手动执行命令虽然够用但总有忘记的时候于是我在watch命令里做了个轮询模式valorant-skin-cli watch --interval 300 --target 某个皮肤ID默认情况下工具会每隔一段时间自动请求一次商店数据一旦发现目标皮肤上线就会在终端里高亮显示提醒信息。如果我把这个命令挂到 crontab 或者 systemd timer 里就能实现 7x24 小时无人值守的自动监控。再进一步我们还能把提醒信息通过 Webhook 转发到手机通知或聊天机器人。因为命令支持 JSON 输出整个流程就是工具查数据 脚本判断 通知推送三段式。我自己的服务器上就挂着这个任务每天早上 8 点消息准时到手机哪天真刷出我想要的那把刀至少不会因为错过刷新而懊恼。5. 踩坑记录与排查技巧5.1 token过期与免密续期用这类工具的玩家反馈最多的一个问题就是明明刚才还能用怎么突然提示登录失效了。这其实是正常的 token 过期机制在起作用。从游戏客户端获取的 token 有效期通常不是特别长具体时长随客户端版本可能有浮动但前一天有效、第二天失效的情况很常见。我自己的解决方案是定时在游戏启动期间执行一次valorant-skin-cli auth --refresh用这条命令从本地 API 重新拉取 token 并写入配置。因为整个流程不需要输入密码完全可以在游戏启动后自动执行一次。比较推荐的做法是把刷新命令放到游戏启动脚本里比如写一个launch.sh先启动游戏等 30 秒让客户端完成本地 API 服务初始化再自动执行刷新命令。这样每次进游戏时工具也顺手被喂了新 token。5.2 网络请求失败在实际使用中network error或者request failed这类报错大多是三个原因地区配置不对、网络环境受限、游戏客户端未运行。地区配置不对是最容易排查的。比如账号实际在eu区但你配成了na绝大多数接口都会报 404。这个问题通过修改config.json里的 region 字段就能解决。网络环境方面需要提醒一下不要在网络环境不完整的情况下强行调用接口。具体来说如果你的机器能正常登录游戏、正常打开商店页面那 CLI 的请求应该也没问题反过来如果游戏内商店都打不开那 CLI 请求失败也是正常的。这个工具本身不提供任何网络加速功能也不需要那些东西。游戏客户端未运行时所有依赖本地 API 的命令都无法工作。遇到这种情况执行前先确认游戏大厅已经加载完成。5.3 中文乱码与输出排版终端里出现乱码多半和系统编码有关。Windows 的 PowerShell 默认编码有时不是 UTF-8而工具输出的是 UTF-8 文本两者一碰撞就会出现乱码。解决办法是在执行命令前切换代码页chcp 65001Linux/macOS 的终端基本没这个问题但如果你把 JSON 输出重定向到文件再打开记得用支持 UTF-8 的编辑器查看。表格列不对齐的情况一般是因为皮肤名称太长可以用--plain参数关闭彩色渲染或者用--json输出自己格式化两种方式都能保证阅读体验。5.4 多账号老兵怎么切换很多玩家和我一样手里不止一个账号。工具支持多账号配置切换这是我觉得自己做得比较满意的功能。共享一个config.json里注册多个账号再用--account参数指定要用哪个比如valorant-skin-cli daily --account smurf如果不指定就用currentAccount指向的默认账号。切换账号时不需要重新跑一遍完整认证流程只要那个账号的 token 还有效就能直接用。token 失效的话切回那个账号所在的游戏客户端执行一次刷新即可。5.5 使用安全红线最后聊两条安全红线这也是我一直想对所有用这类工具玩家强调的。第一不要把你的 token 或配置文件分享给任何人。token 就像你账号的临时身份证有了它就能以你的身份查询商店和库存数据。虽然我设计时做了文件权限保护但如果你主动把config.json发到群里那谁来都没救了。第二不推荐使用来路不明的第三方工具更不要在任何未知网站输入你的账号密码。大家在游玩时最好以官方渠道和知名开源项目为主自己会看代码的就先扫一遍代码不会看代码的就选社区口碑好的项目。valorant-skin-cli本身是开源项目代码逻辑透明但如果你要使用其他类似工具安全审查这一关不能省。我在实际使用中发现这个工具让我养成了一个新习惯每天起床先看终端就像刷天气预报一样确认今天的每日商店。它没有改变我玩瓦洛兰特的方式但确实把查皮肤这件事从游戏里抽离了出来变成了一种更轻量的日常操作。后续我还在考虑加入更多玩法比如统计每款皮肤的上架频率、生成自己账号的收藏进度报表甚至可以和现有的一些数据网站联动。如果你也动手做类似的 CLI 工具或者给这个项目提了新的想法欢迎交流。折腾这些东西的乐趣有时候比游戏本身还大。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门