Бот Telegram имеет ограничение размера файла для отправки в 50 МБ.
Мне нужно отправить большие файлы.Есть ли способ обойти это?
Я знаю об этом проекте https://github.com/pwrtelegram/pwrtelegram, но я не смог заставить его работать.
Может быть, кто-то уже решил такую проблему?
Существует возможность осуществить загрузку файла через Telegram API, а затем отправить по file_id с ботом.
Я пишу бота на Java с использованием библиотеки https://github.com/rubenlagus/TelegramBots
ОБНОВЛЕНИЕ
Для решения этой проблемы я использую telegram api, который имеет ограничение в 1,5 ГБ для больших файлов.
Я предпочитаю kotlogram - идеальный lib схорошая документация https://github.com/badoualy/kotlogram
ОБНОВЛЕНИЕ 2
Пример использования этой библиотеки:
private void uploadToServer(TelegramClient telegramClient, TLInputPeerChannel tlInputPeerChannel, Path pathToFile, int partSize) {
File file = pathToFile.toFile();
long fileId = getRandomId();
int totalParts = Math.toIntExact(file.length() / partSize + 1);
int filePart = 0;
int offset = filePart * partSize;
try (InputStream is = new FileInputStream(file)) {
byte[] buffer = new byte[partSize];
int read;
while ((read = is.read(buffer, offset, partSize)) != -1) {
TLBytes bytes = new TLBytes(buffer, 0, read);
TLBool tlBool = telegramClient.uploadSaveBigFilePart(fileId, filePart, totalParts, bytes);
telegramClient.clearSentMessageList();
filePart++;
}
} catch (Exception e) {
log.error("Error uploading file to server", e);
} finally {
telegramClient.close();
}
sendToChannel(telegramClient, tlInputPeerChannel, "FILE_NAME.zip", fileId, totalParts)
}
private void sendToChannel(TelegramClient telegramClient, TLInputPeerChannel tlInputPeerChannel, String name, long fileId, int totalParts) {
try {
String mimeType = name.substring(name.indexOf(".") + 1);
TLVector<TLAbsDocumentAttribute> attributes = new TLVector<>();
attributes.add(new TLDocumentAttributeFilename(name));
TLInputFileBig inputFileBig = new TLInputFileBig(fileId, totalParts, name);
TLInputMediaUploadedDocument document = new TLInputMediaUploadedDocument(inputFileBig, mimeType, attributes, "", null);
TLAbsUpdates tlAbsUpdates = telegramClient.messagesSendMedia(false, false, false,
tlInputPeerChannel, null, document, getRandomId(), null);
} catch (Exception e) {
log.error("Error sending file by id into channel", e);
} finally {
telegramClient.close();
}
}
где TelegramClient telegramClient
и TLInputPeerChannel tlInputPeerChannel
вы можете создать как написано в документации.
НЕ КОПИРОВАТЬ, переписать под ваши нужды.