Skip to content

Repository files navigation

Sequ

Warning

说明:本项目的登录实现、封包处理、查询组合、命令字典整理版本和相关工程组织来源于 saixiaoxi,基于原python版本重写为 TypeScript,后续更新中增加了其他功能,对oldml的付出表示感谢。

Sequ (seer-query | 赛蛆)一个可扩展的赛尔号数据查询服务。通过 TCP 长连接与游戏服务器通信,对外暴露基于 Hono 的 HTTP API,支持查询米米号信息、在线状态、战队信息、巅峰排行、投票排行等数据,类插件机制,具有良好的扩展性。

本项目为赛尔号信息聚合页的衍生子项目

目录

功能特性

  • 纯协议层实现,直接构建和解析游戏服务器的原始封包
  • 自动心跳保活,自动重连
  • 重连前检测维护公告,维护期间暂停重试
  • 重连失败 / 重连终止支持飞书 Webhook 告警

技术栈

类别选型
运行时Node.js 22+
语言TypeScript 6.x(ESM, module: NodeNext
包管理器pnpm 10+
HTTP 框架Hono 4.x

快速开始

  1. 安装依赖
pnpm install
  1. 准备环境变量

macOS / Linux:

cp .env.example .env

Windows PowerShell:

Copy-Item .env.example .env
  1. 编辑 .env,填写你的米米号和密码(SERVICE_ACCOUNT_IDSERVICE_ACCOUNT_PASSWORD

  2. 启动开发服务器

pnpm dev

服务启动后 HTTP 服务器默认监听 http://localhost:3000

配置说明

项目加载环境文件的优先级:

  • Windows 本地开发:若工作目录下存在 .env.development,会加载它
  • 随后统一加载 .env(后加载的 .env 会覆盖 .env.development 中同名变量)

⚠ 所有 .env* 文件均已加入 .gitignore,切勿将真实账号密码提交到仓库。

环境变量一览

变量名说明默认值必填
GAME_SERVER_HOST游戏服务器地址175.24.235.221
GAME_SERVER_PORT游戏服务器端口1225
SERVICE_ACCOUNT_ID登录米米号0
SERVICE_ACCOUNT_PASSWORD登录密码""
PORTHTTP 服务端口3000
LOG_CALLBACKS是否打印封包回调日志true
LOG_FULL_PACKET是否打印完整封包十六进制false
IGNORED_CMD_IDS日志屏蔽的命令 ID(| 分隔)8002|3452|2004|2001|41228|1002|2002
FEISHU_WEBHOOK_URL飞书机器人 Webhook 地址""
FEISHU_WEBHOOK_SECRET飞书机器人签名密钥""

未配置 SERVICE_ACCOUNT_IDSERVICE_ACCOUNT_PASSWORD 时,程序会打印警告但仍会启动。

运行命令

pnpm dev # 开发模式(tsx 直接运行 TS,无需编译)
pnpm build # TypeScript 编译到 dist/
pnpm start # 编译后启动(等价于 pnpm build && node dist/index.js)
pnpm lint # oxlint 检查
pnpm lint:fix # oxlint 自动修复
pnpm format # Prettier 格式化(含 import 排序)

HTTP API

所有接口挂载在 /api 路径下。统一响应格式:

{
"success": true,
"message": "获取成功",
"code": 200,
"data": {}
}

1) GET /api/getUserOnlineStatus

查询米米号昵称和在线状态。

参数类型必填说明
accountnumber米米号,范围 50000 ~ 2000000000

成功示例:

{
"success": true,
"message": "数据返回成功",
"code": 200,
"data": {
"account": "12345678",
"nickName": "玩家昵称",
"online": true,
"server": "3"
}
}

2) GET /api/getUserInfo

查询用户详细信息(含多段原始十六进制数据)。

参数类型必填说明
accountnumber米米号,范围 50000 ~ 2000000000

成功示例:

{
"success": true,
"message": "数据返回成功",
"code": 200,
"status": 1,
"data": {
"account": "12345678",
"nickName": "玩家昵称",
"online": false,
"hexDataMore": "...",
"hexDataSimple": "...",
"hexDatapart1": "...",
"hexDatapart2": "...",
"hexDataPeak": "..."
}
}

hex 字段说明:

