Как сделать репост сториз с добавлением описаний в библиотеке Telethon?

Как можно сделать репост сториз с добавлением собственного описания? <br/> Я уже проверил, что отдельное выкладывание сториз с описанием работает, и репост без описания тоже проходит успешно. <br/> Вот пример кода, который я использую: <pre><code class="python">result = await client(functions.stories.SendStoryRequest(
    peer=await client.get_input_entity('me'),
    media=types.InputMediaEmpty(),
    fwd_from_id=types.InputPeerUser(user_id=from_user_id, access_hash=access_hash),
    fwd_from_story=story_id,
    privacy_rules=[types.InputPrivacyValueAllowAll()],
    caption=caption_text,
    period=86400
))</code></pre> <br/> Однако при попытке добавить описание к репостнутым сториз возникает ошибка: <br/> <pre><code>An error occurred: RPCError 400: MEDIA_FILE_INVALID (caused by SendStoryRequest)</code></pre>
  • 29 августа 2024 г. 10:14
Ответы на вопрос 1
Ошибка, с которой вы сталкиваетесь, связана с тем, что при репосте сториз в Telegram нельзя добавлять описание (caption). При использовании `SendStoryRequest` для создания репоста, параметры `media` и `caption` в этом контексте имеют ограничения.

Если вы хотите сделать репост существующей сториз и при этом добавить собственное описание, вам придется использовать другой подход. Вы можете скачать оригинальную сториз, а затем загрузить её как новую с вашим собственным описанием.

Вот как это можно сделать:

1. Получите нужную сториз.
2. Сохраните её локально или подготовьте для загрузки.
3. Опубликуйте сториз с вашим описанием.

Пример кода ниже демонстрирует это:

```python
from telethon import TelegramClient, events, functions, types

async def repost_story_with_caption(client, from_user_id, access_hash, story_id, caption_text):
    # Получение информации о сториз
    story = await client(functions.stories.GetStoriesRequest(
        peer=types.InputPeerUser(user_id=from_user_id, access_hash=access_hash),
        limit=100
    ))
    
    # Находим нужную сториз
    target_story = None
    for s in story.stories:
        if s.id == story_id:
            target_story = s
            break
    
    if target_story is None:
        print("Сториз не найдена")
        return
    
    # Скачиваем медиафайл
    if target_story.media:
        downloaded_media = await client.download_media(target_story.media)
        
        # Загружаем сториз с вашим описанием
        await client(functions.stories.SendStoryRequest(
            peer=await client.get_input_entity('me'),
            media=downloaded_media,
            privacy_rules=[types.InputPrivacyValueAllowAll()],
            caption=caption_text,
            period=86400
        ))
    else:
        print("Сториз не содержит медиафайл")

# Использование функции
# await repost_story_with_caption(client, from_user_id, access_hash, story_id, "Ваше описание здесь")
```

Этот код сначала получает сториз пользователя, затем находит нужную, загружает ее локально и отправляет как новую сториз с вашим текстом. Не забудьте заменить `from_user_id`, `access_hash`, `story_id` и `caption_text` на соответствующие значения.
Похожие вопросы