ierarhsed
@ierarhsed
страдающий апатией любитель писать ботов

Как отправить видео в mediagroup — aiogram?

Пишу бота, который будет отправлять пачки фото и видео с папки, медиагруппу из фото он отправляет, но как только переходит момент к mp4 файлам, он просто их игнорирует. Пробовал вкладывать в медиагруппу видео через InputFile - видео вообще не отправлялось; open(file, 'rb') - одно видео отправлялось вместе с фотографиями. Кол-во фото: 29, кол-во видео: 7. Часть кода:

1 попытка
from aiogram.types.input_file import InputFile
from aiogram.types import MediaGroup
from os import listdir
from os.path import isfile, join

async def sendmedia(message):
    files = [file for file in listdir('1/') if isfile(join('1/', file))] # ['pic  (1).jpg', 'pic  (10).jpg', 'pic  (11).jpg', 'pic  (12).jpg', 'pic  (13).jpg', 'pic  (14).jpg', 'pic  (15).jpg', 'pic  (16).jpg', 'pic  (17).jpg', 'pic  (18).jpg', 'pic  (19).jpg', 'pic  (2).jpg', 'pic  (20).jpg', 'pic  (21).jpg', 'pic  (22).jpg', 'pic  (23).jpg', 'pic  (24).jpg', 'pic  (25).jpg', 'pic  (26).jpg', 'pic  (27).jpg', 'pic  (28).jpg', 'pic  (29).jpg', 'pic  (3).jpg', 'pic  (4).jpg', 'pic  (5).jpg', 'pic  (6).jpg', 'pic  (7).jpg', 'pic  (8).jpg', 'pic  (9).jpg', 'video  (1).mp4', 'video  (2).mp4', 'video  (3).mp4', 'video  (4).mp4', 'video  (5).mp4', 'video  (6).mp4', 'video  (7).mp4']
    i = -1
    media = MediaGroup()
    for file in files:
        i += 1
        pic = file.endswith('.jpg') or file.endswith('.png') # True, если файл является фотографией
        if i != 10: # проверка, превышает ли MediaGroup лимит в 10 вложений
            if pic == True:
                media.attach_photo(InputFile(f'1/{file}'))
            else:
                media.attach_video(open(f'1/{file}', 'rb'))
        else:
            i = 0
            await bot.send_media_group(
                chat_id = message.chat.id,
                media=media
            )
            media = MediaGroup()
            if pic == True:
                media.attach_photo(InputFile(f'1/{file}'))
            else:
                media.attach_video(open(f'1/{file}', 'rb'))


Так же пытался сделать отправление сначала фотографий, потом видео, но в таком случае медиагруппа с видео вообще не отправляется:

2 попытка
from aiogram.types.input_file import InputFile
from aiogram.types import MediaGroup
from os import listdir
from os.path import isfile, join

async def sendmedia(message):
    files = [file for file in listdir(f'1/') if isfile(join(f'1/', file))] # список файлов в папке "1"
    pics = []
    videos = []
    for file in files:
        pic = file.endswith('.jpg') or file.endswith('.png')
        if pic:
            pics.append(file)
        else:
            videos.append(file)
    # pics = ['pic  (1).jpg', 'pic  (10).jpg', 'pic  (11).jpg', 'pic  (12).jpg', 'pic  (13).jpg', 'pic (14).jpg', 'pic  (15).jpg', 'pic  (16).jpg', 'pic  (17).jpg', 'pic  (18).jpg', 'pic (19).jpg', 'pic  (2).jpg', 'pic  (20).jpg', 'pic  (21).jpg', 'pic  (22).jpg', 'pic (23).jpg', 'pic  (24).jpg', 'pic  (25).jpg', 'pic  (26).jpg', 'pic  (27).jpg', 'pic (28).jpg', 'pic  (29).jpg', 'pic  (3).jpg', 'pic  (4).jpg', 'pic  (5).jpg', 'pic  (6).jpg', 'pic  (7).jpg', 'pic  (8).jpg', 'pic  (9).jpg']
    # videos = ['video  (1).mp4', 'video  (2).mp4', 'video  (3).mp4', 'video  (4).mp4', 'video  (5).mp4', 'video  (6).mp4', 'video  (7).mp4']
    i = -1
    media = MediaGroup()
    for pic in pics:
        i += 1
        if i != 10:  # если вложений меньше, чем 10
            media.attach_photo(InputFile(f'1/{pic}'))
        else:
            i = 0
            await bot.send_media_group(
                chat_id = message.chat.id,
                media=media
            )
            media = MediaGroup()
            media.attach_photo(InputFile(f'1/{pic}'))
    i = -1
    media = MediaGroup()
    for video in videos:
        i += 1
        if i != 10:
            media.attach_video(open(f'1/{video}', 'rb'))
        else:
            i = 0
            await bot.send_media_group(
                chat_id = message.chat.id,
                media=media
            )
            media = MediaGroup()
            media.attach_video(open(f'1/{video}', 'rb'))
  • Вопрос задан
  • 269 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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