Пишем Бота для ОБУЧЕНИЯ и подготовки к СОБЕСЕДОВАНИЮ | telegram bot: Node.js + grammY

YOUTUBE · 01.12.2025 09:34

Ключевые темы и таймкоды

Введение в проект

0:00
  • Автор готовился к собеседованию и решил создать базу знаний по фронтенду.
  • Идея создать бота-помощника для автоматизации повторения вопросов.
  • Бот будет задавать вопросы по HTML, CSS, JavaScript и React.

Преимущества бота

0:57
  • Возможность добавлять новые вопросы и повторять их.
  • Бот поможет подготовиться к собеседованиям.
  • Автор канала "Помосков GS" расскажет, как создать бота на Node.js.

Основы работы Telegram-ботов

1:52
  • Пользователь отправляет сообщение боту, которое обрабатывается сервером Telegram.
  • Бот может отправлять сообщения, картинки, стикеры и видео.
  • Данные будут храниться на сервере в формате JSON.

Создание бота в Telegram

2:57
  • Создание бота через бота-фадера и получение токена.
  • Важно хранить токен безопасно.
  • Переход к развертыванию проекта на Node.js и npm.

Настройка проекта

3:54
  • Установка Node.js и npm.
  • Создание папки проекта и инициализация с помощью npm init.
  • Подключение необходимых библиотек для работы с Telegram.

Выбор библиотеки

5:36
  • Обзор популярных библиотек для работы с Telegram: Not Telegram Bot API, Telegraph, Grammy.
  • Выбор библиотеки Grammy для лаконичности и краткости.
  • Установка библиотек с помощью npm install.

Структура проекта

6:50
  • Создание файла package.json и папки node_modules.
  • Импорт класса Bot из библиотеки Grammy.
  • Начало написания кода для бота.

Создание бота

7:31
  • Создаем бота на основе импортированного класса, передавая токен.
  • Запускаем бота с помощью метода start.
  • Бот не работает без обработки сообщений.

Хранение токена

8:28
  • Создаем файл .env в корне проекта для хранения токена.
  • Импортируем библиотеку dotenv и используем токен в коде.
  • Создаем папку .gitignore для файла .env.

Настройка реакций

9:21
  • Устанавливаем слушатель событий для команд.
  • Реагируем на команды "старт", "help" и другие.
  • Используем метод reply для отправки сообщений.

Автоматическое обновление

12:16
  • Настраиваем автоматическое обновление с помощью npm.
  • Запускаем бота с помощью команды npm start.
  • Реагируем на события и сообщения.

Обработка ошибок

14:21
  • Добавляем обработку ошибок до запуска бота.
  • Импортируем необходимые классы и обрабатываем ошибки.
  • Выводим информацию об ошибках в консоль.

Создание клавиатуры

16:03
  • Создаем кастомную клавиатуру для команды "старт".
  • Добавляем кнопки с темами вопросов.
  • Отправляем клавиатуру пользователю с сообщением.

Обработка сообщений

18:00
  • Реагируем на несколько типов сообщений с помощью массива.
  • Получаем тему сообщения из контекста.
  • Проверяем работу обработчика сообщений.

Inline Keyboard

19:16
  • Создаем inline клавиатуру для отображения под сообщениями.
  • Добавляем inline keyboard в импорт.
  • Создаем и используем inline keyboard в коде.

Создание онлайн клавиатуры

19:41
  • Создаем клавиатуру с помощью метода text.
  • Передаем два аргумента: лейбл кнопки и данные.
  • Отправляем онлайн клавиатуру вместе с сообщением.

Обработка событий

20:39
  • Добавляем кнопку "отменить" с лейблом "cancel".
  • Реагируем на события с помощью метода on.
  • Проверяем данные колбека и отправляем сообщение при нажатии "cancel".

Завершение загрузки

21:19
  • Завершаем загрузку, когда нажимаем кнопку.
  • Отправляем сообщение "отменено" при нажатии "cancel".
  • Проверяем, что плашка загрузки исчезает.

Передача данных в колбек

22:43
  • Передаем данные в колбек через JSON.
  • Превращаем объекты в строки с помощью JSON.stringify.
  • Получаем доступ к данным колбека и обрабатываем их.

Обработка вопросов

25:32
  • Формируем вопросы по темам: с вариантом ответа и открытые.
  • Вопросы хранятся в формате JSON.
  • Создаем утилитарную функцию для выбора рандомного вопроса.

Выбор рандомного вопроса

27:40
  • Импортируем вопросы из JSON.
  • Создаем функцию для выбора рандомного вопроса по теме.
  • Используем метод Math.random для генерации случайного индекса.

Альтернативный подход

30:09
  • Используем библиотеку Random.js для рандомизации.
  • Устанавливаем библиотеку и импортируем класс Random.
  • Применяем метод Math.floor для округления в меньшую сторону.

Генерация случайного индекса

31:33
  • Использование метода integer для генерации числа.
  • Создание инстанса Random и вызов метода integer.
  • Рекомендация ознакомиться с библиотекой Random.

Экспорт функции

32:18
  • Экспорт функции в конец файла.
  • Импорт функции в файл index.js.

Поддержка и благодарность

32:46
  • Призыв к поддержке через комментарии и лайки.
  • Важность обратной связи для продвижения видео.

Получение и отправка случайного вопроса

33:36
  • Вызов функции для получения случайного вопроса.
  • Сохранение вопроса в переменную и отправка пользователю.

Различие вопросов с вариантами ответа и без

34:21
  • Различие вопросов с вариантами ответа и без.
  • Создание кнопок для вопросов с вариантами ответа.

Создание онлайн клавиатуры

35:21
  • Создание онлайн клавиатуры для вопросов с вариантами ответа.
  • Использование метода map для создания кнопок.

Обработка вопросов без вариантов ответа

38:46
  • Обработка вопросов без вариантов ответа.
  • Отправка ответа на открытый вопрос.

Функция для получения правильного ответа

39:44
  • Создание функции для получения правильного ответа.
  • Импорт и экспорт функции в файл utils.js.

Поиск вопроса по ID

40:32
  • Поиск вопроса по ID в массиве вопросов.
  • Возвращение правильного ответа или вопроса.

Дополнительные параметры для отправки ответа

42:36
  • Передача дополнительных параметров в сеть реплай.
  • Использование параметров для отображения ссылок на дополнительные материалы.

Обработка вопросов с вариантами ответа

43:09
  • Добавление опций для корректного отображения ссылок и разметки HTML.
  • Обработка вопросов с вариантами ответа: отсечение неверных ответов и завершение функции при корректном ответе.
  • Использование функции getCorrectAnswer для проверки ответа пользователя.

Обработка неверных ответов

44:05
  • Отсечение неверных ответов при наличии вариантов.
  • Использование метода split для разделения строки на массив.
  • Ответ пользователю с правильным ответом и завершением функции.

Проверка работы обработчика

45:39
  • Проверка работы обработчика колбекри.
  • Исправление ошибки при передаче темы вопроса.
  • Проверка работы с разными вариантами ответов.

Добавление случайного вопроса

47:54
  • Добавление кнопки "случайный вопрос" и доработка обработчика.
  • Переопределение темы вопроса при выборе "случайного вопроса".
  • Возвращение объекта с темой и вопросом.

Тестирование случайного вопроса

51:23
  • Проверка работы случайного вопроса и его темы.
  • Тестирование вопросов с вариантами ответа.
  • Успешное получение и обработка случайного вопроса.

Размещение бота на удаленном сервере

52:21
  • Размещение бота на удаленном сервере для стабильной работы.
  • Заливка проекта на GitHub и подготовка к клонированию на сервер.
  • Создание файла .gitignore для исключения ненужных файлов.

Создание репозитория на GitHub

53:21
  • Открываем GitHub, создаем новый репозиторий с названием "интервью бот".
  • Публикуем репозиторий, добавляем связь с локальным репозиторием.
  • Заливаем данные с локального репозитория в удаленный с помощью команды "git push origin main".

Настройка сервера на Selectel

54:10
  • Переходим на сервер Selectel, регистрируемся и создаем сервер.
  • Выбираем регион, источник образа и конфигурацию системы.
  • Устанавливаем сетевые диски и настраиваем пароль для root-пользователя.

Настройка сервера для запуска бота

56:35
  • Переходим в консоль сервера, обновляем пакеты и устанавливаем Git.
  • Клонируем репозиторий с GitHub и проверяем его содержимое.
  • Устанавливаем Node.js и npm, обновляем версии пакетов.

Запуск бота на сервере

58:58
  • Перезагружаем сервер и проверяем версии npm и Node.js.
  • Создаем файл .env с переменной окружения для бота.
  • Запускаем бота с помощью менеджера процессов pm2, проверяем его работу.

Тестирование бота

1:01:06
  • Тестируем бота, проверяем корректность работы приветствия и вопросов.
  • Проверяем случайный вопрос и завершаем работу.
  • Напоминаем о важности поддержки и оставляем ссылки на телеграм-канал и интенсив по JavaScript.