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 чисто
3.3 KiB
3.3 KiB
1. Модуль GoToSocial (services/publisher/app/gotosocial.py)
- 1.1 Создать
gotosocial.py:_client(),post_status(),upload_media(),verify_credentials(),delete_status(),GoToSocialError - 1.2 Проверка:
python -c "from app.gotosocial import post_status, verify_credentials"(в venv) — импорт без ошибок
2. Конфиг
- 2.1
config.py: поляgt_social_url,gt_social_token,gt_social_visibility,gt_social_channels+ чтение из env - 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 - 2.3
.env.exampleактуализирован (те же имена, значения-заглушки)
3. Логика каналов (channels.py)
- 3.1 Добавить
is_gotosocial(ch)и чтениеVESTI_GTS_CHANNELS(feediverse-каналы отдельно от Telegram) - 3.2 Проверка: функция отличает
@dedinit_vesti(TG) от@vesti@dedinit.ru(GtS);gt:-префикс уходит ТОЛЬКО в fediverse
4. main.py
- 4.1
_publish_gotosocial(card, ch): upload_media → post_status → ChannelResult (status_id) - 4.2 В
publish(): после Telegram-каналов обработать fediverse-каналы (settings.gt_social_channels) в том же цикле;all_okучитывает их - 4.3 dry_run: эмулирует fediverse-каналы (message_id=0), без реальных HTTP-запросов
- 4.4 healthz: блок
gotosocial(url, account, token_set, account_ok) - 4.5 Проверка:
curl -s http://127.0.0.1:8410/healthz→ json c gotosocial
5. Сборка и функциональный тест
- 5.1
docker compose -f services/publisher/docker-compose.yml up -d --build— контейнер Up - 5.2 dry_run с fediverse-каналом: results содержит
@vesti@dedinit.ru, message_id=0, HTTP 200 - 5.3 healthz содержит gotosocial c
token_set=true, account=vesti, account_ok=true - 5.4 Регресс: публикация чисто в Telegram (dry_run) работает как раньше
6. Токен + реальный тест
- 6.1 Создать аккаунт vesti на GtS (admin account create, confirmed, approved) — 2026-09-13
- 6.2 Создать OAuth-приложение
vesti-publisher(POST /api/v1/apps, scopewrite write:media) — client_id=01B09QNDM9YQ2VQVSRXHCVAV6K - 6.3 Токен vesti: вставлен в БД
tokens(user_id изusers, scoperead write, access 48 симв.), записан в .env → healthzaccount_ok=true - 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 (обязателен после изменений)