Бот для Telegram на Node.js, TypeScript и Telegraf js

  Рет қаралды 31,690

PurpleSchool | Anton Larichev

PurpleSchool | Anton Larichev

Күн бұрын

Используем архитектурный подход для создания бота на Node.js. Для работы с Telegram будем использовать Тelegraf, а JavaScript заменим на TypeScript. Всё будем реализовываться на классах с инверсией зависимостей.
🔗 Ссылки:
⚡️Полный курс по Node.js с нуля, с архитектурой и паттернами: purpleschool.ru/course/nodejs
⚡️Курс по TypeScript и паттернам проектирования: purpleschool.ru/course/typesc...
Telegram канал с полезными советами: t.me/purple_code_channel
Все мои курсы: purpleschool.ru
Разделы видео:
0:00 - Введение
0:08 - Что будем делать?
1:32 - Создание бота в Telegram
2:39 - Подготовка проекта
4:27 - Установка зависимостей и сборка
6:40 - Сервис конфигурация и dotenv
14:40 - Класс бота
20:10 - Типизация контекста
22:32 - Создание класса команд
25:58 - Создание команды start
35:11 - Локальное хранение сессий
36:44 - Запуск бота
40:06 - Заключение

Пікірлер: 117
@PurpleSchool
@PurpleSchool Жыл бұрын
🔗 Ссылки: ⚡Полный курс по Node.js с нуля, с архитектурой и паттернами: purpleschool.ru/course/nodejs ⚡Курс по TypeScript и паттернам проектирования: purpleschool.ru/course/typescript
@user-ki1hh7nb5e
@user-ki1hh7nb5e Жыл бұрын
Отличное видео! Спасибо! Понравилось про структурирование приложения. Очень интересно посмотреть на практическое применение DI. Жду с нетерпением продолжения!
@PurpleSchool
@PurpleSchool Жыл бұрын
Хорошо) так же можно глянуть у меня в курсе, разобрано детально
@r3dkin
@r3dkin Жыл бұрын
Дякую за відео🙏 Цікавий та корисний контент😃
@PurpleSchool
@PurpleSchool 4 ай бұрын
👍
@diggerdog001
@diggerdog001 Жыл бұрын
Топ контент подъехал очередной от Антохи 🔥🔥🔥
@PurpleSchool
@PurpleSchool Жыл бұрын
Спасибо!
@sergeymurashov4365
@sergeymurashov4365 Жыл бұрын
Объяснение прекрасное. Отдельный плюсик за чистоту речи )
@PurpleSchool
@PurpleSchool Жыл бұрын
Спасибо!
@evgeniykireev8572
@evgeniykireev8572 Ай бұрын
Cупер полезное видео! Спасибо вам)
@PurpleSchool
@PurpleSchool Ай бұрын
Пожалуйста!
@shoxruxbekmamadaliyev
@shoxruxbekmamadaliyev Жыл бұрын
Good job bro, I very like this structure!
@PurpleSchool
@PurpleSchool Жыл бұрын
Thanks!
@germanmanvelov
@germanmanvelov 4 ай бұрын
Спасибо, было полезно в качестве наглядного базового бота для вникающего в эту сферу.
@PurpleSchool
@PurpleSchool 4 ай бұрын
Пожалуйста
@germanmanvelov
@germanmanvelov 4 ай бұрын
@@PurpleSchool И курсы у вас классные. Я уже прошел по Nest, прохожу по TS, и далее микросервисы и Node. Хотелось бы, конечно, увидеть по Angular еще. Сайт с курсами тоже оч нравится, как сделан.
@PurpleSchool
@PurpleSchool 4 ай бұрын
@@germanmanvelov спасибо! Старались сделать максимально удобную платформу.
@luckytima2315
@luckytima2315 Жыл бұрын
КАЙФФФФ!! Вы прям мысли читаете , везде на питоне боты (
@PurpleSchool
@PurpleSchool Жыл бұрын
Супер 👍
@burenkov
@burenkov Жыл бұрын
Спасибо! Много полезной информации👍
@PurpleSchool
@PurpleSchool Жыл бұрын
Пожалуйста!
@FobosWorld
@FobosWorld Жыл бұрын
Как с такой архитектурой работать со сценами и везердами?
@user-yj4fe8gq7i
@user-yj4fe8gq7i 3 ай бұрын
Есть сылка на гитхаб (код из видео)?
@user-qf3zt5mm2h
@user-qf3zt5mm2h Жыл бұрын
Когда будет видео как создавать сцены ?
@ilyamartynov2743
@ilyamartynov2743 Жыл бұрын
Я бы посмотрел реализацию с архитектурой на NestJS
@PurpleSchool
@PurpleSchool Жыл бұрын
Буду иметь ввиду)
@lizaleiko3580
@lizaleiko3580 Жыл бұрын
Подскажите, пожалуйста, для чего сделали сервис по чтению .env, почему нельзя просто читать переменные из него? не совсем поняла этот нюанс по видео
@PurpleSchool
@PurpleSchool Жыл бұрын
Чтобы выделить логику получения переменных окружения. Скажем если мы захоти получить из стороннего сервиса, к примеру Vault, мы сможем просто в 1-м месте заменить реализация сервиса.
@user-pe3tc1tp4c
@user-pe3tc1tp4c Жыл бұрын
Добрый день, хотелось бы спросить, а нормально ли в конструкторе делать какую-то логику, просто мне всегда казалось что это не очень хорошее для этого место
@PurpleSchool
@PurpleSchool Жыл бұрын
Если логика должна каждый раз выполняться при инициализации объекта, то нормально.
@mkonin
@mkonin Жыл бұрын
Интересный опыт был ) найти бы ещё примеры ) чтоб также с классами ) чтото гитхаб пока не особо балует )
@PurpleSchool
@PurpleSchool Жыл бұрын
У меня целый курс, где я показываю как строить архитектуру на классах: purpleschool.ru/course/nodejs
@dev-zb9mg
@dev-zb9mg 2 ай бұрын
Да, видео по логгированию было круто! Если можно, рассмотрите Pino, пожалуйста.
@maxim477
@maxim477 Жыл бұрын
Здравствуйте, Большое спасибо за это видео. Всё понятно. Для тестового задания не могу найти хорошую архитектуру папок, в интернете на эту тему практически ничего. Не могли бы Вы поделиться архитектурой, которую Вы использовали/используете?
@PurpleSchool
@PurpleSchool Жыл бұрын
Привет! Мы активно рассматриваем её в курсе Node: purpleschool.ru/course/nodejs
@nurmuhammadkholmuhammadov9643
@nurmuhammadkholmuhammadov9643 Жыл бұрын
не могу реализовать сцена кто то знает как ?
@romankornienko7268
@romankornienko7268 5 ай бұрын
Буду рад, если добавите видео про то, как организовать работу со сценам (scenes)
@RogerDearly
@RogerDearly Жыл бұрын
Привет. Спасибо за информативное видео! Можете снять ролик про ваш neovim сетап, какими плагинами пользуетесь ? Было бы интересно. Ну и бы ссылка на ваш сетап не помешало бы)
@PurpleSchool
@PurpleSchool Жыл бұрын
Всё на моем канале со ссылками: kzbin.info/www/bejne/aoHdhIGEaZqnmaM
@RogerDearly
@RogerDearly Жыл бұрын
@@PurpleSchool спасибо за ответ! Я в итоге нашёл ваше видео про AstroVim и скачал его. Довольно полезный конфиг, особенно для ленивых как я :D
@Sergey_Klimov
@Sergey_Klimov Ай бұрын
Ну, умоляю вас. Покажите как создавать wizard сцены с таким подходом. Я пробую у меня во-первых с typescript не дружит логика, во-вторых не могу его нормально зарегистрировать через middleware. Хотя по логике вещей чувствую, что какую-то микродеталь упускаю. Контекст ctx не имеет поля scene (а как следствие и enter), потому что не могу понять как зарегистрировать сцену.
@sandorium
@sandorium 8 ай бұрын
17:00 а чего не сделать что-то типа const configService = new ConfigService(); export configService; в самом конфиг сервисе и все будуть брать один объект конфига.
@19n1ght
@19n1ght Жыл бұрын
Почему bot в конструкторе Command имеет модификатор доступа public а не protected?
@PurpleSchool
@PurpleSchool Жыл бұрын
Согласен, protected было бы правильнее
@19n1ght
@19n1ght Жыл бұрын
@@PurpleSchool хорошее видео! и вообще на канале много полезного. спасибо!
@PurpleSchool
@PurpleSchool Жыл бұрын
Спасибо!
@jamjam3337
@jamjam3337 Жыл бұрын
👏👍💥
@PurpleSchool
@PurpleSchool Жыл бұрын
👍
@Sergey_Klimov
@Sergey_Klimov 2 ай бұрын
Хммм, интересный подход. Я только одного никак не пойму - где обработчики ошибок?)) Насколько я понимаю все эти ctx.reply - это асинхронщина же. Понятно, что ни отрабатывают в рамках коллбэка и поэтому работают. Но, а где же try/catch? Может я чего то не понимаю конечно
@siparat842
@siparat842 Жыл бұрын
Тема для следующего видео: Визуализация архитектуры c4. Инструменты для проектирования. Правила проектирования
@vlad_prime
@vlad_prime Жыл бұрын
А как потом добавить новые команды?
@PurpleSchool
@PurpleSchool Жыл бұрын
Создать новый command и его подключить в app.ts в массив команд
@konterrobinson7612
@konterrobinson7612 Жыл бұрын
👍👍👍👍👍
@PurpleSchool
@PurpleSchool Жыл бұрын
👍
@user-hp2cg6px8c
@user-hp2cg6px8c Жыл бұрын
Я уже на середине ролика, но я не понимаю: а что мы делаем? Какой функционал у бота будет?
@PurpleSchool
@PurpleSchool Жыл бұрын
У этого, кнопки и обработка событий, но это основа для бота, который вы можете сами доделать под себя.
@user-ql4xu5qu2u
@user-ql4xu5qu2u Жыл бұрын
Половина видео, какие-то обвязки над обвязками, абстракции, воюет с типизацией и тд
@user-wh1tt7cd1b
@user-wh1tt7cd1b 9 ай бұрын
@@user-ql4xu5qu2u да, да. А по факту просто ставим лайк либо дизлайк ))
@witseid
@witseid Жыл бұрын
Очень не хватает вывода нажимаемых клавиш где-то в углу. Мне, как новичку в вим, непонятны некоторые хоткеи.
@PurpleSchool
@PurpleSchool Жыл бұрын
Добавлю!
@polioann
@polioann Жыл бұрын
как можно избежать коллизий в callback данных? ("course_like", "course_dislike")
@PurpleSchool
@PurpleSchool Жыл бұрын
Не очень понял вопрос.
@polioann
@polioann Жыл бұрын
@@PurpleSchool В больших проектах может быть много похожих действий и случайно можно дать называние которое уже существует
@PurpleSchool
@PurpleSchool Жыл бұрын
Делать сцены, которые ограничивают набор доступных в текущий момент действий в зависимости от сцены
@dmytrokosenko6517
@dmytrokosenko6517 7 ай бұрын
А как данный проект развернуть на Vercel?
@PurpleSchool
@PurpleSchool 7 ай бұрын
Как и любой проект на ноде
@dmytrokosenko6517
@dmytrokosenko6517 7 ай бұрын
@@PurpleSchool вы уверены? Просто я пытаюсь развернуть бота, а мне Vercel пишет ошибка 500. Если я добавляю webhook в bot.launch, то работает, но не полностью
@alexeyfilippov42
@alexeyfilippov42 Жыл бұрын
Предлагаю тему для видео: Иерархия для каталога на nestes set, вид хранения в sql бд и работа с ней вставка, перемещение по ветке, удаление + перерасчет связей. так же как его оптимально рисовать на фронте, нативный или реакт к примеру
@PurpleSchool
@PurpleSchool Жыл бұрын
У меня есть видео по отрисовке вложенных меню любой вложенности: kzbin.info/www/bejne/r32ygKN3g72DZ6c&ab_channel=PurpleSchool%7CAntonLarichev
@alexeyfilippov42
@alexeyfilippov42 Жыл бұрын
@@PurpleSchool В общем глянул ролик, это супер нетипичный случай) практический пример бы рендерить из состояния.. А всё-таки реализацию классического иерархического дерева с использованием nested было бы любопытно посмотреть, потому что в интернете совсем мало о такой реализации контента
@alexeyfilippov42
@alexeyfilippov42 Жыл бұрын
Сегодня практике ради написал свое дерево на реакте, но с плоским списком. Для небольших структур самое то, но работа с ним конечно потная
@dev-zb9mg
@dev-zb9mg 2 ай бұрын
Антон, спасибо за видео! 1) У вас есть возможность отключать подсказки в IDEA? Они сбивают когда смотрю в ваш код, там и так много текста и ещё подсказки добавляют. 2) Вы используете vim? Можете поделиться впечатлениями?) Долго учились? Как давно используете? Сильно ли выросла продуктивность? Это могло бы стать темой для видеоролика, но буду признателен и за текст тоже :)
@PurpleSchool
@PurpleSchool 2 ай бұрын
Привет! Видео про vim: kzbin.info/www/bejne/h2LKepWGeringpIsi=tM4SdDKaj5AMhgvz
@dev-zb9mg
@dev-zb9mg 2 ай бұрын
@@PurpleSchool ого, вы прямо на опережение) Благодарю!
@Sergey_Klimov
@Sergey_Klimov Ай бұрын
Я попробовал обычную сцену создать с таким подходом. Все, я сдаюсь. Одни ошибки
@sandorium
@sandorium 8 ай бұрын
для архитектуры и поддержки надо вынести все значения для лайк/дислайк в enums а не прямо в функциях писать.
@PurpleSchool
@PurpleSchool 8 ай бұрын
Да, верно
@user-hf8dw2wp6x
@user-hf8dw2wp6x Жыл бұрын
я фронт, решил для себя разобраться в беке на ноде и у меня возникает ощущение - как будто бы на разных языках пишем)
@PurpleSchool
@PurpleSchool Жыл бұрын
Все вполне похоже)
@Sevelay
@Sevelay Жыл бұрын
Если ты думаешь что у Telegram плохая документация, значит ты просто не видел вк)
@PurpleSchool
@PurpleSchool Жыл бұрын
Я говорил про библиотеку Telegraf
@nod745
@nod745 Жыл бұрын
@@PurpleSchool О, да. Документация скудная и при поиске примеров приходится учитывать версию телеграфа. Это та ещё боль, если особо не разбираешься в api самой телеги. Когда-то пришлось потратить много нервов и времени при поиске рабочих реализаций в каналах по телеграфу
@Mikalai-yc7yy
@Mikalai-yc7yy Жыл бұрын
у grammy чёткая дока
@PurpleSchool
@PurpleSchool Жыл бұрын
Да, глянул, неплохо
@gamewithrap
@gamewithrap 11 ай бұрын
Слова громкие, типа "используем архитектурный подход", "инверсия зависимостей". Очень красиво получилось, так как там всего 1 команда. А когда будет много команд, когда будет состояние, то вот этот вот паттерн, который очень похож на middleware, будет источником лапши Более сложные боты имеют не просто состояние из 1 флага. Обычно бывает 10-20 usecase-ов, и очень сложные состояния, когда без конечного автомата не обойтись, Ваш вариант не уменьшает сложность, он лишь добавляет красивую абстракцию, которая течет уже с первых строк.
@butnothero7192
@butnothero7192 Жыл бұрын
Здравствуйте, Антон. Записывая начало видео, Вы сидели на коленях перед камерой?) Просто относительно стола Вы находитесь очень низко (телевизор тоже низко как-то).
@PurpleSchool
@PurpleSchool Жыл бұрын
Нет, это кресло мешок около телевизора)
@pablo2100
@pablo2100 6 ай бұрын
Мой первый опыт написания бота. За отсутствие DI, конечно, жирный минус, на этом моменте хотелось закрыть видео вообще. Но всё же спасибо, было интересно, попробовал, бот работает.
@ledorub6682
@ledorub6682 Жыл бұрын
Видео "ни-о-чем")) Яркий пример перенагруженности логической конструкции. Кстати, этому подвержены все любители TypeScript и прочих "улучшалок". В итоге вы не код учитесь писать и разрабатывать алгоритмы взаимодействия, а учитесь использовать безчисленное количество этих самых улучшалок, тратя уйму времени.
@PurpleSchool
@PurpleSchool Жыл бұрын
То что вы назвали логической конструкцией, является архитектурой проекта. Можете писать без TS и в одном файле, но тогда забудьте о больших, поддерживаемых и масштабируемых проектах. И как раз «алгоритмы взаимодействия» между компонентами вашего проекта вы и должны прорабатывать.
@ledorub6682
@ledorub6682 Жыл бұрын
@@PurpleSchool Это кто сказал забыть?.. что за чушь).. С чего вы это взяли? Люди пишут очень большие проекты прекрасно и с легкостью на нативе и без всяких улучшалок/"убыстрялок". Алгоритмы взаимодействия тут ни при чем, ваш TypeScript - всего лишь помошник для головожопых юнных кодеров не допускать ошибок с типизацией на ровном месте.
@user-tk8mx2kv7t
@user-tk8mx2kv7t Жыл бұрын
@@ledorub6682 Сразу видно, что вы не знаете, что такое TypeScript, и скорее всего не имели дело с большими проектами. А если и имели, то это код, написанный вами давно, в котором только вы знаете как всё работает.
@ledorub6682
@ledorub6682 Жыл бұрын
@@user-tk8mx2kv7t ох и насмешил, сынок).. вы еще в школу не ходили - я уже разработкой занимался.. вижу что критика для вас неприемлема, поэтому лишь скажу - все улучшалки созданы с одной целью, ускорить процесс коммерческой разработки. Причем чтоб их освоить приходится тратить в разы больше времени, чем на синтаксис и основы построения алгоритмов, то есть на само программирование.
@ooops4333
@ooops4333 Жыл бұрын
@@ledorub6682 неадекват какой то
@romanmed9035
@romanmed9035 Жыл бұрын
конфеты мишка косолапый хрустят так громко что плохо слышно что рассказывает автор. за те деньги что стоят курсы я могу купить много килограммов этих и других вкусных конфет. вот и выбрал лучше купить конфет, чем курсы. автор так увлекательно рассказывает, что я незаметно съел больше конфет чем предполагал.
@PurpleSchool
@PurpleSchool Жыл бұрын
За 1790 рублей думаю конфет будет не так уж много. Да и много сладкого вредно.
@romanmed9035
@romanmed9035 Жыл бұрын
@@PurpleSchool у Вас курсы по цене конфет? а я думал десятки тысяч как у всех. надо посмотреть. спасибо за пояснение.
@PurpleSchool
@PurpleSchool Жыл бұрын
Да, для самостоятельного прохождения 1790. Если есть желание работать с наставником и код ревью 6350. И те и те цены для рынка досрочно приемлемы)
@just__did__it
@just__did__it Жыл бұрын
Зачем ты это написал? Теперь я хочу конфеты мишка косолапый.
@romanmed9035
@romanmed9035 Жыл бұрын
@@just__did__it надеюсь у Вас получится из поесть.
@David-Freeman
@David-Freeman 8 ай бұрын
"Не забудем добавить .env в .gitignore" - Это еще почему?
@PurpleSchool
@PurpleSchool 8 ай бұрын
Потому что вы же не хотите, чтобы ваши приватные ключи или пароли от базы улетели в git и хранились в открытом виде?
@David-Freeman
@David-Freeman 8 ай бұрын
@@PurpleSchool Правильно ли я понимаю, что человек, склонировавший этот репозиторий себе на компьютер, установивший nodejs пакеты и запустивший npm start получит ошибку из-за отсутствия .env файла. Не является ли это фатальным нарушением целостности?
@PurpleSchool
@PurpleSchool 8 ай бұрын
@@David-Freeman получит ошибку. И конечно нарушением это не является, так как хранить любую приватную информацию на Git категорически нельзя в открытом виде. Более того env файл будет разный для локальной разработки, stage и прода. И человек для запуска должен собрать нужный себе.
@David-Freeman
@David-Freeman 8 ай бұрын
@@PurpleSchool "человек для запуска должен собрать нужный себе." Откуда человек это знает? Откуда он должен знать, какие там параметры вообще? Вывод: .env должен присутствовать, но секретные данные должны быть заменены, скажем, звездочками.
@PurpleSchool
@PurpleSchool 8 ай бұрын
@@David-Freeman он будет знать, так как вы работаете в одной команде. Структура env обычно описывается в инструкции по запуску в Readme, у вас же должна быть к репозиторий полная инструкция
Основы DI и Dagger, как работает, настройка в проекте
17:31
Android Broadcast. Все об Андроид разработке
Рет қаралды 66 М.
ОБЯЗАТЕЛЬНО СОВЕРШАЙТЕ ДОБРО!❤❤❤
00:45
Survive 100 Days In Nuclear Bunker, Win $500,000
32:21
MrBeast
Рет қаралды 81 МЛН
Получилось у Миланы?😂
00:13
ХАБИБ
Рет қаралды 5 МЛН
Prisma - лучшая ORM для Node.js
23:45
PurpleSchool | Anton Larichev
Рет қаралды 29 М.
Валидация формы c Formik и Yup в React JS
7:47
Типичный Веб Разработчик
Рет қаралды 1,3 М.
Приключения Node.js в продакшене
39:12
Yandex for Developers
Рет қаралды 9 М.
TelegramBot на NestJS с ChatGPT на борту
38:31
WebMogilevtsev
Рет қаралды 4,6 М.
ОБЯЗАТЕЛЬНО СОВЕРШАЙТЕ ДОБРО!❤❤❤
00:45