字段来源
hexDataMorecmd 2052 用户基础信息
hexDataSimplecmd 2051 简版信息
hexDatapart1cmd 41298 param=1
hexDatapart2cmd 41298 param=5
hexDataPeak循环请求 cmd 40002 拼接结果

3) GET /api/getTeamInfo

查询战队信息。

参数类型必填说明
teamIdnumber战队 ID(大于 0)

成功示例:

{
"success": true,
"message": "获取成功",
"code": 200,
"data": {
"teamId": "1001",
"hexDataTeam": "..."
}
}

4) GET /api/getVoteInfo

查询巅峰投票排行。

参数类型必填说明
voteDatenumber投票日期(例如 20210526)
voteTypenumber0 限制级,1 准限制级,默认 0
startIdxnumber起始下标,默认 0
endIdxnumber结束下标,默认 25

成功示例:

{
"success": true,
"message": "获取成功",
"code": 200,
"data": {
"voteList": [{ "voteMonsterId": 3001, "voteCount": 12345 }]
}
}

5) GET /api/getPeakRankInfo

查询巅峰排行榜。

参数类型必填说明
keynumber直接指定排行 key
pagenumber页面类型:1 玩家,2 精灵,3 套装,4 称号
modenumber模式:0 竞技,1 狂野,2 专家,默认 0
tabnumber子分类索引,默认 0
subkeynumber子 key
startIdxnumber起始下标,默认 0
endIdxnumber结束下标,默认 99

key 未传或非法时,服务会根据 pagemodetab 自动计算。

成功示例:

{
"success": true,
"message": "获取成功",
"code": 200,
"data": {
"key": 120,
"subkey": 20210526,
"startIdx": 0,
"endIdx": 99,
"rankList": [{ "userid": 12345678, "score": 999999, "nick": "玩家昵称" }]
}
}

6) GET /api/getBookAndAchieveRankInfo

查询图鉴或成就排行。

参数类型必填说明
typenumber0 图鉴,1 成就
startIdxnumber起始下标,默认 0
endIdxnumber结束下标,默认 99

成功示例:

{
"success": true,
"message": "获取成功",
"code": 200,
"data": {
"key": 156,
"subkey": 1,
"startIdx": 0,
"endIdx": 99,
"rankList": [{ "userid": 12345678, "score": 321, "nick": "玩家昵称" }]
}
}

项目结构

src/
index.ts # 入口:tcpService.init() → HTTP 服务
config/
config.ts # 环境变量加载 + Settings 配置导出
core/
encrypt.ts # 封包加解密(密钥初始化、result 计算)
login.ts # 账号登录:获取 session、TCP 建连、拼装登录包
pkg/
receive.ts # 接收封包解析
send.ts # 封包发送处理
services/
tcpService.ts # TCP 生命周期管理(连接、心跳、重连)
httpServer/
app.ts # Hono 应用实例(CORS、日志、路由挂载)
routes/
user.route.ts # /api/* 路由定义
controllers/
user.controller.ts # 用户 / 在线状态接口
peak.controller.ts # 巅峰排行 / 投票接口
rank.controller.ts # 图鉴 / 成就排行接口
utils/
commandDict.ts # 命令 ID ↔ 名称映射
http/
fetchData.ts # 维护公告抓取
httpUtil.ts # HTTP 工具
reply.ts # 统一响应构建
pkg/
builder.ts # 封包构建
format.ts # 封包格式化
parser.ts # 封包解析
protocol.ts # 协议常量(HEADER_SIZE 等)
reader.ts # 封包读取
webHook/
feishu.ts # 飞书 Webhook 推送

开发说明

  • ESM:项目使用 "type": "module",源码 import 路径必须带 .js 后缀(moduleResolution: NodeNext
  • verbatimModuleSyntaximport type 用于纯类型导入,不可用 import { type Foo }
  • isolatedModules:禁止 enum 合并和 namespace 导出
  • strict + noUncheckedIndexedAccess:严格类型检查
  • 格式化:单引号、分号、80 字符行宽,import 自动排序
  • 测试:当前仓库不含测试框架和测试文件

注意事项

  • 返回的十六进制数据多为游戏协议原始字节,未做字段反序列化
  • 对外错误信息以 message + code + data.error 为准
  • 请勿将 .env* 文件或含真实账号密码的配置提交到版本控制

About

🙌 Sequ

Topics

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages