diff --git a/Dockerfile b/Dockerfile index dc706bd..844e4fb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,7 @@ # Runtime only. Binaries are built on the developer machine (see Makefile `image`). FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/gcr.io/iguazio/alpine:3.20 -RUN apk add --no-cache ca-certificates tzdata \ +# ffmpeg: required for squarebot video compress (media.bot_compress). Images use pure Go. +RUN apk add --no-cache ca-certificates tzdata ffmpeg \ && adduser -D -H -u 10001 spark \ && mkdir -p /usr/share/zoneinfo/Asia \ && cp /usr/share/zoneinfo/Asia/Shanghai /tmp/Shanghai \ diff --git a/docs/daily/2026-09-24-change-list.md b/docs/daily/2026-09-24-change-list.md index 003feb0..22d8dbc 100644 --- a/docs/daily/2026-09-24-change-list.md +++ b/docs/daily/2026-09-24-change-list.md @@ -168,3 +168,40 @@ make install-git-hooks # 本机只需一次 - `make test`: skipped(本机无 go) + +## 23:30 — 广场机器人 RSS + 媒体压缩检测 + +### 概要 + +- 广场每 5 分钟由随机 seed 机器人发海外主流媒体公开 RSS 帖(标题+短摘要+原文链接,URL 去重)。 +- 机器人帖 `expires_at` 默认 15 天,到期软删且 Feed/详情不可见。 +- 用户上传路径:凭证 size + 发帖声明宽高/体积软检测(默认可日志,可拒收)。 +- 机器人配图:入库对象存储前压到最长边 ≤1080;视频路径 ≤720(ffmpeg)。 + +### 变更范围 + +| 类型 | 说明 | +|------|------| +| 功能 | squarebot 调度、TTL、RSS、配图压缩 | +| 配置 | `media` / `square_bot` | +| 数据库 | migration 0026 | +| 文档 | `docs/media.md`、`docs/square.md` | + +### 主要文件 + +- `internal/module/squarebot/logic/*` — RSS / Tick / Worker / 压缩上传 +- `internal/module/square/logic/bot_publish.go` — 发帖 + Expire +- `internal/infrastructure/media/*` — 图/视频压缩 +- `internal/pkg/media/*` — 检测策略 +- `internal/bootstrap/app.go` — 接线 Start/Stop +- `migrations/0026_square_bot_rss.sql` +- `configs/config.yaml` + +### 验证 + +- `make test`: skipped(本机无 go) +- 部署后:`go run ./cmd/migrate`、`go run ./cmd/seed`,观察日志 `squarebot posted` / `squarebot expired` + +### 关联 + +- 用户需求:广场机器人 RSS + 15 天过期 + 后台机器人媒体压缩检测 diff --git a/docs/square.md b/docs/square.md index 17b593d..e62f54a 100644 --- a/docs/square.md +++ b/docs/square.md @@ -48,6 +48,17 @@ | 推荐算法、话题、@ | 后续 | | 未登录刷广场 | 需 Bearer | +### 机器人海外媒体(已实现) + +| 能力 | 说明 | +| --- | --- | +| 定时发帖 | `square_bot.enabled`;进程内 ticker,默认 **5 分钟**;随机 `botNNN@spark.bot` | +| 内容 | 海外主流媒体 **公开 RSS** 标题+短摘要+原文链接;URL 去重(`t_square_bot_links`) | +| TTL | 机器人帖 `expires_at` 默认 **15 天**;到期软删 + Feed/详情不可见 | +| 配图 | `media.bot_compress`:enclosure 图下载后压到 ≤1080 再 `Put` | + +详见 `docs/media.md`。 + --- # 0.2 与朋友圈的差异 diff --git a/internal/bootstrap/media.go b/internal/bootstrap/media.go index 7be7d41..544b52a 100644 --- a/internal/bootstrap/media.go +++ b/internal/bootstrap/media.go @@ -19,3 +19,9 @@ func MediaPolicy(cfg MediaConfig) media.Policy { }.Normalize(), } } + +// MediaCompressOptions returns limits + encoder settings for bot compressors. +func MediaCompressOptions(cfg MediaConfig) (lim media.Limits, jpegQuality, videoCRF int, ffmpegPath string) { + p := MediaPolicy(cfg) + return p.Limits, cfg.JPEGQuality, cfg.VideoCRF, cfg.FFmpegPath +}