@mtproto/core
![Telegram channel](https://img.shields.io/badge/Telegram-channel-blue?style=flat-square&logo=telegram)
Telegram API (MTProto) client library for browser
Install
yarn add @mtproto/core -E
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';
const mtproto = new MTProto({
api_id,
api_hash,
test: true,
});
mtproto.call('help.getNearestDc').then(result => {
console.log(`country:`, result.country);
});
Login
const phone = '+9996621111';
const code = '22222';
mtproto
.call('auth.sendCode', {
phone_number: phone,
settings: {
_: 'codeSettings',
},
})
.then(result => {
mtproto
.call('auth.signIn', {
phone_code: code,
phone_number: phone,
phone_code_hash: result.phone_code_hash,
})
.then(result => {
console.log(`auth.signIn[result]:`, result);
})
.catch(error => {
if (error.error_message === 'SESSION_PASSWORD_NEEDED') {
}
});
});
API
mtproto.call(method, options) => Promise
Select method and options from methods list. Promise.then
contain result. Promise.catch
contain error with the error_code
and error_message
properties.
Example:
mtproto.call('help.getNearestDc').then(result => {
console.log(`result:`, result);
}).catch(error => {
console.log(`error:`, error);
});
mtproto.updates.on(UpdatesName, handler)
Authorized users are being Updates. They can be handled using mtproto.updates.on
. 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.changeDc(dcId)
If a migration error occurs, you can use this function to change the data center.
Example:
mtproto
.call('auth.sendCode', {
phone_number: '+9996621111',
settings: {
_: 'codeSettings',
},
})
.then(result => {
})
.catch(error => {
if (error.error_message.includes('_MIGRATE_')) {
const [item, dcId] = error.error_message.split('_MIGRATE_');
mtproto.changeDc(dcId);
}
});
getSRPParams({ g, p, salt1, salt2, gB, password }) => { A, M1 }
For more information about parameters, see the article on the Telegram website.
Example 2FA (Two-factor authentication):
const { getSRPParams } = require('@mtproto/core');
const password = 'YOU_PASSWORD';
mtproto
.call('account.getPassword')
.then(async result => {
const { srp_id, current_algo, srp_B } = result;
const { salt1, salt2, g, p } = current_algo;
const { A, M1 } = await getSRPParams({
g,
p,
salt1,
salt2,
gB: srp_B,
password,
});
return mtproto.call('auth.checkPassword', {
password: {
_: 'inputCheckPasswordSRP',
srp_id,
A,
M1,
},
});
})
.then(result => {
console.log(`auth.checkPassword[result]:`, result);
});
Useful references