Какие существуют методы хранения медиафайлов в библиотеке Telethon?

Мне нужна помощь. <br/> Я не смог найти информацию о хранении медиа для последующих отправок с использованием библиотеки Telethon. <br/> <br/> Вот что я узнал: сначала планировал сохранять данные, которые возвращаются через InputFile или InputFileBig, но понял, что воспользоваться этими данными можно всего около 12 часов. <br/> <br/> Затем я обратил внимание на само сообщение и заметил наличие id, access_hash и file_reference. Это, похоже, работает, но я не нашел информации о том, насколько долго эти данные можно использовать. Может, кто-то знает? <br/> <br/> И последний вопрос: какие другие способы "более долгого" хранения медиа в БД для последующих отправок доступны в Telethon? <br/> <br/> Спасибо!
  • 18 ноября 2024 г. 19:23
Ответы на вопрос 2
В библиотеке Telethon для хранения медиафайлов и их дальнейшей отправки действительно существуют несколько методов. Давайте разберем ваши вопросы подробнее.

### 1. Хранение через `InputFile` и `InputFileBig`

Вы правы в том, что объекты `InputFile` и `InputFileBig` имеют ограниченный срок действия, и их можно использовать для отправки медиафайлов в течение примерно 12 часов после загрузки. Если вы планируете отправлять медиафайлы более поздно, вам нужно использовать другие способы.

### 2. Хранение через `Message` и его атрибуты

Для того чтобы сохранять медиафайлы на долгий срок, вы можете использовать атрибуты сообщений, такие как `id`, `access_hash` и `file_reference`. Эти данные используются для создания объекта `InputPeer` и позволяют вам повторно отправлять медиафайлы. Вот основные моменты, на которые стоит обратить внимание:

- **ID** – уникальный идентификатор сообщения.
- **Access_hash** – хэш доступа, необходимый для доступа к сообщениям.
- **File_reference** – это бинарные данные, которые позволяют обращаться к файлу без необходимости повторной загрузки.

### Срок действия

Данные, такие как `id`, `access_hash` и `file_reference`, могут храниться бессрочно. Вы можете использовать их для повторной отправки медиафайлов в любое время, пока сами сообщения не будут удалены (как с вашей стороны, так и с сервера Telegram).

### 3. Другие способы хранения медиа

Вот несколько других подходов для долгосрочного хранения медиа:

- **Сохранение на диске**: Если вам нужно повторное использование медиафайлов, вы можете сохранить их локально на диске (например, в формате JPEG, PNG и т. д.) и использовать путь к файлу для отправки, когда это необходимо.
  
- **База данных**: Вы можете хранить ссылки на медиафайлы и их атрибуты (включая ID, access_hash, file_reference) в базе данных. Это поможет вам управлять медиафайлами и их статусом отправки.

- **Хранение в облаке**: Если ваши медиафайлы велики, подумайте об использовании облачного хранилища (например, Amazon S3, Google Drive) для хранения файлов и храните ссылки на них в вашей БД.

Пример сохранения атрибутов сообщения в БД:

```python
from telethon.sync import TelegramClient

client = TelegramClient('session_name', api_id, api_hash)

# После получения сообщения
async def save_message_info(message):
    db.save({
        'message_id': message.id,
        'access_hash': message.access_hash,
        'file_reference': message.file_reference
    })
```

Вы можете использовать эту информацию для последующей обработки.

Если у вас есть дополнительные вопросы по конкретным методам или коду, не стесняйтесь спрашивать!
Есть несколько варинатов: 
1. Есть известное сообщение где лежит медиа, когда надо отправит сообщение с таким медиа просто сохраняем себе и пересылаем, для это надо вести табличку соответствия(откуда и что брать)
2. Хранить у себя эти медиа, вести таблицу соответствия и когда надо просто их рассылать
3. Хранить в БД в blob - плохая затея, хранить медиа в БД))

У telethon есть стадартные методы download_media, send_file
Похожие вопросы