Telegram API JS (MTProto) client library for browser and nodejs
- Actual. 121 layer in the API scheme
- Fast. Uses WebSocket for browser and TCP for nodejs
- Easy. Cryptography and bytes is hidden. Just make requests to the API
- Smart. Automatically sync authorization on all DC's
- Events. Subscribe to updates via the EventEmitter API
- 2FA. Use the library's built-in function to calculate 2FA parameters
yarn add @mtproto/core -E
# or
npm i @mtproto/core -E
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. Provide params for initConnection method (optional)
mtproto.updateInitConnectionParams({
app_version: '10.0.0',
});
// 3. Get the user country code
mtproto.call('help.getNearestDc').then(result => {
console.log(`country:`, result.country);
});
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.
Default: false
. Use test data centers. On test servers, you can use test phone numbers.
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:
- tempLocalStorage only stores data while the script is running
Example:
const { tempLocalStorage } = require('@mtproto/core/src/storage/temp');
const mtproto = new MTProto({
customLocalStorage: tempLocalStorage,
});
Method name from methods list.
Parameters for method
from https://core.telegram.org/method/{method}#parameters
.
-
If the method needs the
flags
parameter,flags
is calculated automatically 🙃 -
If you need to pass a constructor use
_
. Example for users.getFullUser:
const params = {
id: {
_: 'inputUserSelf',
},
};
Specific DC id. By default, it is 2
. You can change the default value using mtproto.setDefaultDc method.
Default: true
. Copy authorization to all DC if the response contains auth.authorization
.
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);
});
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}`);
}
});
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.
Provide params for initConnection method. I recommend running this function immediately after creating an instance of MTProto.
See the example in the quick start.
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.
- API methods — https://core.telegram.org/methods
- API schema — https://core.telegram.org/schema