12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- const { TelegramClient } = require("telegram");
- const { StoreSession } = require("telegram/sessions");
- const input = require("input");
- const { NewMessage } = require("telegram/events"); // npm i input
- const API_ID = -1; // Fill your API ID
- const API_HASH = ""; // Fill your API Hash
- const STATES = {
- EMPTY: "no state (default)",
- ASK_FOR_NAME: "asks the user for a name",
- ASK_FOR_LAST_NAME: "asks the user for their last name",
- ASK_FOR_AGE: "asks the user for their age",
- }; // different states
- const storage = {}; // holds the states; can be saved to a json file on disconnect for consistency
- function getState(event) {
- // gets the state for a new message event using chatId+senderId;
- return getData(event, "state") || STATES.EMPTY;
- }
- function setState(event, state) {
- // sets the state for a new message event
- setData(event, "state", state);
- }
- function setData(event, name, value) {
- // stores a value in storage
- const key =
- event.chatId.toString() + ":" + (event.senderId || "Admin").toString();
- if (!(key in storage)) {
- storage[key] = {};
- }
- storage[key][name] = value;
- }
- function getData(event, name) {
- const key =
- event.chatId.toString() + ":" + (event.senderId || "Admin").toString();
- if (!(key in storage)) {
- return undefined;
- }
- return storage[key][name];
- }
- (async () => {
- console.log("Loading interactive example...");
- const client = new TelegramClient(
- new StoreSession("session_name"),
- API_ID,
- API_HASH,
- {
- connectionRetries: 5,
- }
- );
- await client.start({
- botAuthToken: async () => await input.text("Please enter your bot token: "),
- onError: (err) => console.log(err),
- });
- console.log("You should now be connected.");
- client.addEventHandler(async (event) => {
- const message = event.message;
- const state = getState(message);
- switch (state) {
- case STATES.EMPTY:
- await message.reply({ message: "Heyy!. Please send your first name" });
- setState(message, STATES.ASK_FOR_NAME);
- break;
- case STATES.ASK_FOR_NAME:
- const name = message.text;
- setData(message, "firstName", name);
- await message.reply({ message: "Please send your last name" });
- setState(message, STATES.ASK_FOR_LAST_NAME);
- break;
- case STATES.ASK_FOR_LAST_NAME:
- const lastName = message.text;
- setData(message, "lastName", lastName);
- await message.reply({ message: "Please send your age as a number" });
- setState(message, STATES.ASK_FOR_AGE);
- break;
- case STATES.ASK_FOR_AGE:
- const age = message.text;
- if (Number.isNaN(Number(age))) {
- await message.reply({ message: "Wrong number; please try again" });
- break;
- }
- await message.reply({ message: "Thank you!." });
- await message.reply({
- message: "First Name: " + getData(message, "firstName"),
- });
- await message.reply({
- message: "Last Name: " + getData(message, "lastName"),
- });
- await message.reply({ message: "Age: " + age });
- setState(message, STATES.EMPTY);
- }
- }, new NewMessage());
- })();
|