Задать вопрос
mmmenko
@mmmenko
Начнём..

Как в Aiogram отправить MediaGroup на канал, зная его id?

В написании своего первого бота столкнулся с трудностями.
Бот должен сохранять фото от пользователя на сервере, случайно выбирает 6 фото, кладёт их в список и группой публикует в частном телеграмм-канале.
Сейчас на канал ничего не выводится, ошибок тоже не выдаёт.

import os, uuid, random, shutil
from aiogram import Dispatcher, Bot, types, executor
from aiogram.types import MediaGroup

DIR_DOWN_PIC = 'c:/tmp/docker/progects/PicBot/all_pic' 
DIR_PUSH_PIC = 'c:/tmp/docker/progects/PicBot/push_pic/'
TOKEN = '00000000:AAААААААА-UUUUUU-EEEEEEEEEEEEEEEEE'
CHAT_ID = '-10000000000000'

bot = Bot(TOKEN)
dp = Dispatcher(bot)

#Перемещение 6 случайных картинок в папку для отправки на канал:
i = 0
while i<6:
    if h_many >= 6:
        shutil.move((os.path.join(DIR_DOWN_PIC, random.choice(os.listdir(DIR_DOWN_PIC)))), DIR_PUSH_PIC)
        i += 1
    else:
        break
#Сохранение списка отправляемых картинок в переменные:
push_pics = os.listdir(DIR_PUSH_PIC)
pic1 =(push_pics[0])
pic2 =(push_pics[1])
pic3 =(push_pics[2])
pic4 =(push_pics[3])
pic5 =(push_pics[4])
pic6 =(push_pics[5])

#Отправка картинок на канал:
@dp.message_handler()
async def send_media(message: types.Message):
    media = MediaGroup()
    media.attach_photo(types.InputFile(f'{DIR_PUSH_PIC}/{pic1}', 'rb'), caption='#pivo_auto_mems') #Шэш-тег для всей группы фото в публикации
    media.attach_photo(types.InputFile(f'{DIR_PUSH_PIC}/{pic2}', 'rb'))
    media.attach_photo(types.InputFile(f'{DIR_PUSH_PIC}/{pic3}', 'rb'))
    media.attach_photo(types.InputFile(f'{DIR_PUSH_PIC}/{pic4}', 'rb'))
    media.attach_photo(types.InputFile(f'{DIR_PUSH_PIC}/{pic5}', 'rb'))
    media.attach_photo(types.InputFile(f'{DIR_PUSH_PIC}/{pic6}', 'rb'))

    await bot.send_media_group(
                chat_id = message.chat.id,
                media=media
            )

if __name__ == "__main__":
    executor.start_polling(dp, skip_updates=True)
  • Вопрос задан
  • 1197 просмотров
Подписаться 1 Средний 10 комментариев
Решения вопроса 1
mmmenko
@mmmenko Автор вопроса
Начнём..
Решилось корректировкой блока с отправкой media_group и удалением дублированных слэшей в media.attach_photo

Итоговый вариант:

from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import MediaGroup
from os import listdir

#id канала
CHAT_ID = '-100000000000'

#Папка, откуда бот берёт картинки на отправку
DIR_PUSH_PIC = 'push_pic/' 

#Получение списка картинок в папке
push_pics = os.listdir(DIR_PUSH_PIC)

#Запись имён картинок в переменные
pic1 =(push_pics[0])
pic2 =(push_pics[1])

@dp.message_handler(commands=['media'])
async def send_welcome(message: types.Message):
    await message.reply("Отправляю группу фото на канал")

    # Создание медиа группу
    media = MediaGroup()

    # Добавление фото в группу
    media.attach_photo(types.InputFile(f'{DIR_PUSH_PIC}{pic1}', 'rb'))
    media.attach_photo(types.InputFile(f'{DIR_PUSH_PIC}{pic2}', 'rb'))

    #Отправка медиа группы на канал
    await bot.send_media_group(chat_id=f'{CHAT_ID}' media=media) 

if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы