/mtproto-core

Telegram API JS (MTProto) client library for browser and nodejs

Primary LanguageJavaScriptGNU General Public License v3.0GPL-3.0

@mtproto/core

NPM Travis Downloads Telegram channel

Telegram API JS (MTProto) client library for browser and nodejs

Install

yarn add @mtproto/core -E
# or
npm i @mtproto/core -E

Quick start

You need api_id and api_hash. If you do not have them yet, then get them according to the official instructions: creating your Telegram application.

const { MTProto } = require('@mtproto/core');

const api_id = 'YOU_API_ID';
const api_hash = 'YOU_API_HASH';

// 1. Create an instance
const mtproto = new MTProto({
  api_id,
  api_hash,
});

// 2. Get the user country code
mtproto.call('help.getNearestDc').then(result => {
  console.log(`country:`, result.country);
});

Guides

API

new MTProto({ api_id, api_hash, test, customLocalStorage }) => mtproto

api_id: number and api_hash: string

api_id and api_hash are required. If you do not have them yet, then get them according to the official instructions: creating your Telegram application.

test: boolean

Default: false. Use test data centers. On test servers, you can use test phone numbers.

customLocalStorage: localStorage

Default for browser: window.localStorage. Default for nodejs: node-localstorage. Custom storage for save auth data. Your localStorage must follow this API:

class MyAsyncLocalStorage {
  setItem(key: string, value: string): Promise<void>;
  getItem(key: string): Promise<string|null>;
}

We have ready-made storage:

  1. tempLocalStorage only stores data while the script is running

Example:

const { tempLocalStorage } = require('@mtproto/core/src/storage/temp');

const mtproto = new MTProto({
  customLocalStorage: tempLocalStorage,
});

mtproto.call(method, params, options) => Promise

method: string

Method name from methods list.

params: object

Parameters for method from https://core.telegram.org/method/{method}#parameters.

If you need to pass a constructor use _. Example for users.getFullUser:

const params = {
  id: {
    _: 'inputUserSelf',
  },
};

options.dcId: number

Specific DC id. By default, it is 2. You can change the default value using mtproto.setDefaultDc method.

options.syncAuth: boolean

Default: true. Copy authorization to all DC if the response contains auth.authorization.

Example:

mtproto.call('help.getNearestDc', {}, {
  dcId: 1
}).then(result => {
  console.log('result:', result);
  // { _: 'nearestDc', country: 'RU', this_dc: 1, nearest_dc: 2 }
}).catch(error => {
  console.log('error.error_code:', error.error_code);
  console.log('error.error_message:', error.error_message);
});

mtproto.updates.on(updates, listener)

Method for handles updates.

Example of handling a updateShort with updateUserStatus:

mtproto.updates.on('updateShort', message => {
  const { update } = message;

  if (update._ === 'updateUserStatus') {
    const { user_id, status } = update;

    console.log(`User with id ${user_id} change status to ${status}`);
  }
});

mtproto.setDefaultDc(dcId) => Promise

If a migration error occurs, you can use this function to change the default data center. You can also use options.dcId.

See the example in the authentication.

getSRPParams({ g, p, salt1, salt2, gB, password }) => { A, M1 }

Function to calculate parameters for 2FA (Two-factor authentication). For more information about parameters, see the article on the Telegram website.

See the example in the authentication.

Useful references