Как можно отправить фотографию из закрытой группы в бот Telebot?

Здравствуйте! <br/> Мне требуется бот, который мог бы пересылать случайные фото и видео из частной группы в личные сообщения пользователю. <br/> <br/> Я не совсем понимаю, как получить ID фотографий и видео, и как научить бота случайным образом выбирать и пересылать их пользователю. <br/> <br/> <pre><code class="python">@bot.message_handler(content_types=['text'])
def media_frwrd(message):
    if message.chat.type == 'private':
        group_id_1 = 'MYGROUP_ID'
        if message.text == 'Фото':
            bot.forward_message(message.chat.id, from_chat_id=group_id_1, # далее должен идти ID фотографии, но я не понимаю, как его получить и выбрать случайным образом)</code></pre> <br/> <br/> Я не нашел полезных объяснений в интернете. Надеюсь, вы сможете мне помочь.
  • 17 сентября 2024 г. 7:33
Ответы на вопрос 2
Для того чтобы ваш бот пересылал случайные фото и видео из закрытой группы в личные сообщения пользователю, потребуется несколько этапов разработки. Вот основные шаги и рекомендации:

1. **Получение ID сообщений**: Telegram API не предоставляет прямого способа получения списка ID сообщений в группе. Вам нужно самостоятельно сохранять эти ID в мете данных бота в процессе его работы. Для этого вы можете использовать события, которые будут обрабатывать новые сообщения в группе.

2. **Отслеживание сообщений в группе**: Вам нужно подписаться на события получения сообщений из вашей закрытой группы. Вы можете использовать следующий подход:

```python
import telebot
import random

# Создайте экземпляр бота
bot = telebot.TeleBot('YOUR_BOT_API_TOKEN')

# Список для хранения ID фото и видео
media_ids = []

@bot.message_handler(content_types=['photo', 'video'], chat_id='MYGROUP_ID')  # Укажите ID вашей группы
def record_media(message):
    media_ids.append(message.message_id)  # Сохраняем ID фото или видео

@bot.message_handler(content_types=['text'])
def media_frwrd(message):
    if message.chat.type == 'private':
        if message.text == 'Фото':
            if media_ids:
                random_id = random.choice(media_ids)  # выбор случайного ID
                bot.forward_message(message.chat.id, chat_id='MYGROUP_ID', message_id=random_id)

# Начинаем прослушивание сообщений
bot.polling()
```

3. **Работа с ID**: Вам нужно будет также обрабатывать сообщения в группе для получения и сохранения ID сообщений. Обратите внимание, что для этого бот должен быть добавлен в группу.

4. **Сохранение ID**: Проверьте, чтобы структура, в которой вы сохраняете ID сообщений (например, `media_ids`), не превышала разумных значений по размеру или старались использовать базу данных для более надежного хранения.

5. **Регулярные очистки**: Создайте механизм очистки старых ID, чтобы не переполнять память бота.

6. **Обработка прав доступа**: Убедитесь, что ваш бот имеет права на чтение сообщений в группе.

7. **Очистка данных**: Порекомендуйте соблюдать правила and regulations использования ботов и персональной информации.

8. **Тестирование**: После создания основной логики, тщательно протестируйте бота в оффлайн-режиме и в реальных условиях, чтобы убедиться, что всё работает корректно.

Помимо этих шагов, важно ознакомиться с документацией Telegram Bot API, чтобы лучше понимать все возможности и ограничения, которые предоставляет эта платформа.
import random

media_ids = {
    'photos': [],
    'videos': []
}

@bot.message_handler(content_types=['photo', 'video'])
def save_media(message):
    group_id_1 = 'MYGROUP_ID'
    if message.chat.id == int(group_id_1):
        if message.content_type == 'photo':
            file_id = message.photo[-1].file_id
            media_ids['photos'].append(file_id)
        elif message.content_type == 'video':
            file_id = message.video.file_id
            media_ids['videos'].append(file_id)

@bot.message_handler(content_types=['text'])
def media_frwrd(message):
    if message.chat.type == 'private':
        if message.text == 'Фото':
            if media_ids['photos']:
                random_photo_id = random.choice(media_ids['photos'])
                bot.send_photo(message.chat.id, random_photo_id)
            else:
                bot.send_message(message.chat.id, "Нет доступных фото.")
        elif message.text == 'Видео':
            if media_ids['videos']:
                random_video_id = random.choice(media_ids['videos'])
                bot.send_video(message.chat.id, random_video_id)
            else:
                bot.send_message(message.chat.id, "Нет доступных видео.")
Похожие вопросы