Как обрабатывать медиагруппу через telegraf.js?
У меня есть бот, и в одном из модулей я в сцене создаю объект, в который заносится сообщение пользователя, и который он может потом отредактировать. Сейчас код сцены выглядит так:
getTaskScene.on("message", async (ctx) => {
let data = {};
data.text = ctx.message.text ||= "";
if (ctx.message.photo) {
data.files = [{ type: "photo", media: `${ctx.message.photo[3].file_id}` }];
data.type = "photo";
} else if (ctx.message.document) {
data.files = ctx.message.document.map((value) => {
return { type: "document", media: { source: value.file_id } };
});
data.type = "document";
} else {
data.type = "text";
}
ctx.scene.enter("editTaskScene", { data: data });
});
Этот код не обрабатывает медиагруппу корректно: если я прикреплю 4 фото, то код отработает 4 раза, а не один.
Есть ли способ обрабатывать медиагруппу как одно сообщение и добавлять все фото сразу же? Я пробовал использовать в главном файле bot.use(mediaGroup()), но это, почему-то, не сработало для меня.
Ответы (1 шт):
Автор решения: Anatoly
→ Ссылка
Можно воспользоваться событием "media_group" вместо "message":
bot.on('media_group', async (ctx) => {
const mediaGroup = ctx.update.message.media_group;
// Обработка медиагруппы
// mediaGroup содержит массив объектов с информацией о каждом медиафайле
// Ваша логика обработки медиагруппы здесь
// К примеру выводим количество фото в медиагруппе
const photoCount = mediaGroup.filter((item) => item.type === 'photo').length;
ctx.reply(`Количество изображений: ${photoCount}`);
});
bot.launch();