Gramjs send file in chunk
rain
typescript
2 years ago
1.5 kB
4
Indexable
import fs from "node:fs"; import { basename } from "node:path"; import bigInt from "big-integer"; import { Api } from "telegram"; import { generateRandomBytes, readBigIntFromBuffer } from "telegram/Helpers.js"; import { getAppropriatedPartSize } from "telegram/Utils.js"; import bot from "../bot.js"; export default async function uploadFile(filePath: string): Promise<Api.InputFileBig> { const fileId = readBigIntFromBuffer(generateRandomBytes(8), true, true); const fileName = basename(filePath); const fileSize = fs.statSync(filePath).size; const defaultChunkSize = getAppropriatedPartSize(bigInt(fileSize)) * 1024; const fileTotalParts = Math.ceil(fileSize / defaultChunkSize); const file = fs.openSync(filePath, "r"); let partCount = 0; let remainingSize = fileSize; while (remainingSize > 0) { const position = partCount * defaultChunkSize; const chunkSize = remainingSize > defaultChunkSize ? defaultChunkSize : remainingSize; const buffer = Buffer.alloc(chunkSize); remainingSize -= chunkSize; fs.readSync(file, buffer, { position, length: chunkSize }); await bot.invoke( new Api.upload.SaveBigFilePart({ fileId, filePart: partCount, fileTotalParts, bytes: buffer, }) ); partCount++; } const uploadedFile = new Api.InputFileBig({ id: fileId, parts: partCount, name: fileName, }); fs.closeSync(file); return uploadedFile; }
Editor is loading...