Этот вопрос закрыт для ответов, так как повторяет вопрос Aiogram Bot: как отправить несколько медиа одним фотоколлажом?
@GenesisFTW

Есть чат-бот, пользователь может отправлять фотографии, если это media_group, то как я могу это реализовать?

Есть чат-бот, пользователь может отправлять фотографии, если это media_group, то как я могу это реализовать? если это одна фотография, моя функция работает хорошо, но проблема в том, что функция работает для каждой фотографии

bot.on(['photo'], (ctx) => {
  if (ctx.message.media_group_id) {
    const photo = ctx.message.photo[0]
    let link = await ctx.telegram.getFileLink(photo.file_id)
    const url = link.href
    // need send photos to user 
    ctx.telegram.sendMediaGroup(user_tg_id,[
      {
        type: 'photo',
        media: // url for first photo
      },
      {
        type: 'photo',
        media: // url for second photo
      },
    ])

  } else {
    // works well
    const photo = ctx.message.photo[0]
    let link = await ctx.telegram.getFileLink(photo.file_id)
    const url = link.href
    return ctx.telegram.sendPhoto(user_tg_id, {url})
  }
})
  • Вопрос задан
  • 262 просмотра
Решения вопроса 1
@GenesisFTW Автор вопроса
решил задачу так может не совсем правильно но вроде работает
bot.on(['photo'], (ctx) => {
  if (ctx.message.media_group_id) {
    const file_id = ctx.message.photo[0].file_id
    const key = ctx.message.media_group_id;
    if (ctx.session.albom && ctx.session.albom[key]) {
     const mg = ctx.session.albom[key];
     clearTimeout(mg.sendTimeout);
     mg.messages.push(
      {
        type: 'photo',
        media: file_id
      }
     );
      mg.sendTimeout = setTimeout(async () => {
      await ctx.telegram.sendMediaGroup(user_tg_id, mg.messages)
      ctx.session.albom[key] = undefined;
     }, 1000);
    } else {
      ctx.session.albom = []
      ctx.session.albom[key] = {
      messages: [{
        type: 'photo',
        media: file_id
      }],
     };
    }
  } else {
    const photo = ctx.message.photo[0]
    let link = await ctx.telegram.getFileLink(photo.file_id)
    const url = link.href
    return ctx.telegram.sendPhoto(user_tg_id, {url})
  }
})
Ответ написан
Ответы на вопрос 1
@defriz
люблю js
не разбираюсь в библиотеках телеграмма, но, возможно, это поможет
bot.on(['photo'], (ctx) => {
  if (ctx.message.photo.length > 1) return;
  if (ctx.message.media_group_id) {
    const photo = ctx.message.photo[0]
    let link = await ctx.telegram.getFileLink(photo.file_id)
    const url = link.href
    // need send photos to user 
    ctx.telegram.sendMediaGroup(user_tg_id,[
      {
        type: 'photo',
        media: // url for first photo
      },
      {
        type: 'photo',
        media: // url for second photo
      },
    ])

  } else {
    // works well
    const photo = ctx.message.photo[0]
    let link = await ctx.telegram.getFileLink(photo.file_id)
    const url = link.href
    return ctx.telegram.sendPhoto(user_tg_id, {url})
  }
})
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы