mirror of
https://gitverse.ru/kpa39l/vesti.git
synced 2026-09-29 09:55:03 +00:00
bf176cc02b
- gotosocial.py: клиент GtS (httpx): post_status (markdown), upload_media v2, verify_credentials, delete_status - config.py: gt_social_url/token/visibility/format/channels - channels.py: fediverse-каналы (VESTI_GTS_CHANNELS, префикс gt:), gt: уходит только в fediverse - main.py: _publish_gotosocial + healthz-блок gotosocial + dry_run; status_id (ULID) в ответе - .env.example: GT_SOCIAL_* и VESTI_GTS_CHANNELS - STATUS.md/WALKTHROUGH.md: fediverse-раздел, хронология - openspec: change gotosocial-publisher (proposal/design/tasks/specs), validate чисто
45 lines
3.3 KiB
Markdown
45 lines
3.3 KiB
Markdown
## 1. Модуль GoToSocial (services/publisher/app/gotosocial.py)
|
||
|
||
- [x] 1.1 Создать `gotosocial.py`: `_client()`, `post_status()`, `upload_media()`, `verify_credentials()`, `delete_status()`, `GoToSocialError`
|
||
- [x] 1.2 Проверка: `python -c "from app.gotosocial import post_status, verify_credentials"` (в venv) — импорт без ошибок
|
||
|
||
## 2. Конфиг
|
||
|
||
- [x] 2.1 `config.py`: поля `gt_social_url`, `gt_social_token`, `gt_social_visibility`, `gt_social_channels` + чтение из env
|
||
- [x] 2.2 `.env` (корень): добавить `GT_SOCIAL_URL=https://social.dedinit.ru`, `GT_SOCIAL_ACCESS_TOKEN=<токен vesti>`, `GT_SOCIAL_VISIBILITY=public`, `VESTI_GTS_CHANNELS=@vesti@dedinit.ru`
|
||
- [x] 2.3 `.env.example` актуализирован (те же имена, значения-заглушки)
|
||
|
||
## 3. Логика каналов (channels.py)
|
||
|
||
- [x] 3.1 Добавить `is_gotosocial(ch)` и чтение `VESTI_GTS_CHANNELS` (feediverse-каналы отдельно от Telegram)
|
||
- [x] 3.2 Проверка: функция отличает `@dedinit_vesti` (TG) от `@vesti@dedinit.ru` (GtS); `gt:`-префикс уходит ТОЛЬКО в fediverse
|
||
|
||
## 4. main.py
|
||
|
||
- [x] 4.1 `_publish_gotosocial(card, ch)`: upload_media → post_status → ChannelResult (status_id)
|
||
- [x] 4.2 В `publish()`: после Telegram-каналов обработать fediverse-каналы (settings.gt_social_channels) в том же цикле; `all_ok` учитывает их
|
||
- [x] 4.3 dry_run: эмулирует fediverse-каналы (message_id=0), без реальных HTTP-запросов
|
||
- [x] 4.4 healthz: блок `gotosocial` (url, account, token_set, account_ok)
|
||
- [x] 4.5 Проверка: `curl -s http://127.0.0.1:8410/healthz` → json c gotosocial
|
||
|
||
## 5. Сборка и функциональный тест
|
||
|
||
- [x] 5.1 `docker compose -f services/publisher/docker-compose.yml up -d --build` — контейнер Up
|
||
- [x] 5.2 dry_run с fediverse-каналом: results содержит `@vesti@dedinit.ru`, message_id=0, HTTP 200
|
||
- [x] 5.3 healthz содержит gotosocial c `token_set=true`, account=vesti, account_ok=true
|
||
- [x] 5.4 Регресс: публикация чисто в Telegram (dry_run) работает как раньше
|
||
|
||
## 6. Токен + реальный тест
|
||
|
||
- [x] 6.1 Создать аккаунт **vesti** на GtS (admin account create, confirmed, approved) — 2026-09-13
|
||
- [x] 6.2 Создать OAuth-приложение `vesti-publisher` (POST /api/v1/apps, scope `write write:media`) — client_id=01B09QNDM9YQ2VQVSRXHCVAV6K
|
||
- [x] 6.3 Токен vesti: вставлен в БД `tokens` (user_id из `users`, scope `read write`, access 48 симв.), записан в .env → healthz `account_ok=true`
|
||
- [x] 6.4 Реальный тест: публикация текста, публикация с медиа (1 attachment), delete — всё HTTP 200, статусы проверены и удалены
|
||
|
||
## 7. Документация и git
|
||
|
||
- [ ] 7.1 STATUS.md: раздел «Fediverse-публикация (GoToSocial)»
|
||
- [ ] 7.2 WALKTHROUGH.md/PRD.md: фича отмечена
|
||
- [ ] 7.3 git commit + push на gitverse
|
||
- [ ] 7.4 openspec archive (после подтверждения пользователя)
|
||
- [ ] 7.5 backup.sh (обязателен после изменений) |