GramJS

messages.UploadMedia

Upload a file and associate it to a chat (without actually sending it to the chat)

Example

const { Api, TelegramClient } = require("telegram");
const { StringSession } = require("telegram/sessions");

const session = new StringSession(""); // You should put your string session here
const client = new TelegramClient(session, apiId, apiHash, {});

(async function run() {
  await client.connect(); // This assumes you have already authenticated with .start()

  const result = await client.invoke(
    new Api.messages.UploadMedia({
      peer: "username",
      media: new Api.InputMediaUploadedPhoto({
        file: await client.uploadFile({
          file: new CustomFile(
            "file.bin",
            fs.statSync("../file.bin").size,
            "../file.bin"
          ),
          workers: 1,
        }),
        stickers: [
          new Api.InputDocument({
            id: BigInt("-4156887774564"),
            accessHash: BigInt("-4156887774564"),
            fileReference: Buffer.from("arbitrary data here"),
          }),
        ],
        ttlSeconds: 43,
      }),
    })
  );
  console.log(result); // prints the result
})();
import { Api, TelegramClient } from "telegram";
import { StringSession } from "telegram/sessions";

const session = new StringSession(""); // You should put your string session here
const client = new TelegramClient(session, apiId, apiHash, {});

(async function run() {
  await client.connect(); // This assumes you have already authenticated with .start()

  const result: Api.MessageMedia = await client.invoke(
    new Api.messages.UploadMedia({
      peer: "username",
      media: new Api.InputMediaUploadedPhoto({
        file: await client.uploadFile({
          file: new CustomFile(
            "file.bin",
            fs.statSync("../file.bin").size,
            "../file.bin"
          ),
          workers: 1,
        }),
        stickers: [
          new Api.InputDocument({
            id: BigInt("-4156887774564"),
            accessHash: BigInt("-4156887774564"),
            fileReference: Buffer.from("arbitrary data here"),
          }),
        ],
        ttlSeconds: 43,
      }),
    })
  );
  console.log(result); // prints the result
})();

Parameters

NameTypeDescription
peerInputPeerThe chat, can be an inputPeerEmpty for bots
mediaInputMediaFile uploaded in chunks as described in files ยป

Result

MessageMedia

Possible errors

CodeTypeDescription
400BOT_MISSINGThis method can only be run by a bot
400CHANNEL_PRIVATEYou haven't joined this channel/supergroup
400CHAT_ADMIN_REQUIREDYou must be an admin in this chat to do this
403CHAT_WRITE_FORBIDDENYou can't write in this chat
400FILE_PARTS_INVALIDThe number of file parts is invalid
400IMAGE_PROCESS_FAILEDFailure while processing image
400INPUT_USER_DEACTIVATEDThe specified user was deleted
400MEDIA_INVALIDMedia invalid
400MSG_ID_INVALIDInvalid message ID provided
400PEER_ID_INVALIDThe provided peer id is invalid
400PHOTO_EXT_INVALIDThe extension of the photo is invalid
400PHOTO_SAVE_FILE_INVALIDInternal issues, try again later
400USER_BANNED_IN_CHANNELYou're banned from sending messages in supergroups/channels
400WEBPAGE_CURL_FAILEDFailure while fetching the webpage with cURL

Can bots use this method?

Yes

inputPeerEmpty

An empty constructor, no user or chat is defined.

Uploading and Downloading Files

How to transfer large data batches correctly.