GramJS

⚠️ This project is archived and no longer maintained. Development continues in teleproto, an actively maintained fork. It's largely compatible with GramJS for most projects, migration means little more than swapping the package:
npm install teleproto
See the migration guide for details.

updates.GetChannelDifference

Returns the difference between the current state of updates of a certain channel and transmitted.

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.updates.GetChannelDifference({
      channel: "username",
      filter: new Api.ChannelMessagesFilter({
        ranges: [
          new Api.MessageRange({
            minId: 0,
            maxId: 0,
          }),
        ],
        excludeNewMessages: true,
      }),
      pts: 43,
      limit: 100,
      force: true,
    })
  );
  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.updates.ChannelDifference = await client.invoke(
    new Api.updates.GetChannelDifference({
      channel: "username",
      filter: new Api.ChannelMessagesFilter({
        ranges: [
          new Api.MessageRange({
            minId: 0,
            maxId: 0,
          }),
        ],
        excludeNewMessages: true,
      }),
      pts: 43,
      limit: 100,
      force: true,
    })
  );
  console.log(result); // prints the result
})();

Parameters

NameTypeDescription
flags#Flags, see TL conditional fields
forceflags.0?trueSet to true to skip some possibly unneeded updates and reduce server-side load
channelInputChannelThe channel
filterChannelMessagesFilterMesssage filter
ptsintPersistent timestamp (see updates)
limitintHow many updates to fetch, max 100000Ordinary (non-bot) users are supposed to pass 10-100

Result

updates.ChannelDifference

Possible errors

CodeTypeDescription
400CHANNEL_INVALIDThe provided channel is invalid.
400CHANNEL_PRIVATEYou haven't joined this channel/supergroup.
403CHANNEL_PUBLIC_GROUP_NAchannel/supergroup not available.
403CHAT_WRITE_FORBIDDENYou can't write in this chat.
400FROM_MESSAGE_BOT_DISABLEDBots can't use fromMessage min constructors.
400MSG_ID_INVALIDInvalid message ID provided.
400PERSISTENT_TIMESTAMP_EMPTYPersistent timestamp empty.
400PERSISTENT_TIMESTAMP_INVALIDPersistent timestamp invalid.
500PERSISTENT_TIMESTAMP_OUTDATEDChannel internal replication issues, try again later (treat this like an RPC_CALL_FAIL).
400PINNED_DIALOGS_TOO_MUCHToo many pinned dialogs.
400RANGES_INVALIDInvalid range provided.
400USER_BANNED_IN_CHANNELYou're banned from sending messages in supergroups/channels.

Can bots use this method?

Yes

Working with Updates

How to subscribe to updates and handle them properly.