docs: add sticker command refactor plan

This commit is contained in:
Fd
2026-07-15 11:51:50 +07:00
parent c1e78fb2e7
commit 9a73dc73c4
@@ -0,0 +1,59 @@
# Sticker Refactor Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Move EXIF generation and WebP conversion helpers out of sticker.go into helper packages.
**Architecture:**
1. Create `helper/exif.go` handling exif metadata extraction.
2. Create `helper/media_convert.go` abstracting commands like `cwebp` and `ffmpeg` wrappers to convert byte slices to webp.
3. Simplify `cmds/media/sticker.go` to depend on these new exports.
**Tech Stack:** Go, exec, Neo Context, `waProto`
## Global Constraints
- Only use standard library inside `helper/` where possible (no whatsapp dependencies except general bytes handling).
- The behavior of the `/Users/fd/Documents/perf/cmds/media/sticker.go` command should remain functionally identical.
---
### Task 1: Migrate Exif Support to Helper
**Files:**
- Create: `/Users/fd/Documents/perf/helper/exif.go`
- Modify: `/Users/fd/Documents/perf/cmds/media/sticker.go`
**Interfaces:**
- Produces: `helper.CreateDynamicExif(args []string) (exifPath string, cleanup bool)`
- [ ] **Step 1: Write `exif.go`**
Extract `exifData`, `webpExif`, `getOrCreateDefaultExif`, and `resolveExif` into `helper/exif.go`. Make `resolveExif` exported as `ResolveExif`. Ensure it uses the existing env logic. Keep `uuid` dependency.
- [ ] **Step 2: Update `sticker.go` EXIF usage**
Remove the exif functions/structs from `sticker.go` and update `Sticker.Run` to call `helper.ResolveExif(ctx.Arguments())`.
- [ ] **Step 3: Commit**
### Task 2: Abstract Conversion Functions
**Files:**
- Create: `/Users/fd/Documents/perf/helper/media_convert.go`
- Modify: `/Users/fd/Documents/perf/cmds/media/sticker.go`
**Interfaces:**
- Produces:
`ConvertImageToSticker(imgData []byte, exifPath string) ([]byte, error)`
`ConvertVideoToSticker(vidData []byte, exifPath string) ([]byte, error)`
`RewriteStickerExif(webpData []byte, exifPath string) ([]byte, error)`
- [ ] **Step 1: Create `media_convert.go`**
Implement the three conversion functions. Each should take bytes (downloaded media) and an `exifPath`, do the conversion via `exec.Command`, inject exif via `webpmux`, clean up its own internal temp files, and return the final `[]byte` of the webp ready to send. (They don't need Whatsapp Context).
- [ ] **Step 2: Update `sticker.go` media usage**
Remove `cmdStickerImage`, `cmdStickerVideo`, and `cmdStickerRewrite` from `sticker.go`. Instead, in `Sticker.Run`, download the bytes directly using `ctx.Client().Download(...)`, then pass those bytes to the `helper.ConvertX` functions, and `ctx.SendSticker()` the returned bytes.
- [ ] **Step 3: Test build**
Run `go build ./...`
- [ ] **Step 4: Commit**
`git commit -m "refactor: extract media conversion logic to helper"`