const express = require("express"); // npm i express const bodyParser = require("body-parser"); // npm i body-parser const { TelegramClient, utils } = require("telegram"); const { StoreSession } = require("telegram/sessions"); const app = express(); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); const port = 8080; // default port to listen const BASE_TEMPLATE = ` GramJS + Express {{0}} `; const PHONE_FORM = `
Phone (international format):
`; const CODE_FORM = `
Telegram code:
`; const PASSWORD_FORM = `
Telegram password:
`; const API_ID = -1; // Fill your API ID const API_HASH = ""; // Fill your API Hash // Single client; can use an object if you want to store multiple clients const client = new TelegramClient( new StoreSession("session_name"), API_ID, API_HASH, {} ); let phone; // define a route handler for the default home page app.get("/", async (req, res) => { if (await client.isUserAuthorized()) { const dialog = (await client.getDialogs({ limit: 1 }))[0]; let result = `

${dialog.title}

.`; for (const m of await client.getMessages(dialog.entity, { limit: 10 })) { result += formatMessage(m); } return res.send(BASE_TEMPLATE.replace("{{0}}", result)); } else { client.start({ phoneNumber: async () => { return phoneCallback.promise; }, phoneCode: async () => { return codeCallback.promise; }, password: async () => { return passwordCallback.promise; }, onError: (err) => console.log(err), }); return res.send(BASE_TEMPLATE.replace("{{0}}", PHONE_FORM)); } }); app.post("/", async (req, res) => { //To access POST variable use req.body()methods. if ("phone" in req.body) { phone = req.body.phone; phoneCallback.resolve(phone); return res.send(BASE_TEMPLATE.replace("{{0}}", CODE_FORM)); } if ("code" in req.body) { codeCallback.resolve(req.body.code); return res.send(BASE_TEMPLATE.replace("{{0}}", PASSWORD_FORM)); } if ("password" in req.body) { passwordCallback.resolve(req.body.code); res.redirect("/"); } console.log(req.body); }); function callbackPromise() { // helper method for promises let resolve, reject; const promise = new Promise((res, rej) => { resolve = res; reject = rej; }); return { promise, resolve, reject }; } function formatMessage(message) { let content = (message.text || "(action message or media)").replace( "\n", "
" ); return `

${utils.getDisplayName( message.sender )}: ${content}${message.date}

`; } const phoneCallback = callbackPromise(); const codeCallback = callbackPromise(); const passwordCallback = callbackPromise(); // callbacks for code and password also // then inside your grammy code when use sends phone do the following // start the Express server app.listen(port, async () => { client.session.setDC(2, "149.154.167.40", 80); client.setParseMode("html"); // Connect before fully starting the server await client.connect(); console.log(`server started at http://localhost:${port}`); });