Отправка нескольких медиа произвольного количества и типа одним сообщением TelegramBot Java

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

  • Количество файлов меняется от сообщения к сообщению и неизвестно заранее (минимум 1, максимум 10)
  • В одном сообщении могут комбинироваться разные типы файлов (картинки, видео, гифки)

Я пытаюсь использовать метод SendMediaGroup(), однако он не принимает списки в качестве параметра. У меня получилось только захардкодить параметры заранее известными значениями.

Получается код вида:

telegramBot.execute(new SendMediaGroup(chatID,
            fileURL0.caption(text),
            fileURL1,   
            ... 

            fileURL9));

Вопрос: как избежать хардкода и передавать во второй параметр SendMediaGroup() контейнер с несколькими объектами?

Использую библиотеку:

com.github.pengrad:java-telegram-bot-api:6.2.0

Ответы (1 шт):

Автор решения: Vadik

Конструктор класса SendMediaGroup принимает на вход varargs из объектов InputMedia.

Varargs в Java преобразуется в обычный массив на стадии компиляции. Чтобы передать список в varargs, его нужно преобразовать в массив:

List<InputMedia<?>> mediaList = ...;
InputMedia<?>[] mediaArray = mediaList.toArray(InputMedia[]::new);
telegramBot.execute(new SendMediaGroup(chatId, mediaArray));

Если у вас версия Java ниже 1.8, то используйте new InputMedia[0] вместо InputMedia[]::new для создания нового массива.

→ Ссылка