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

Поделиться
HTML-код
  • Опубликовано: 28 авг 2024

Комментарии • 117

  • @PurpleSchool
    @PurpleSchool  Год назад +3

    🔗 Ссылки:
    ⚡Полный курс по Node.js с нуля, с архитектурой и паттернами: purpleschool.ru/course/nodejs
    ⚡Курс по TypeScript и паттернам проектирования: purpleschool.ru/course/typescript

  • @luckytima2315
    @luckytima2315 Год назад +8

    КАЙФФФФ!! Вы прям мысли читаете , везде на питоне боты (

  • @sergeymurashov4365
    @sergeymurashov4365 Год назад +5

    Объяснение прекрасное.
    Отдельный плюсик за чистоту речи )

  • @user-ki1hh7nb5e
    @user-ki1hh7nb5e Год назад +4

    Отличное видео! Спасибо!
    Понравилось про структурирование приложения.
    Очень интересно посмотреть на практическое применение DI.
    Жду с нетерпением продолжения!

    • @PurpleSchool
      @PurpleSchool  Год назад +1

      Хорошо) так же можно глянуть у меня в курсе, разобрано детально

  • @germanmanvelov
    @germanmanvelov 5 месяцев назад +1

    Спасибо, было полезно в качестве наглядного базового бота для вникающего в эту сферу.

    • @PurpleSchool
      @PurpleSchool  5 месяцев назад +1

      Пожалуйста

    • @germanmanvelov
      @germanmanvelov 5 месяцев назад

      @@PurpleSchool И курсы у вас классные. Я уже прошел по Nest, прохожу по TS, и далее микросервисы и Node. Хотелось бы, конечно, увидеть по Angular еще. Сайт с курсами тоже оч нравится, как сделан.

    • @PurpleSchool
      @PurpleSchool  5 месяцев назад +1

      @@germanmanvelov спасибо! Старались сделать максимально удобную платформу.

  • @ilyamartynov2743
    @ilyamartynov2743 Год назад +11

    Я бы посмотрел реализацию с архитектурой на NestJS

  • @evgeniykireev8572
    @evgeniykireev8572 2 месяца назад

    Cупер полезное видео! Спасибо вам)

  • @n1kder
    @n1kder Год назад +1

    Дякую за відео🙏 Цікавий та корисний контент😃

  • @user-yj4fe8gq7i
    @user-yj4fe8gq7i 4 месяца назад +2

    Есть сылка на гитхаб (код из видео)?

  • @diggerdog001
    @diggerdog001 Год назад

    Топ контент подъехал очередной от Антохи 🔥🔥🔥

  • @dev-zb9mg
    @dev-zb9mg 3 месяца назад

    Да, видео по логгированию было круто! Если можно, рассмотрите Pino, пожалуйста.

  • @mkonin
    @mkonin Год назад +2

    Интересный опыт был ) найти бы ещё примеры ) чтоб также с классами ) чтото гитхаб пока не особо балует )

    • @PurpleSchool
      @PurpleSchool  Год назад +2

      У меня целый курс, где я показываю как строить архитектуру на классах: purpleschool.ru/course/nodejs

  • @dev-zb9mg
    @dev-zb9mg 3 месяца назад

    Антон, спасибо за видео!
    1) У вас есть возможность отключать подсказки в IDEA? Они сбивают когда смотрю в ваш код, там и так много текста и ещё подсказки добавляют.
    2) Вы используете vim? Можете поделиться впечатлениями?) Долго учились? Как давно используете? Сильно ли выросла продуктивность? Это могло бы стать темой для видеоролика, но буду признателен и за текст тоже :)

    • @PurpleSchool
      @PurpleSchool  3 месяца назад

      Привет!
      Видео про vim: ruclips.net/video/Q1gIbPEStL0/видео.htmlsi=tM4SdDKaj5AMhgvz

    • @dev-zb9mg
      @dev-zb9mg 3 месяца назад

      @@PurpleSchool ого, вы прямо на опережение) Благодарю!

  • @Sergey_Klimov
    @Sergey_Klimov 2 месяца назад

    Хммм, интересный подход. Я только одного никак не пойму - где обработчики ошибок?))
    Насколько я понимаю все эти ctx.reply - это асинхронщина же. Понятно, что ни отрабатывают в рамках коллбэка и поэтому работают. Но, а где же try/catch?
    Может я чего то не понимаю конечно

  • @user-qf3zt5mm2h
    @user-qf3zt5mm2h Год назад +2

    Когда будет видео как создавать сцены ?

  • @romankornienko7268
    @romankornienko7268 5 месяцев назад

    Буду рад, если добавите видео про то, как организовать работу со сценам (scenes)

  • @user-hp2cg6px8c
    @user-hp2cg6px8c Год назад +3

    Я уже на середине ролика, но я не понимаю: а что мы делаем?
    Какой функционал у бота будет?

    • @PurpleSchool
      @PurpleSchool  Год назад

      У этого, кнопки и обработка событий, но это основа для бота, который вы можете сами доделать под себя.

    • @user-ql4xu5qu2u
      @user-ql4xu5qu2u Год назад +2

      Половина видео, какие-то обвязки над обвязками, абстракции, воюет с типизацией и тд

    • @user-wh1tt7cd1b
      @user-wh1tt7cd1b 10 месяцев назад

      @@user-ql4xu5qu2u да, да. А по факту просто ставим лайк либо дизлайк ))

  • @burenkov
    @burenkov Год назад +1

    Спасибо! Много полезной информации👍

  • @maxim477
    @maxim477 Год назад +1

    Здравствуйте, Большое спасибо за это видео. Всё понятно. Для тестового задания не могу найти хорошую архитектуру папок, в интернете на эту тему практически ничего. Не могли бы Вы поделиться архитектурой, которую Вы использовали/используете?

    • @PurpleSchool
      @PurpleSchool  Год назад

      Привет! Мы активно рассматриваем её в курсе Node: purpleschool.ru/course/nodejs

  • @RogerDearly
    @RogerDearly Год назад +1

    Привет. Спасибо за информативное видео! Можете снять ролик про ваш neovim сетап, какими плагинами пользуетесь ? Было бы интересно. Ну и бы ссылка на ваш сетап не помешало бы)

    • @PurpleSchool
      @PurpleSchool  Год назад +1

      Всё на моем канале со ссылками: ruclips.net/video/4PzSNN45tcA/видео.html

    • @RogerDearly
      @RogerDearly Год назад

      @@PurpleSchool спасибо за ответ! Я в итоге нашёл ваше видео про AstroVim и скачал его. Довольно полезный конфиг, особенно для ленивых как я :D

  • @shoxruxbekmamadaliyev
    @shoxruxbekmamadaliyev Год назад

    Good job bro, I very like this structure!

  • @Sergey_Klimov
    @Sergey_Klimov 2 месяца назад

    Ну, умоляю вас. Покажите как создавать wizard сцены с таким подходом.
    Я пробую у меня во-первых с typescript не дружит логика, во-вторых не могу его нормально зарегистрировать через middleware. Хотя по логике вещей чувствую, что какую-то микродеталь упускаю.
    Контекст ctx не имеет поля scene (а как следствие и enter), потому что не могу понять как зарегистрировать сцену.

  • @19n1ght
    @19n1ght Год назад +2

    Почему bot в конструкторе Command имеет модификатор доступа public а не protected?

    • @PurpleSchool
      @PurpleSchool  Год назад

      Согласен, protected было бы правильнее

    • @19n1ght
      @19n1ght Год назад

      @@PurpleSchool хорошее видео! и вообще на канале много полезного. спасибо!

    • @PurpleSchool
      @PurpleSchool  Год назад

      Спасибо!

  • @Sergey_Klimov
    @Sergey_Klimov 2 месяца назад

    Я попробовал обычную сцену создать с таким подходом. Все, я сдаюсь. Одни ошибки

  • @FobosWorld
    @FobosWorld Год назад

    Как с такой архитектурой работать со сценами и везердами?

  • @alexeyfilippov42
    @alexeyfilippov42 Год назад +2

    Предлагаю тему для видео:
    Иерархия для каталога на nestes set, вид хранения в sql бд и работа с ней вставка, перемещение по ветке, удаление + перерасчет связей. так же как его оптимально рисовать на фронте, нативный или реакт к примеру

    • @PurpleSchool
      @PurpleSchool  Год назад

      У меня есть видео по отрисовке вложенных меню любой вложенности: ruclips.net/video/yLOOpANXP1E/видео.html&ab_channel=PurpleSchool%7CAntonLarichev

    • @alexeyfilippov42
      @alexeyfilippov42 Год назад

      @@PurpleSchool В общем глянул ролик, это супер нетипичный случай) практический пример бы рендерить из состояния.. А всё-таки реализацию классического иерархического дерева с использованием nested было бы любопытно посмотреть, потому что в интернете совсем мало о такой реализации контента

    • @alexeyfilippov42
      @alexeyfilippov42 Год назад +1

      Сегодня практике ради написал свое дерево на реакте, но с плоским списком. Для небольших структур самое то, но работа с ним конечно потная

  • @sandorium
    @sandorium 9 месяцев назад

    17:00 а чего не сделать что-то типа const configService = new ConfigService(); export configService; в самом конфиг сервисе и все будуть брать один объект конфига.

  • @lizaleiko3580
    @lizaleiko3580 Год назад

    Подскажите, пожалуйста, для чего сделали сервис по чтению .env, почему нельзя просто читать переменные из него? не совсем поняла этот нюанс по видео

    • @PurpleSchool
      @PurpleSchool  Год назад

      Чтобы выделить логику получения переменных окружения. Скажем если мы захоти получить из стороннего сервиса, к примеру Vault, мы сможем просто в 1-м месте заменить реализация сервиса.

  • @gamewithrap
    @gamewithrap Год назад

    Слова громкие, типа "используем архитектурный подход", "инверсия зависимостей".
    Очень красиво получилось, так как там всего 1 команда.
    А когда будет много команд, когда будет состояние, то вот этот вот паттерн, который очень похож на middleware, будет источником лапши
    Более сложные боты имеют не просто состояние из 1 флага.
    Обычно бывает 10-20 usecase-ов, и очень сложные состояния, когда без конечного автомата не обойтись, Ваш вариант не уменьшает сложность, он лишь добавляет красивую абстракцию, которая течет уже с первых строк.

  • @user-pe3tc1tp4c
    @user-pe3tc1tp4c Год назад

    Добрый день, хотелось бы спросить, а нормально ли в конструкторе делать какую-то логику, просто мне всегда казалось что это не очень хорошее для этого место

    • @PurpleSchool
      @PurpleSchool  Год назад

      Если логика должна каждый раз выполняться при инициализации объекта, то нормально.

  • @siparat842
    @siparat842 Год назад

    Тема для следующего видео: Визуализация архитектуры c4. Инструменты для проектирования. Правила проектирования

  • @nurmuhammadkholmuhammadov9643
    @nurmuhammadkholmuhammadov9643 Год назад

    не могу реализовать сцена кто то знает как ?

  • @sandorium
    @sandorium 9 месяцев назад

    для архитектуры и поддержки надо вынести все значения для лайк/дислайк в enums а не прямо в функциях писать.

  • @witseid
    @witseid Год назад

    Очень не хватает вывода нажимаемых клавиш где-то в углу. Мне, как новичку в вим, непонятны некоторые хоткеи.

  • @jamjam3337
    @jamjam3337 Год назад

    👏👍💥

  • @konterrobinson7612
    @konterrobinson7612 Год назад

    👍👍👍👍👍

  • @pablo2100
    @pablo2100 7 месяцев назад

    Мой первый опыт написания бота. За отсутствие DI, конечно, жирный минус, на этом моменте хотелось закрыть видео вообще. Но всё же спасибо, было интересно, попробовал, бот работает.

  • @Sevelay
    @Sevelay Год назад +1

    Если ты думаешь что у Telegram плохая документация, значит ты просто не видел вк)

    • @PurpleSchool
      @PurpleSchool  Год назад +2

      Я говорил про библиотеку Telegraf

    • @nod745
      @nod745 Год назад

      @@PurpleSchool О, да. Документация скудная и при поиске примеров приходится учитывать версию телеграфа. Это та ещё боль, если особо не разбираешься в api самой телеги. Когда-то пришлось потратить много нервов и времени при поиске рабочих реализаций в каналах по телеграфу

    • @Mikalai-yc7yy
      @Mikalai-yc7yy Год назад

      у grammy чёткая дока

    • @PurpleSchool
      @PurpleSchool  Год назад +1

      Да, глянул, неплохо

  • @user-hf8dw2wp6x
    @user-hf8dw2wp6x Год назад

    я фронт, решил для себя разобраться в беке на ноде и у меня возникает ощущение - как будто бы на разных языках пишем)

  • @dmytrokosenko6517
    @dmytrokosenko6517 7 месяцев назад

    А как данный проект развернуть на Vercel?

    • @PurpleSchool
      @PurpleSchool  7 месяцев назад

      Как и любой проект на ноде

    • @dmytrokosenko6517
      @dmytrokosenko6517 7 месяцев назад

      @@PurpleSchool вы уверены? Просто я пытаюсь развернуть бота, а мне Vercel пишет ошибка 500. Если я добавляю webhook в bot.launch, то работает, но не полностью

  • @polioann
    @polioann Год назад

    как можно избежать коллизий в callback данных? ("course_like", "course_dislike")

    • @PurpleSchool
      @PurpleSchool  Год назад

      Не очень понял вопрос.

    • @polioann
      @polioann Год назад

      @@PurpleSchool В больших проектах может быть много похожих действий и случайно можно дать называние которое уже существует

    • @PurpleSchool
      @PurpleSchool  Год назад

      Делать сцены, которые ограничивают набор доступных в текущий момент действий в зависимости от сцены

  • @vlad_prime
    @vlad_prime Год назад

    А как потом добавить новые команды?

    • @PurpleSchool
      @PurpleSchool  Год назад

      Создать новый command и его подключить в app.ts в массив команд

  • @butnothero7192
    @butnothero7192 Год назад

    Здравствуйте, Антон. Записывая начало видео, Вы сидели на коленях перед камерой?) Просто относительно стола Вы находитесь очень низко (телевизор тоже низко как-то).

    • @PurpleSchool
      @PurpleSchool  Год назад +1

      Нет, это кресло мешок около телевизора)

  • @ledorub6682
    @ledorub6682 Год назад +4

    Видео "ни-о-чем")) Яркий пример перенагруженности логической конструкции. Кстати, этому подвержены все любители TypeScript и прочих "улучшалок". В итоге вы не код учитесь писать и разрабатывать алгоритмы взаимодействия, а учитесь использовать безчисленное количество этих самых улучшалок, тратя уйму времени.

    • @PurpleSchool
      @PurpleSchool  Год назад +3

      То что вы назвали логической конструкцией, является архитектурой проекта. Можете писать без TS и в одном файле, но тогда забудьте о больших, поддерживаемых и масштабируемых проектах. И как раз «алгоритмы взаимодействия» между компонентами вашего проекта вы и должны прорабатывать.

    • @ledorub6682
      @ledorub6682 Год назад +2

      @@PurpleSchool Это кто сказал забыть?.. что за чушь).. С чего вы это взяли? Люди пишут очень большие проекты прекрасно и с легкостью на нативе и без всяких улучшалок/"убыстрялок". Алгоритмы взаимодействия тут ни при чем, ваш TypeScript - всего лишь помошник для головожопых юнных кодеров не допускать ошибок с типизацией на ровном месте.

    • @user-tk8mx2kv7t
      @user-tk8mx2kv7t Год назад +5

      @@ledorub6682 Сразу видно, что вы не знаете, что такое TypeScript, и скорее всего не имели дело с большими проектами. А если и имели, то это код, написанный вами давно, в котором только вы знаете как всё работает.

    • @ledorub6682
      @ledorub6682 Год назад +2

      @@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 9 месяцев назад

    "Не забудем добавить .env в .gitignore" - Это еще почему?

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад

      Потому что вы же не хотите, чтобы ваши приватные ключи или пароли от базы улетели в git и хранились в открытом виде?

    • @David-Freeman
      @David-Freeman 9 месяцев назад

      @@PurpleSchool Правильно ли я понимаю, что человек, склонировавший этот репозиторий себе на компьютер, установивший nodejs пакеты и запустивший npm start получит ошибку из-за отсутствия .env файла. Не является ли это фатальным нарушением целостности?

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад

      @@David-Freeman получит ошибку. И конечно нарушением это не является, так как хранить любую приватную информацию на Git категорически нельзя в открытом виде. Более того env файл будет разный для локальной разработки, stage и прода. И человек для запуска должен собрать нужный себе.

    • @David-Freeman
      @David-Freeman 9 месяцев назад

      @@PurpleSchool "человек для запуска должен собрать нужный себе." Откуда человек это знает? Откуда он должен знать, какие там параметры вообще?
      Вывод: .env должен присутствовать, но секретные данные должны быть заменены, скажем, звездочками.

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад

      @@David-Freeman он будет знать, так как вы работаете в одной команде. Структура env обычно описывается в инструкции по запуску в Readme, у вас же должна быть к репозиторий полная инструкция