Рефакторинг и запуск 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...
Наконец-то! Александр доволен!!
Я бы так не сказал)
Алексей, спасибо за ваш труд! Великолепный материал! 🔥
Бот просто супер за книги стало голосовать очень удобно! 👍
Наконец-то полезное видео на этом канале, давно ждал возвращения
Отличный материал ! Спасибо Вам огромное ! Ваш материал помогает не просто учится , а и полюбить сферу IT ! Удачи !
Спасибооо!
Алексей, Катаны благодарят вас за вашу работу. Ваш труд помагает нам становиться лучше.
Спасибо! Единственное, что нет перерыва на отжимания. :)
Обожаю тебя, твои скиллы вдохновляют меня!
Смотрю и заряжаюсь. благодарю
А что там кстати с серией видео о сервисе для стримеров "аналога бусти" ? оно как то двигается или забросили проект? Интересно было смотреть)
Ранее форкнул репозиторий бота, как старт для своего, так как уже просмотрел всё по написанию с 0 и рефакторингу, решил не переизобретать и не тратить время, взять ваш. Но это было недели две-три назад)
Чувствую, надо будет обновить форк и хоорошо, что не начал писать поверх в своём репо своего бота ещё, можно будет неплохо так обновить проект перед началом работы.
Алексей, а почему вы не использовали loguru?
Леша классный парень)
Интересно было
Вот если бы у автора был Пайчарм было бы удобно к определениям функции переходить)
А так хорошая серия видосов!
Интересно посмотреть другой подход к выполнению привычных мне задач.
Да и в вимасе есть go to definition с lsp сервером, то есть для любого нужного языка, хоть для 1С. Показывал в гитхабе, чтобы можно было удобно сравнивать 2 версии, старую и новую
Добрый день, Алексей! Не будет ли тут правильным использовать асинхронный Jinja2 и асинхронный request для функции "services/validation.py:_get_tg_url" вместо "urllib"? У нас же будут блокироваться все другие асинхронные таски , разве нет?
Привет!
"services/validation.py::_get_tg_url" занимается просто форматированием строки без IO операций, асинхронность тут не нужна. Реальный запрос уходит из "services/validation.py::is_user_in_channel", и тут действительно асинк я зыбыл добавить, залил правку.
По поводу асинхронного Jinja - из шаблонов вызывать IO операции плохая затея, не стал делать рендер асинхронным.
35:50 на рефактор, "days" вместо:
1) "declensions_of_multiple_endings"
2) или попроще "multiple_book_endings"
а так же переменная с названием "p". На допустим "ending_mode" или "ending_variant" или "multiple_ending_mode" или "multiple_ending_variant".
сделай пулл реквест лучше
Спасибо за видос! Кое что полезное для себя подчеркнул. Хотелось бы отметить финальную часть про деплой -- очень грустный привет из прошлого =) Ну можно же было простенький CICD сделать + бонусом например теми же линтерами в CI обмазать. Деплой руками с тележкой хардкода в 2023 это не клево =)
Так линтеры есть в github actions. Black, flake8 (ruff щас накатываем вместо него) и pyright. Раскатку, ansible и контейнеры не стал пока делать, не предполагаю частых обновлений или перезаливов на разные сервера
@@t0digital Ну разумеется там есть линтеры) Планируешь видос про автоматизацию деплоя и быть может автотесты в CI?
@@Name-wv3ol может быть. Хотя я давно ci настраивал последний раз, в гитлабовской тулзе)
@@t0digital Ну я сам больше Гитлаб предпочитаю :) и буду только рад, если надумаешь туда с проектом переехать и видос запилить!
Может сделаете настройку мака на арч процессоре , как с Manjaro, очень помогло как куда и что
Алексей, спасибо за ваши видео. Очень интересует тема: как перевести рабочего бота на Вебхуки. Нигде не смог найти нормальную инструкцию для этого. Как установить веб-сервер и т.п. Как это настроить дома и протестировать и потом соответственно на сервере.
Деплой в контейнер не стали делать?
Не знал раньше про systemd, спасибо большое за подробный гайд по деплою и за обзор изменений, полезненько! А насчёт systemd, если мне потребуется, то как я смогу как-то посмотреть консоль бота?
Имеешь в виду сообщения, которые ты видел в консоли, когда запускал бота вручную? sudo journalctl -xe их покажет. Хотя надо настраивать логирование в файл, конечно, чтобы сразу логи писались в файл. Это легко сделать, благо что сразу используется logging, а не print
@@t0digital спасибо, не знал про эту команду, а логгинг у меня настроен - loguru, значит буду смотреть в файлах лога :)
А Python используется из окружения venv или основной? И как указать в файле . service чтобы бот запускался через venv?
там уже указан интерпретатор из венка который создает poetry
Здравствуйте! Хотел задать вопрос. Зачем создавать отдельный файл .py для описания всего одной функции? Это сделано только со стороны красоты или имеет практическое применение?
Ты хочешь что-то изменить в команде бота /now. Ты написал бота пол года назад и уже не сильно помнишь, что там как. Ты открываешь структуру проекта, видишь handlers - ага, значит это контроллеры, то, что нужно. Открываешь папку handlers и видишь там файл now.py - о, значит, это то, что нужно! Открываешь и видишь там только то, что относится к этому контроллеру. Это очень удобно.
Если не идти таким путём. Ты открываешь структуру проекта и тебе непонятно, какой файл открывать. Допустим, все контроллеры лежат в одном файле handlers.py. Тогда тебе надо открывать этот файл и искать в нём то, что тебя интересует поиском по файлу или глазами или ещё как-то. В любом случае тебя будет окружать то, что тебе сейчас не нужно - другие контроллеры и их обвязка.
Проще - лучше. Когда сразу всё понятно и ничего не отвлекает от нужной тебе в данный момент сути, это хорошо.
@@t0digital Спасибо.
Бить по файлам также считаю не эффективным. Поиск внутри файла нужной функции занимает секунды особенно в nvim. 😉
@@DimiEG тогда лупите все в одном файле. Поиск в виме быстрый даже когда строк десятки тысяч
@@t0digital Есть такое понятие «как всё в меру». И совсем не бить плохо, и бить всё подряд тоже. То что поиск в vim мега удобный полностью согласен. У меня был один знакомый, известный программист игрушек, так он на C++ практически всю программу в одном файле писал. Там и было 10000 строк. Я удивлялся. Но у него такой стиль был. И всё работало при этом.
👍
Здравствуйте! Спасибо за отличное видео. Небольшое замечание - структуры данных, которые у вас гоняются по приложению некорректно называть DTO (хотя так почему-то очень часто делают)
en.m.wikipedia.org/wiki/Data_transfer_object
Потому что они используются не для передачи данных между процессами? Мне кажется, это уже устоявшаяся терминология и для такого сценария использования в рамках одного процесса. Но не уверен, что это где-то зафиксировано, на что можно сослаться в этом вопросе
Да, DTO нужны чтобы экономить время, когда делаются дорогие (долгие) вызовы. Например, когда делаются сетевые запросы. Внутри DTO упаковывается "лишняя" инфа, чтобы не делать за этой инфой потом дополнительного запроса. Что-то такое. Сам из не использовал) В любом случае
1) в примере на видео это точно не DTO
2) очень часто люди некорректно используют этот термин именно в том же контексте, что и у вас в примере
Спасибо, почитаю больше о DTO
Не забываем увеличивать шрифт, так как не все на компах смотрят, а бывает, что с расстояния на ТВ экране.
годнота подъехала
Спасибо:)
Сделай видос как сделать Local Bot API Server чтоб можно было видосы отправлять через бота
А телега умеет кушать markdown? Чтобы не писать свой конвертер из html
телега умеет в md, тут в целом свой конвертер я не писал - просто заменял переносы строк, чтобы самому управлять этими переносами строк, а не использовать переносы из файла шаблона
я так понял md или html там используется только для форматирования текста жирным/курсивом, добавления ссылок, а переносы строк в любом случае остаются такими же, как в отправленном тексте
так и знал без webhook и без https и без nginx ,,, хочу инструкцию для webhook с настройками nginx на бесплатном домене с https бесплатном на бюджетном хостинге ,,, ПОЖАЛУЙСТА (интересно для больших нагрузок)
бесплатный только сыр в мышеловке)
может ему скрол отключить на время записи видоса?
Может не надо?
@@t0digital Оно почти не видно на что показываешь текст летает без остановки
@@TheAcekon учту. Но это ж обзор. Без глубокого погружения в каждый блок кода
@@t0digital Я даже не везде успевал понять в какую строку смотреть, когда смотришь в код который уже знаешь то конечно быстрей ориентируешся.
Чо то сложно,ничего не понимаю 😁