index.js 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. const { TelegramClient } = require("telegram");
  2. const { StoreSession } = require("telegram/sessions");
  3. const input = require("input");
  4. const { NewMessage } = require("telegram/events"); // npm i input
  5. const API_ID = -1; // Fill your API ID
  6. const API_HASH = ""; // Fill your API Hash
  7. const STATES = {
  8. EMPTY: "no state (default)",
  9. ASK_FOR_NAME: "asks the user for a name",
  10. ASK_FOR_LAST_NAME: "asks the user for their last name",
  11. ASK_FOR_AGE: "asks the user for their age",
  12. }; // different states
  13. const storage = {}; // holds the states; can be saved to a json file on disconnect for consistency
  14. function getState(event) {
  15. // gets the state for a new message event using chatId+senderId;
  16. return getData(event, "state") || STATES.EMPTY;
  17. }
  18. function setState(event, state) {
  19. // sets the state for a new message event
  20. setData(event, "state", state);
  21. }
  22. function setData(event, name, value) {
  23. // stores a value in storage
  24. const key =
  25. event.chatId.toString() + ":" + (event.senderId || "Admin").toString();
  26. if (!(key in storage)) {
  27. storage[key] = {};
  28. }
  29. storage[key][name] = value;
  30. }
  31. function getData(event, name) {
  32. const key =
  33. event.chatId.toString() + ":" + (event.senderId || "Admin").toString();
  34. if (!(key in storage)) {
  35. return undefined;
  36. }
  37. return storage[key][name];
  38. }
  39. (async () => {
  40. console.log("Loading interactive example...");
  41. const client = new TelegramClient(
  42. new StoreSession("session_name"),
  43. API_ID,
  44. API_HASH,
  45. {
  46. connectionRetries: 5,
  47. }
  48. );
  49. await client.start({
  50. botAuthToken: async () => await input.text("Please enter your bot token: "),
  51. onError: (err) => console.log(err),
  52. });
  53. console.log("You should now be connected.");
  54. client.addEventHandler(async (event) => {
  55. const message = event.message;
  56. const state = getState(message);
  57. switch (state) {
  58. case STATES.EMPTY:
  59. await message.reply({ message: "Heyy!. Please send your first name" });
  60. setState(message, STATES.ASK_FOR_NAME);
  61. break;
  62. case STATES.ASK_FOR_NAME:
  63. const name = message.text;
  64. setData(message, "firstName", name);
  65. await message.reply({ message: "Please send your last name" });
  66. setState(message, STATES.ASK_FOR_LAST_NAME);
  67. break;
  68. case STATES.ASK_FOR_LAST_NAME:
  69. const lastName = message.text;
  70. setData(message, "lastName", lastName);
  71. await message.reply({ message: "Please send your age as a number" });
  72. setState(message, STATES.ASK_FOR_AGE);
  73. break;
  74. case STATES.ASK_FOR_AGE:
  75. const age = message.text;
  76. if (Number.isNaN(Number(age))) {
  77. await message.reply({ message: "Wrong number; please try again" });
  78. break;
  79. }
  80. await message.reply({ message: "Thank you!." });
  81. await message.reply({
  82. message: "First Name: " + getData(message, "firstName"),
  83. });
  84. await message.reply({
  85. message: "Last Name: " + getData(message, "lastName"),
  86. });
  87. await message.reply({ message: "Age: " + age });
  88. setState(message, STATES.EMPTY);
  89. }
  90. }, new NewMessage());
  91. })();