SnowLuma v2.4.2 source snapshot
Dev Build / cleanup (push) Waiting to run
Dev Build / typecheck (push) Waiting to run
Publish MCP to npm / Build, test, and publish MCP (push) Waiting to run
Publish SDK to npm / Build, test, and publish SDK (push) Waiting to run
Sync action catalog to docs / sync (push) Waiting to run
Publish UI to npm / Build and publish UI (push) Waiting to run
Build and Release / preflight (push) Waiting to run
Dev Build / cleanup (push) Waiting to run
Dev Build / typecheck (push) Waiting to run
Publish MCP to npm / Build, test, and publish MCP (push) Waiting to run
Publish SDK to npm / Build, test, and publish SDK (push) Waiting to run
Sync action catalog to docs / sync (push) Waiting to run
Publish UI to npm / Build and publish UI (push) Waiting to run
Build and Release / preflight (push) Waiting to run
This commit is contained in:
commit
fa9c73363d
1367 files changed
+355735
No files matched your search
@@ -0,0 +1,59 @@
|
||||
// OIDB 0x902f_1 — 收藏表情(custom face)移动指令(move 第1步)。
|
||||
//
|
||||
// "移动到最前"两步流程的第1步:发 0x902f 指明目标 emoji + 目标位置。
|
||||
// 第2步是 MoveCustomFace(0x902e opType=2 上传新顺序列表)。单发本包不生效,
|
||||
// 必须配合第2步。envelope 带 f12=1(uinForm)。
|
||||
//
|
||||
// 业务体(OIDB 信封 f4 内):
|
||||
// { f1:{f1:1024, f2:osVersion, f3:buildVersion}, f2:emojiId, f3:position }
|
||||
// f1 是客户端环境(1024 是 client type 标志),f2 要移动的 emoji_id,
|
||||
// f3 目标位置(1=最前)。字段编号对齐 9.9.26-44343 frida 抓包。
|
||||
|
||||
import { protobuf_decode, protobuf_encode } from '@snowluma/proton';
|
||||
import type {
|
||||
CustomFaceModifyResp,
|
||||
CustomFaceOrderBody,
|
||||
} from '@snowluma/proto-defs/oidb-actions/base';
|
||||
import type { OidbBase } from '@snowluma/proto-defs/oidb';
|
||||
import { invokeOidb, type OidbSender } from '../../oidb-service';
|
||||
import { CLIENT_VERSION } from './shared';
|
||||
|
||||
// build 版本简写:抓包见 f1.f3 = "9.9.26"(去掉 build 号后缀)。
|
||||
const BUILD_VERSION_SHORT = '9.9.26';
|
||||
|
||||
export namespace OrderCustomFace {
|
||||
export const command = 0x902f;
|
||||
export const subCommand = 1;
|
||||
/** envelope reserved=1(UIN-form),抓包见信封 f12=1。 */
|
||||
export const uinForm = true;
|
||||
|
||||
export interface Params {
|
||||
/** 形如 `<UIN>_0_0_0_<MD5>_0_0`,来自 fetch 响应。 */
|
||||
emojiId: string;
|
||||
/** 目标位置(从 1 开始,1=最前)。 */
|
||||
position: number;
|
||||
}
|
||||
|
||||
export type Deps = OidbSender;
|
||||
|
||||
export const serialize = (_ctx: Deps, p: Params): CustomFaceOrderBody => ({
|
||||
env: { field1: 1024, osVersion: CLIENT_VERSION, buildVersion: BUILD_VERSION_SHORT },
|
||||
emojiId: p.emojiId,
|
||||
position: p.position,
|
||||
});
|
||||
|
||||
export const deserialize = (_ctx: Deps, body: CustomFaceModifyResp): void => {
|
||||
if (body.retCode && body.retCode !== 0) {
|
||||
throw new Error(`order custom face error: ${body.errMsg || body.retCode}`);
|
||||
}
|
||||
};
|
||||
|
||||
export const encode = (env: OidbBase<CustomFaceOrderBody>): Uint8Array =>
|
||||
protobuf_encode<OidbBase<CustomFaceOrderBody>>(env);
|
||||
|
||||
export const decode = (bytes: Uint8Array): OidbBase<CustomFaceModifyResp> =>
|
||||
protobuf_decode<OidbBase<CustomFaceModifyResp>>(bytes);
|
||||
|
||||
export const invoke = (deps: Deps, params: Params): Promise<void> =>
|
||||
invokeOidb(deps, OrderCustomFace, params);
|
||||
}
|
||||
Reference in new issue
Block a user