Рефакторинг и запуск Telegram бота на сервере

Поделиться
HTML-код
  • Опубликовано: 7 июн 2024
  • Рефакторинг кода Telegram бота «Ботаним!» и запуск бота на сервере
    Первый стрим с разработкой бота - • Стрим! Пишем Telegram ...
    Второй стрим с доработкой бота - • Стрим! Рефакторинг Tel...
    Разбор критики кода прототипа бота - • Бото*бы, говнокод и пр...
    Исходники - github.com/alexey-goloburdin/...
    Бот - botanim_to_digital_bot.t.me
    * Мой курс «Хардкорная веб-разработка» - course.to.digital
    * Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: botanim.to.digital/
    * Telegram - t.me/t0digital
    00:00:00 О чём речь
    00:01:25 Сравниваемые версии
    00:02:07 Документация
    00:03:27 GitHub Actions и dev tools
    00:06:16 Структура проекта
    00:10:38 Точка входа в приложение
    00:13:03 Контроллеры и шаблонизатор
    00:35:24 Бизнес-логика
    00:49:20 Deploy - запускаем бота на сервере
    /****************** about ******************/
    Меня зовут Алексей Голобурдин, я программирую с 2004 года и на этом канале делюсь своим опытом. Я основатель и руководитель компаний:
    - Диджитализируй digitalize.team, разрабатываем сложные IT системы для бизнеса;
    - Salesbeat salesbeat.pro, комплексный модуль доставки для интернет магазинов.
    Telegram канал - t.me/t0digital
    ВК - digitalize.team
    RuTube - rutube.ru/channel/24802975/ab...
    Дзен - dzen.ru/id/6235d32cb64df01e6e...

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

  • @grechino2412
    @grechino2412 Год назад +16

    Наконец-то! Александр доволен!!

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

      Я бы так не сказал)

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

    Алексей, спасибо за ваш труд! Великолепный материал! 🔥
    Бот просто супер за книги стало голосовать очень удобно! 👍

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

    Наконец-то полезное видео на этом канале, давно ждал возвращения

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

    Отличный материал ! Спасибо Вам огромное ! Ваш материал помогает не просто учится , а и полюбить сферу IT ! Удачи !

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

    Алексей, Катаны благодарят вас за вашу работу. Ваш труд помагает нам становиться лучше.

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

    Спасибо! Единственное, что нет перерыва на отжимания. :)

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

    Обожаю тебя, твои скиллы вдохновляют меня!

  • @lma-ata
    @lma-ata Год назад

    Смотрю и заряжаюсь. благодарю

  • @shps.online9830
    @shps.online9830 Год назад +3

    А что там кстати с серией видео о сервисе для стримеров "аналога бусти" ? оно как то двигается или забросили проект? Интересно было смотреть)

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

    Ранее форкнул репозиторий бота, как старт для своего, так как уже просмотрел всё по написанию с 0 и рефакторингу, решил не переизобретать и не тратить время, взять ваш. Но это было недели две-три назад)
    Чувствую, надо будет обновить форк и хоорошо, что не начал писать поверх в своём репо своего бота ещё, можно будет неплохо так обновить проект перед началом работы.

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

    Алексей, а почему вы не использовали loguru?

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

    Леша классный парень)

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

    Интересно было

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

    Вот если бы у автора был Пайчарм было бы удобно к определениям функции переходить)
    А так хорошая серия видосов!
    Интересно посмотреть другой подход к выполнению привычных мне задач.

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

      Да и в вимасе есть go to definition с lsp сервером, то есть для любого нужного языка, хоть для 1С. Показывал в гитхабе, чтобы можно было удобно сравнивать 2 версии, старую и новую

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

    Добрый день, Алексей! Не будет ли тут правильным использовать асинхронный Jinja2 и асинхронный request для функции "services/validation.py:_get_tg_url" вместо "urllib"? У нас же будут блокироваться все другие асинхронные таски , разве нет?

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

      Привет!
      "services/validation.py::_get_tg_url" занимается просто форматированием строки без IO операций, асинхронность тут не нужна. Реальный запрос уходит из "services/validation.py::is_user_in_channel", и тут действительно асинк я зыбыл добавить, залил правку.
      По поводу асинхронного Jinja - из шаблонов вызывать IO операции плохая затея, не стал делать рендер асинхронным.

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

    35:50 на рефактор, "days" вместо:
    1) "declensions_of_multiple_endings"
    2) или попроще "multiple_book_endings"
    а так же переменная с названием "p". На допустим "ending_mode" или "ending_variant" или "multiple_ending_mode" или "multiple_ending_variant".

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

      сделай пулл реквест лучше

  • @Name-wv3ol
    @Name-wv3ol Год назад +2

    Спасибо за видос! Кое что полезное для себя подчеркнул. Хотелось бы отметить финальную часть про деплой -- очень грустный привет из прошлого =) Ну можно же было простенький CICD сделать + бонусом например теми же линтерами в CI обмазать. Деплой руками с тележкой хардкода в 2023 это не клево =)

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

      Так линтеры есть в github actions. Black, flake8 (ruff щас накатываем вместо него) и pyright. Раскатку, ansible и контейнеры не стал пока делать, не предполагаю частых обновлений или перезаливов на разные сервера

    • @Name-wv3ol
      @Name-wv3ol Год назад +2

      @@t0digital Ну разумеется там есть линтеры) Планируешь видос про автоматизацию деплоя и быть может автотесты в CI?

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

      @@Name-wv3ol может быть. Хотя я давно ci настраивал последний раз, в гитлабовской тулзе)

    • @Name-wv3ol
      @Name-wv3ol Год назад +1

      @@t0digital Ну я сам больше Гитлаб предпочитаю :) и буду только рад, если надумаешь туда с проектом переехать и видос запилить!

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

    Может сделаете настройку мака на арч процессоре , как с Manjaro, очень помогло как куда и что

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

    Алексей, спасибо за ваши видео. Очень интересует тема: как перевести рабочего бота на Вебхуки. Нигде не смог найти нормальную инструкцию для этого. Как установить веб-сервер и т.п. Как это настроить дома и протестировать и потом соответственно на сервере.

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

    Деплой в контейнер не стали делать?

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

    Не знал раньше про systemd, спасибо большое за подробный гайд по деплою и за обзор изменений, полезненько! А насчёт systemd, если мне потребуется, то как я смогу как-то посмотреть консоль бота?

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

      Имеешь в виду сообщения, которые ты видел в консоли, когда запускал бота вручную? sudo journalctl -xe их покажет. Хотя надо настраивать логирование в файл, конечно, чтобы сразу логи писались в файл. Это легко сделать, благо что сразу используется logging, а не print

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

      @@t0digital спасибо, не знал про эту команду, а логгинг у меня настроен - loguru, значит буду смотреть в файлах лога :)

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

    А Python используется из окружения venv или основной? И как указать в файле . service чтобы бот запускался через venv?

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

      там уже указан интерпретатор из венка который создает poetry

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

    Здравствуйте! Хотел задать вопрос. Зачем создавать отдельный файл .py для описания всего одной функции? Это сделано только со стороны красоты или имеет практическое применение?

    • @t0digital
      @t0digital  Год назад +14

      Ты хочешь что-то изменить в команде бота /now. Ты написал бота пол года назад и уже не сильно помнишь, что там как. Ты открываешь структуру проекта, видишь handlers - ага, значит это контроллеры, то, что нужно. Открываешь папку handlers и видишь там файл now.py - о, значит, это то, что нужно! Открываешь и видишь там только то, что относится к этому контроллеру. Это очень удобно.
      Если не идти таким путём. Ты открываешь структуру проекта и тебе непонятно, какой файл открывать. Допустим, все контроллеры лежат в одном файле handlers.py. Тогда тебе надо открывать этот файл и искать в нём то, что тебя интересует поиском по файлу или глазами или ещё как-то. В любом случае тебя будет окружать то, что тебе сейчас не нужно - другие контроллеры и их обвязка.
      Проще - лучше. Когда сразу всё понятно и ничего не отвлекает от нужной тебе в данный момент сути, это хорошо.

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

      @@t0digital Спасибо.

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

      Бить по файлам также считаю не эффективным. Поиск внутри файла нужной функции занимает секунды особенно в nvim. 😉

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

      @@DimiEG тогда лупите все в одном файле. Поиск в виме быстрый даже когда строк десятки тысяч

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

      @@t0digital Есть такое понятие «как всё в меру». И совсем не бить плохо, и бить всё подряд тоже. То что поиск в vim мега удобный полностью согласен. У меня был один знакомый, известный программист игрушек, так он на C++ практически всю программу в одном файле писал. Там и было 10000 строк. Я удивлялся. Но у него такой стиль был. И всё работало при этом.

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

    👍

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

    Здравствуйте! Спасибо за отличное видео. Небольшое замечание - структуры данных, которые у вас гоняются по приложению некорректно называть DTO (хотя так почему-то очень часто делают)
    en.m.wikipedia.org/wiki/Data_transfer_object

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

      Потому что они используются не для передачи данных между процессами? Мне кажется, это уже устоявшаяся терминология и для такого сценария использования в рамках одного процесса. Но не уверен, что это где-то зафиксировано, на что можно сослаться в этом вопросе

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

      Да, DTO нужны чтобы экономить время, когда делаются дорогие (долгие) вызовы. Например, когда делаются сетевые запросы. Внутри DTO упаковывается "лишняя" инфа, чтобы не делать за этой инфой потом дополнительного запроса. Что-то такое. Сам из не использовал) В любом случае
      1) в примере на видео это точно не DTO
      2) очень часто люди некорректно используют этот термин именно в том же контексте, что и у вас в примере

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

      Спасибо, почитаю больше о DTO

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

    Не забываем увеличивать шрифт, так как не все на компах смотрят, а бывает, что с расстояния на ТВ экране.

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

    годнота подъехала

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

    Сделай видос как сделать Local Bot API Server чтоб можно было видосы отправлять через бота

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

    А телега умеет кушать markdown? Чтобы не писать свой конвертер из html

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

      телега умеет в md, тут в целом свой конвертер я не писал - просто заменял переносы строк, чтобы самому управлять этими переносами строк, а не использовать переносы из файла шаблона

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

      я так понял md или html там используется только для форматирования текста жирным/курсивом, добавления ссылок, а переносы строк в любом случае остаются такими же, как в отправленном тексте

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

    так и знал без webhook и без https и без nginx ,,, хочу инструкцию для webhook с настройками nginx на бесплатном домене с https бесплатном на бюджетном хостинге ,,, ПОЖАЛУЙСТА (интересно для больших нагрузок)

    • @lma-ata
      @lma-ata Год назад

      бесплатный только сыр в мышеловке)

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

    может ему скрол отключить на время записи видоса?

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

      Может не надо?

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

      @@t0digital Оно почти не видно на что показываешь текст летает без остановки

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

      @@TheAcekon учту. Но это ж обзор. Без глубокого погружения в каждый блок кода

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

      @@t0digital Я даже не везде успевал понять в какую строку смотреть, когда смотришь в код который уже знаешь то конечно быстрей ориентируешся.

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

    Чо то сложно,ничего не понимаю 😁