Я ждал это видео 8 дней, автор, пожалуйста прошу, не забрасывай данный курс, именно благодаря твоим роликам и твоему подходу, я заинтересовался программированием и узнал как это интересно, спасибо за то что стараешься!
Спасибо Вам огромное за этот бесценный труд, вы единственный на ютубе, у которого настолько полезные и информативные курсы и видео, без воды, желаю Вам всего наилучшего, спасибо))
Вот сколько смотрю, что по aiogram v2, что по aiogram v3, вот сразу в глаза бросается, как автор кнопки реплай любит больше чём инлайн))) Спасибо за ваш труд)
@@PythonHubStudio а у меня вот полтергейст с aiogram, с год наверно висит на сервере бот ещё на aiogram 2.23.1, всё работает исправно. А вот с компа его в PyCharm запускаю, команды все работают, а инлайн кнопки молчат.
Спасибо, очень ждал это видео. Надеюсь далее будет рассмотрен Redis, например в качестве хранилища у FSM. Также, если можно, рассмотрите защиту от спамеров, так называемый троттлинг. Большое спасибо еще раз за ваш большой труд!
Здраствуйте. мне нужно написать бота для регистрации клиентов в салон красоты . подскажите пожалуйста в следующем видео как правильно обратиться к базе данных чтоб она проверила есть ли какая то запись на такое то время и если есть то об этом сообщила и попросила клиента выбрать другое время. буду очень благодарен так как сам пока понять не могу
@@PythonHubStudio Рад что реакция позитивная. Программист может быть чрезмерно увлечен языком программирования забывая, что он говорит на русском. А речь способна засорятся из окружающей нас среды, И ученик смотрящий разных блогеров не может понять, а как же правильно писать нужный ему метод из сони предложенных, написанных на одном языке по разному.
Лучший, благодаря тебе давным давно сделал телеграм бота и после этого теперь могу любой сложности сделать. И вот вопрос, сильно ли отличается aiogram 2 от3 ? Стоит ли пересмотреть курс новой версии?
@PythonHubStudio, здравствуйте спасибо за бесценные уроки, но хотелось бы узнать будет ли продолжение курса, а то это видео оборвалось даже без тизеров не так как раньше. Если курс окончен вы хоть скажите что бы мы не ждали продолжение😭😭😭. В дополнение тоже бы хотелось уточнить "Будут ли реализованы корзина, кнопки для добавления позиций меню, оплата" Хотелось бы узнать как сделать так что бы при выборе товара все остальное что было написано до этого скрывалось?
Как бы ни хотелось быстрее, не получается, не успеваю всё совмещать... Но следующее видео будет большим: многоуровневое онлайн меню(меню, каталог, корзина товаров пользователя). Когда точно не скажу...
Еще клево было бы добавить какие то запланированные задачи по Cron. Например каждую минуту отправлять сообщение в чат. Например выкладывать статистику какую ни будь в чат.
Огромное спасибо. Тема с базами данных всегда тяжелая и если бы я учил это самостоятельно я бы сжег себе все мозги. А у меня такой вопрос. Если бот работает на нескольких серверах то базу данных он будет использовать одну для всех?
Подскажите, в конце ролика использование базы данных SQL postgre это как альтернатива DB sql lite? Можно же пользоваться SQL lite из начала ролика и не устанавливать ту, которая в конце?
есть предложение провести рефакторинг и разделить код в обработчиках. На 1:21:30 вот это "где-где-где" как раз остро намекает о необходимости разделить. я тоже в процессе написания бегал так по коду высматривая нужные строки, а когда услышал уже знакомое для себя "где-где" понял, что проблема прям массовая )
Абсолютно согласен!👍 Но именно там вроде некуда делить, разве что fsm вынести отдельно, но тогда в том файле останется только 3 хендлера.... Диалоги они такие...
Курс одним словом пушка.За ет однозначно лайк неглядя. По поводу БД есть ряд вопросов. 1. В чем отличия прямих запросов в базу даних от SqlAlchemy? Что в целом лутше (и правильнее) изпользовать для тех ти иних ботов? На что обратить внимание что би стать хорошим профильним програмистом? 2. Как можно и возможно ли вообще изпользовать несколько баз даних одна как видео SQL 3 и вторая PostgreSQL? 3. Будет ли дальнейшие видео о создании личного кабинета как пользователя так и админа? Очень би хотелось би увидеть как можно грамотно реализовать для админа ввод и смена пароля по "ключу " ? Очень хотелось би увидеть так как ви отлично на примерах можете об'яснить что к чему и почему.
1) Отличие в том чтоб не писать запросы самому на языке sql и чтоб не писать с нуля самому методы по взаимодействию, в вариантах с этими же запросами, с базой данных. Правильнее тут нет... Потому что требования к проектам разные. Скорость разработки - своё. Если пишите сами (на заказ) - однозначно работа через orm(sqlalchemy и подобное), если работать в команде, там уже могут быть варианты (возможно будет реализована своя система с запросами к базе с использованием нативного sql). 2) SQLite - это база данных для работы приложения в "одно лицо", годиться в основном только для хранения данных для приложения, в котором только один пользователь (одно приложение) получает к нему доступ (или для легко нагруженного бота, который работает у вас на ПК), для работы с высокой нагрузкой и множеством подключений нужно PostgreSQL и подобные решения
@@PythonHubStudio тоисть я правильно понимаю что для викторин каких то информационих ботов можно использовать sql3 lite, а для магазинов или каких то комерческих проектов то PostgreSql?
@@PythonHubStudio и еще такой возможно уточняющий вопрос: если бот бил написан с использованием sql 3 lite на прямих запросах без использования sqlalchemy. Как его перевести на PostgreSql? Прийдеться переписивать с нуля код с запросами в БД или нет?
Доброго времени, автор! Нуждаюсь в вашем совете Скажите, на парсинге можно заработать? Пробовал веб разработку, но учить много и не так просто попасть на джуна, да и джунов полно уже Хотел поинтересоватся, если нацелится только лишь на парсинг, ну + телеграмм боты например (или что ещё нужно освоить?), можно ли в скором времени на фрилансе брать заказы, или тоже не годный вариант? Не хочу бросать программирование, но и без быстрого результата, тоже скучно, так сказать Помогите советом
Можно, на этом зарабатывают, я так начинал. Во фрилансе все зависит от личных качеств: насколько хорошо у вас получится брать заказы и что самое главное - набить постоянную аудиторию клиентов (повторные обращения, ваш личный рейтинг на фриланс платформах, заказы с последующей долгосрочной поддержкой и тд..., чтоб не сидеть только на случайно пойманных заказах). Одного парсинга маловато (но для начала пойдет), если + боты уже лучше. Но самый главный совет - не бросайте то что уже знаете и достигли.
Спасибо автору. Тяжелый труд, но тысячи благодарных учеников по этому курсу. С нетерпением хочу дописать по этим урокам бота и использовать его как отличную базу для дальнейших работ. В процессе теста возник вопрос. Часто товары вводим на кирилице и в цене автоматом ставим запятую вместо точки. Функция Float это не пропускает и отправляет на проверку ошибки. Читал, что можно это делать с помощью модуля LOCALE. Подскажите как это исправить, может есть какой то вообще простой метод?
Огромное спасибо за ответ. Действительно просто. Хотел ещё спросить. Было бы не плохо, чтобы в админ хендлере после удаления товара его карточка тоже сразу удалялась с чата чтоб не перегружать его информацией и не делать новый запрос на выборку номенклатуры. Это будет дальше реализовано или искать методы самому? @@PythonHubStudio
После этого урока еще выскочил баг. Понятно, что на этом этапе урока мы уже все намного умнее, но... Если при добавлении товара в фото указать точку (не при изменении, а именно при добавлении), то выводит ошибку не в чат, а в терминал AttributeError: 'NoneType' object has no attribute 'image'. Или у меня ошибка в коде, или действительно так? @@PythonHubStudio
Здравствуйте, видео очень полезное с подробными объяснениями, хотелось бы вас спросить, после освоения данного плейлиста и переход изучения библиотеки Джанго, хорошая идея? Хочу по больше изучать Питон и библиотеки
Добрый день! Спасибо вам за классно преподнесенный материал. Хотел уточнить информацию, вот как самому научиться писать то что вы делаете? Как вы понимаете какие функции надо писать? Просто столько инфы полезной, но хотелось бы от вас (развернутый по возможности) ответ. Потому что, сам сижу читаю документацию либо ничего не понимаю либо не могу найти информацию Спасибо еще раз за контент
9:46, у меня у одного на этом моменте возникла ошибка "TypeError: CounterMiddleware.__init__() takes 1 positional argument but 4 were given"? И даже если в инициализатор впихнуть *args то потом возникает другая ошибка "TypeError: object CounterMiddleware can't be used in 'await' expression". Вроде всё как на видео, но не получается
@@PythonHubStudio Регистрация middleware @basecmdRouter.message.outer_middleware(PrivateChatOnlyMiddleware()) Сам код class PrivateChatOnlyMiddleware(BaseMiddleware): async def __call__( self, handler: Callable[[Message, Dict[str, Any]], Awaitable[Any]], event: Message, data: Dict[str, Any], ) -> Any: if F.chat.type.in_(["group", "supergroup"]): await event.answer("ok") return await handler(event, data) TypeError: __call__() missing 2 required positional arguments: 'event' and 'data' Возникает ошибка. Перепробовал достаточно разных примеров мидлвари, все приводят к одному и тому же. Может быть вы сможете подсказать в чем заключается ошибка
Тоже столкнулся с этой ошибкой, полез гуглить, добавил аргументы и поймал следующую ошибку... Все делал как в видео. Единственное отличие, PyCharm. "dp = Dispatcher() admin_router.message.middleware(CounterMiddleware) dp.include_routers(user_private_router) dp.include_routers(user_group_router) dp.include_routers(admin_router)" Где тут @, я не понял. Python только начал изучать.
Очень крутой курс, за токое другие деньги берут) спасибо автору за крутой контент!!! Подскажи плиз такую штуку - убрать возможность набирать текст, can_send_messages, например при выборе только из кнопок, куда это сунуть?
У меня удаление анкеты не через инлайн кнопки, а через меню, вот, в orm написана в точности такая же функция, но мне пишут TypeError orm_delete() missing 1 required positional argument:'product_id'. В файле models db тоже все также импорт Product имеется, я не увидел похожего вопроса, поэтому решил задать
Там изменили "место" где нужно указывать метод форматирования (рефакторинг пакетов сделали). Посмотрите в документах "formatting". И никогда не спешите обновлять версии) Видео на 3.3.0, поэтому такие моменты возможны
Столкнулся с проблемой: бот не может отдать изображение по ID. Error: "wrong file identifier/HTTP URL specified". Проблема плавающая. Если пользователь, еще не общался с ботом, то вполне вероятно, что он не увидит картинку. Если удалить и перезапустить чат, в котором отображались картинки, то с определенной вероятностью, картинки не смогут загрузиться по ID, которые сохранены в базе. Выходит, что нельзя доверять хранение изображений/файлов Telegram, и лучше хранить их на диске?
Где что удобнее... Фильтры и прочее удобнее и проще в классах, а хендлеры и прочее удобнее в функциях (когда это свой проект - делаешь так как это удобнее самому). Классы для всего - это не панацея, а зачастую лишь требование загнанного в угол руководителя проекта, а отсюда и стереотипы)))
@@PythonHubStudio пасиб ) и еще вопрос с 14й минуты (возможно дальше будет ответ... кто знает) мидлвар, прописанный в admin_router.message.middleware(CounterMiddleware()) увеличивает счетчик при любом обращении к admin_router, а выводит на экран результат только при Delete Product. Хотя в декораторе @admin_router.message(F.text == "Delete Product") тоже фильтрация происходит. Есть ли какой то способ навешивать мидлвар на конкретную функцию, а не на весь роутер?
Спасибо за видео! Хотелось бы узнать не сталкивались ли вы с ошибкой Unclosed client session. Весь код с вашего видео, использую postgresql в docker контейнере, когда запускаю бота с хоста и подключаю его к docker контейнеру с бд, всё работает отлично. Упаковываю код бота в контейнер и подключаю к контейнеру бд, выдает ошибки Unclosed client session и Unclosed connector. Гуглить получается, а вот советы не работают. Не понимаю как правильно закрывать соединение в коде. Если можете подсказать, будет очень здорово. Видео хорошее, спасибо:)
Во первых, эта ошибка не имеет значения, потому что ваш бот и так 'ложится' при ошибке и его нужно перезапускать. Во вторых, ошибка очень странная, такое обычно бывает когда ресурсов ПК не хватает на вовремя закрытие сессии. Можете указать в функции "on shutdown" закрытие сессии бд "session maker"-a (это будет как действие при экстренных случаях)
Здравствуйте, проходил курс, всегда все получалось сделать, но вот при выводе строки по айди з базы данных постоянно появляется ошибка, пробовал фиксить но безуспешно уже как дня 2. Вот ошибка: RuntimeWarning: coroutine 'AsyncSession.execute' was never awaited
Как сделать бота, которого можно было бы добавить в чат, чтобы бот считал сообщения пользователей и за каждые 50 сообщений давал 5 к балансу пользователя в боте
Автор, спасибо за бесценные видео! Немного глупый вопрос - как корректно передавать параметры в dp.shutdown.register(on_shutdown), если я хочу, допустим, снести БД? пробовал кидать в бота, но не то(
а где можно посмотреть про стандарт наименования таблиц как существительных в единственном числе? Мне вот только во множественном попадались. Т.е. запросы типа SELECT * FROM products; и дальше каждая запись мапится на product, что в принципе логично...
Погуглить, но дело в том, что можно и во множественном числе, но негласное соглашение стараться делать в единственном числе, ведь записи в таблице описывают продукт, и чтоб не путаться с -s или без -s, при работе с таблицами, есть негласное правило product а не products
Здравствуйте. Что делать, если я копирую весь ваш код, который выложен на GitHub, но у меня все равно ничего не работает? В терминале просто очень много каких-то ошибок: Traceback (most recent call last): File "G:\pycharm projects\pythonProject\app.py", line 13, in from database.engine import create_db, drop_db, session_maker File "G:\pycharm projects\pythonProject\database\engine.py", line 12, in engine = create_async_engine(os.getenv('DB_URL'), echo=True) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "G:\pycharm projects\pythonProject\.venv\Lib\site-packages\sqlalchemy\ext\asyncio\engine.py", line 120, in create_async_engine sync_engine = _create_engine(url, **kw) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "", line 2, in create_engine File "G:\pycharm projects\pythonProject\.venv\Lib\site-packages\sqlalchemy\util\deprecations.py", line 281, in warned return fn(*args, **kwargs) # type: ignore[no-any-return] ^^^^^^^^^^^^^^^^^^^ File "G:\pycharm projects\pythonProject\.venv\Lib\site-packages\sqlalchemy\engine\create.py", line 546, in create_engine u = _url.make_url(url) ^^^^^^^^^^^^^^^^^^ File "G:\pycharm projects\pythonProject\.venv\Lib\site-packages\sqlalchemy\engine\url.py", line 846, in make_url raise exc.ArgumentError( sqlalchemy.exc.ArgumentError: Expected string or URL object, got None
@@PythonHubStudio спасибо за обратную связь. причина была еще банальней: 1) сначала было вот-так "sqlite+aiosqlie", а нужно "sqlite+aiosqlite" 2) дальше проявилась еще одна особенность алхимии, что она не подтягивает для mac_M1 модуль greenlet, и его нужно установить руками.
Курс супер. Но есть вопрос)) код разбит по модулям. В юзер Приват основной код. Но в моем случае в одной из функций сценария нужно вызвать методы бота: dowload , get_file. Я эту функцию вынес в main, но из-за этого и всё остальное пришлось переместить, потому что как мне показалось , логика сценария из-за такого переноса тоже страдает. Можно это как- то исправить?
Как я говорил в этом плейлисте - если нужны методы бота в хендлере, просто добавьте параметр bot: Bot, и экземпляр бота пробросится в хендлер: И юзайте в хендлере методы бота await bot....
Действительно) спасибо!! Еще такой вопрос: может ли быть одновременно несколько состояний FSM? Понимаю что это просто другой класс(ы) и не должно быть с этим проблем, но не будет ли конфликта в сценарии?
Вы очень тонко подметили, я этого не сказал в видео. Поверхностно это так и выглядит, но sqlalchemy сформирует, так называемый, пул транзакций, если они однотипные, и выполнит одно обращение к бд. Суть: 1) 100 пользователей единовременно запросили главную страницу 2) Формируется 100 одинаковых сессий в орм 3) Они объединяются в один запрос (реальную одну сессию по работе с бд), которая выполняет единовременную множественную вставку/обновление/выборку из бд.
Можно отключить уведомление о конкретной стилистике. Так писать - нормально, так как подгрузка переменных из окружения должна быть до импорта модуля где создаётся engine. Варианты: 1) Сделать реформат проекта в сторону усложнения для того чтоб использовать подгрузку переменных после имплртов. 2) отключить уведомления от этого уведомления 3) игнорировать
Как вы могли заметить - нет. Будут ли? Вряд-ли, так как фреймворк поверх другого фреймворка ничего хорошего не несёт...(мое мнение). Это если вы имеете ввиду библиотеку по упрощённому созданию диалогов, а не "комнаты" aiogram.
Здравствуйте, повторял всё как в видео, но в конце возникла ошибка при подключении postgresql. Просмотрел на дебаггере, проблема возникает при создании движка. При выполнении строки await conn.run_sync(Base.metadata.create_all), открывается файл библиотеки, как я понял, connect_utils, в ней выполняется функция async def __connect_addr, В которой выполняется условие try: await connected и код завершает работу на куче ошибок. В чём может быть проблема? Использую Windows 10 x64.
Эта информация, к сожалению ни о чем (не говорит о проблеме, не те выдержки прислали)... Для начала проверьте: 1) установлена и работает ли служба PostgreSQL 2) установлен ли asyncpg 3) правильный ли пароль итд указан
Доброго дня! Подскажите, пожалуйста, как можно изменить код, чтобы в конце FSM отправлять данные не в чат с админом, а в другую группу? т.е. не await message.answer(str(data)) что-то в виде: await bot.send_message(chat_id,str(data))
await bot.send_message(admin_id, str(data)) Или так как у нас есть список админов на экземпляре бота, то можно и так: await bot.send_messages(bot.admins_list, str(data)) ^ (множественная рассылка по списку id)
Здравствуйте, не вылазит меню после ввода /admin как на видео на 42-й минуте, ошибок никаких нет, в терминале всё как у вас показывает, но вот меню нет. Сначала в группу вбил /admin подтянул админов, а потом уже боту написал, но ничего. Проверил код admin_private.py там всё нормально, слепил из скраншотов видео весь этот файлик, сверил всё идентично. Подскажите в каком файле ещё может быть ошибка. До этого проверка бота была, всё получилось, застрял на 42 минуте.
@PythonHubStudio Может можете помочь с вопросом по Middleware? На основе ваших замечательных уроков делаю корпоративный бот и хочу не пропускать в бот тех, кого ещё нет в корп группе. За счёт фильтров мне все понятно, но хочется за счёт внешнего Middleware. И так, и сяк, но упёрся в пень. И не Ai, не Google не помогают. Может ваш светлый, чистый ум и открытое сердце помогут? 😊
В методе call мидлвари ДО вызова handler(event, data) заберите из TelegramObject или Message id юзера, и потом по аналогии как мы делали с админами в хендлере, только экземпляр бота возьмите из словаря data и используйте метод бота get chat members (вроде так называется), и просто проверьте, если user id в списке участников группы по id, то только тогда пускать дальше, то есть вызывать handler (event, data)
Здравствуйте, хотел бы вас спросить, когда я хочу добавить товар в базу данных с помощью команды добавить товар в админке, после того как ввожу описание товара, то выводить TypeError: add_description() missing 1 required positional argument: 'session', можете помочь, спасибо!
не могу решить никак проблему по добавлению фото. выбивает в терминале ошибку: "TypeError: add_image() missing 1 required positional argument: 'session'". Я уже даже твой код скопировал с гитхаба и все равно таже ошибка, даже с твоим кодом. В чем может быть проблема?
@@PythonHubStudio попробовал первым вот так: async def add_image(session, message: types.Message, state: FSMContext): и уже пишет что TypeError: add_image() missing 1 required positional argument: 'message'
если у кого будет подобная проблема. то вот что мне помогло: импортируйте from database.engine import session_maker и потом начинайте функцию вот так: async def add_image(message: types.Message, state: FSMContext): async with session_maker() as session: тут остальное без изиенений
Привет! Подскажите что не так- File ......./AppData\Local\Programs\Python\Python39\lib\site-packages\sqlalchemy\engine\url.py", line 846, in make_url raise exc.ArgumentError( sqlalchemy.exc.ArgumentError: Expected string or URL object, got None. Спасибо
Url адрес (строка базы данных) не просчиталась из файла .env, os.getenv вернул None, потому что нет переменной указанной в нем (опечатка). Можете там просто как строку url-ку записать
@@PythonHubStudio не поверите, но сегодня запустил опять Ваш код и все заработала без ошибок. Магия в общем )) все загружает в постегр и базы формирует. Спасибо за урок, жду с нетерпением продолжения :)
Здравствуйте, вроде бы написал код как у Вас, но в админ приват при попытке записи данных в базу данных выдаёт ошибку: KeyError 'image', подскажи пожалуйста что это может быть.(я пишу код в пайчарме) Спасибо! (изменено) ещё есть ошибка "in call return await handler(event, data)" не знаю какая из них главная и вызывает вторую
Подскажите пожалуйста, столкнулся с проблемой... VS Code не всегда предлагает варианты исправления кода как у автора в этом видео. Например на 38:15 "session_maker" подчеркнут желтой линией и Quick Fix предложил вариант с импортом для исправления. Дак вот у меня в этом месте ничего не предлагает исправить, можно только посмотреть проблему. И много таких ситуаций было в течение курса, но иногда все же предлагает варианты для исправления. Quick Fix в настройках везде включен, в расширениях Python установлен последней версии, VS Code так же обновлен до последней версии. Работаю на Mac OS M1. Спасибо всем кто поможет) Я новичок и эта фишка очень помогла бы мне)
Уважаемый автор, у меня есть канал на ютубе. Не такой большой как у Вас и немного на другую тему. Я создал бота для помощи водителям на дороге и планирую его усовершенствовать. Сможете помочь?
@@PythonHubStudio если Вы водитель, то это может бесплатно помочь и Вам))) мне нужна элементарная помощь...бот человеку задает некие вопросы, получает ответы, где-то их собирает и в итоге данные из ответов вставляет в pdf файл и отправляет обратно пользователю
хьюстон, у меня проблема) не удается разрешить импорт kbds.inline, запускал через venv, даже установил версию python 3.11.1, не помогло, было у кого нибуть такое? гугол молчит на эту проблему
Не тот файл возможно запускается, нужно запускать app.py. Причины: 1) В прямом смысле запускаете скрипт не с файла app.py 2) После смены папки проекта не создали новый config для "нового" проекта 3) В pycharm тыкнуть правой кнопкой мыши по папке, где лежит app.py и выбрать "пометить как папку проекта"
Здравствуйте. Появилась проблема (не появляется файл my_base.db, нет самого приложения с базой данных). Код вроде проверил все верно. Как решить такую проблему?
Если вылазит вывод sql запросов, то значит все работает правильно, но!, обратите внимание на то как именно вы открыли проект и как его запустили. Файл my_base.db будет в той папке, где запускается терминал в редакторе. Просто в редакторе откройте терминал (terminal> new terminal) и посмотрите какой там указан путь. Суть в том, что проект нужно открывать в редакторе так, чтоб открыть папку в которой app.py, и тогда все будет на своем месте
Тут я не понял, сначала пропустил, думал это оборот речи, НО какое приложение имеется ввиду? Если вы имеете ввиду DB Browser (SQLite), то его нужно скачать из интернета, не с какого-то там сайта-агрегатора программ, а с их официального: на всякий случай вот ссылка, где я ее скачал: sqlitebrowser.org/
@@PythonHubStudioделайте обязательно, это единственный ролик на ютубе где я нашел как прокинуть скл алхими и сессии через мидлварь а не через глобальную сессию на ютубе! Очень хороший и качественный контент.
Доброго времени суток. Подскажите плиз при попытке изменения товара в ассортименте, а именно сохранении описания (путем ввода точки в сообщение телеграмм-боту) выдает ошибку File "G:\tg\handlers\admin_private.py", line 177, in add_description await state.update_data(description=AddProduct.product_for_change.description) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'ScalarResult' object has no attribute 'description' Пока только учусь этой магии, не судите строго. Все делал по видео, первая ошибка которая появилось на всем пути ))
@@PythonHubStudio хотелось самостоятельно прописать все, но в этом и оказались ошибки. Где то что-то пропустил )) не быть мне код-ревьювером )) А сейчас уже новая ошибка вылезла при подключении уже PostgreSQL где ошибка с URL File "g:\work_place\venv\Lib\site-packages\sqlalchemy\engine\url.py", line 846, in make_url raise exc.ArgumentError( sqlalchemy.exc.ArgumentError: Expected string or URL object, got None
@@PythonHubStudio , привет, не нашел как вопрос решился?, тоже пишу сам, такое ощущение, что product_for_change как то коряво создается... upd: Ну так и есть , начал проверять запрос в базу , по итогу в orm_get_product, указал неверный return - result.scalars(), по итогу поправил на scalar() и все завелось. Вдруг кому пригодится!
Это объект который заботиться о последующей распаковке данных апдейта из json в формат класса python типа Message, Callback и тд. Это внутренняя структура фреймворка и особо париться не нужно на этот счёт
Я ждал это видео 8 дней, автор, пожалуйста прошу, не забрасывай данный курс, именно благодаря твоим роликам и твоему подходу, я заинтересовался программированием и узнал как это интересно, спасибо за то что стараешься!
поддерживаю полностью
полностью поддерживаю!
поддерживаю абсолютно
Это самый лучший и подробный курс по aiogram, который я когда-либо находил! Спасибо огромное за ваш труд!
Спасибо Вам огромное за этот бесценный труд, вы единственный на ютубе, у которого настолько полезные и информативные курсы и видео, без воды, желаю Вам всего наилучшего, спасибо))
Давно я не ждал выходных с таким нетерпением, чтобы полностью проработать и просмотреть очередной офигенный урок! Спасибо Вам огромное за Ваш труд!!!
Пожалуйста, не забрасывайте курс! Очень познавательно. Dialog еще остался как минимум
Под Dialog имею ввиду сцены, например для бота-опросника
Автор, вы самый лучший, я хоть и не начинал ещё изучать базу данных, но я понял все в вашем видео!😊
Ставим больше лайков автору! А то все благодарны, а лайки зажали! Пробежались по всем видео и поставили лайкосы!
Новое видео как целое событие, подписан на все уведомления=) Автору респект!
Ура! Смотрю видео и параллельно поправляю свой код, и приговаривая:
- Какие вы молодцы, как грамотно сделали.
Спасибо большое!
спасибо огромное тебе за твои видео,продолжай пожалуйста,это САМЫЙ ПОЛЕЗНЫЙ КУРС ПО AIOGRAM на ютубе
как же мне жаль, что я не нашел это видео раньше! Большое спасибо!
Большое спасибо! Ваши уроки помогают делать проект для защиты в Вузе!
Парень, ты красава! Инфа годная! Большой плюс за ссылку на репозиторий!
Спасибо большое за этот замечательные курсы ! Понятно объясняете !!! 👍👍👍
Хахах, я тоже очень ждал продолжения))
Два дня просматривал новости с вашего канала.
Огромное спасибо автору!!!
спасибо за классный материал, да интересную подачу и за ответы на наши вопросы. с нетерпением жду следующий урок! )
Лучший ресурс по Python! Автор как близкий друг уже
Вот сколько смотрю, что по aiogram v2, что по aiogram v3, вот сразу в глаза бросается, как автор кнопки реплай любит больше чём инлайн))) Спасибо за ваш труд)
В следующем видео они вам тоже не понравятся))) Будем делать многоуровневое меню, каталог, корзину через них
@@PythonHubStudio а у меня вот полтергейст с aiogram, с год наверно висит на сервере бот ещё на aiogram 2.23.1, всё работает исправно. А вот с компа его в PyCharm запускаю, команды все работают, а инлайн кнопки молчат.
Всем Здравствуйте! Поддерживаю, бесценный труд. Большое спасибо вам
Большое Вам спасибо за Вашу работу!!!
Спасибо, очень ждал это видео.
Надеюсь далее будет рассмотрен Redis, например в качестве хранилища у FSM.
Также, если можно, рассмотрите защиту от спамеров, так называемый троттлинг.
Большое спасибо еще раз за ваш большой труд!
Спасибо большое. Видео очень помогло с пробросом сессии.
Большое спасибо за Вашу работу. Вы хороший человек.
Долгожданное видео 👍👍👍
Ты просто лучший!!! Все доступно и понятно
Лучший канал по python
Было бы интересно посмотреть как ты объясняешл докер и в целом контейнерезацию. Буду ждать видос
Посмотрел как сериал, спасибо.
Здраствуйте, большое спасибо Вам.
Здраствуйте. мне нужно написать бота для регистрации клиентов в салон красоты . подскажите пожалуйста в следующем видео как правильно обратиться к базе данных чтоб она проверила есть ли какая то запись на такое то время и если есть то об этом сообщила и попросила клиента выбрать другое время. буду очень благодарен так как сам пока понять не могу
Спасибо Вам за ваш труд! Жду Ваших новых роликов. Скажите, будет ли дальше telegram wep app?
Ещё не знаю буду делать или нет
Ценная информация, но если бы не то-есть и скажем так! Было бы вообще супер.
Согласен, скажем так)
@@PythonHubStudio Рад что реакция позитивная. Программист может быть чрезмерно увлечен языком программирования забывая, что он говорит на русском. А речь способна засорятся из окружающей нас среды, И ученик смотрящий разных блогеров не может понять, а как же правильно писать нужный ему метод из сони предложенных, написанных на одном языке по разному.
Спасибо за видео 👍
Лучший, благодаря тебе давным давно сделал телеграм бота и после этого теперь могу любой сложности сделать. И вот вопрос, сильно ли отличается aiogram 2 от3 ? Стоит ли пересмотреть курс новой версии?
Нововведений достаточно, но тут смотрите сами что вам нужно или нет.
@PythonHubStudio, здравствуйте спасибо за бесценные уроки, но хотелось бы узнать будет ли продолжение курса, а то это видео оборвалось даже без тизеров не так как раньше. Если курс окончен вы хоть скажите что бы мы не ждали продолжение😭😭😭. В дополнение тоже бы хотелось уточнить "Будут ли реализованы корзина, кнопки для добавления позиций меню, оплата" Хотелось бы узнать как сделать так что бы при выборе товара все остальное что было написано до этого скрывалось?
Продолжение будет, тизерил где-то в середине видео))) В следующем видео точно будет пагинация товаров (инайн меню) и... точного сценария пока нет
@@PythonHubStudio Добрый день жду следующего видео с нетерпением, мб хоть скажите когда ждать?)
Как бы ни хотелось быстрее, не получается, не успеваю всё совмещать... Но следующее видео будет большим: многоуровневое онлайн меню(меню, каталог, корзина товаров пользователя). Когда точно не скажу...
Python Hub Studio, надеюсь у тебя все ок. возвращайся в прежний ритм. 2 недели прошло с последнего урока, мы ждем продолжения курса! )
Все ок, время.... На днях будет следующий: многоуровневое инлайн меню, корзина товаров, пагинация.
Еще клево было бы добавить какие то запланированные задачи по Cron. Например каждую минуту отправлять сообщение в чат. Например выкладывать статистику какую ни будь в чат.
Огромное спасибо. Тема с базами данных всегда тяжелая и если бы я учил это самостоятельно я бы сжег себе все мозги.
А у меня такой вопрос. Если бот работает на нескольких серверах то базу данных он будет использовать одну для всех?
Подскажите, в конце ролика использование базы данных SQL postgre это как альтернатива DB sql lite? Можно же пользоваться SQL lite из начала ролика и не устанавливать ту, которая в конце?
Можно
есть предложение провести рефакторинг и разделить код в обработчиках. На 1:21:30 вот это "где-где-где" как раз остро намекает о необходимости разделить. я тоже в процессе написания бегал так по коду высматривая нужные строки, а когда услышал уже знакомое для себя "где-где" понял, что проблема прям массовая )
Абсолютно согласен!👍 Но именно там вроде некуда делить, разве что fsm вынести отдельно, но тогда в том файле останется только 3 хендлера.... Диалоги они такие...
Круто, спасибо!
Разобрался, я молодчина
👍
Спасибо!
Благодарю за поддержку 👍
Написал по вопросу о сотрудничестве, вы не отвечаете. Как с вами можно связаться?
Нашел ваше письмо, К сожалению, менторством и работой с частными проектами не занимаюсь. Вопросы по видео или советы - через комментарии.
Курс одним словом пушка.За ет однозначно лайк неглядя. По поводу БД есть ряд вопросов.
1. В чем отличия прямих запросов в базу даних от SqlAlchemy? Что в целом лутше (и правильнее) изпользовать для тех ти иних ботов? На что обратить внимание что би стать хорошим профильним програмистом?
2. Как можно и возможно ли вообще изпользовать несколько баз даних одна как видео SQL 3 и вторая PostgreSQL?
3. Будет ли дальнейшие видео о создании личного кабинета как пользователя так и админа? Очень би хотелось би увидеть как можно грамотно реализовать для админа ввод и смена пароля по "ключу " ? Очень хотелось би увидеть так как ви отлично на примерах можете об'яснить что к чему и почему.
1) Отличие в том чтоб не писать запросы самому на языке sql и чтоб не писать с нуля самому методы по взаимодействию, в вариантах с этими же запросами, с базой данных. Правильнее тут нет... Потому что требования к проектам разные. Скорость разработки - своё. Если пишите сами (на заказ) - однозначно работа через orm(sqlalchemy и подобное), если работать в команде, там уже могут быть варианты (возможно будет реализована своя система с запросами к базе с использованием нативного sql).
2) SQLite - это база данных для работы приложения в "одно лицо", годиться в основном только для хранения данных для приложения, в котором только один пользователь (одно приложение) получает к нему доступ (или для легко нагруженного бота, который работает у вас на ПК), для работы с высокой нагрузкой и множеством подключений нужно PostgreSQL и подобные решения
@@PythonHubStudio Бладарю за ответ.
@@PythonHubStudio тоисть я правильно понимаю что для викторин каких то информационих ботов можно использовать sql3 lite, а для магазинов или каких то комерческих проектов то PostgreSql?
@@PythonHubStudio и еще такой возможно уточняющий вопрос: если бот бил написан с использованием sql 3 lite на прямих запросах без использования sqlalchemy. Как его перевести на PostgreSql? Прийдеться переписивать с нуля код с запросами в БД или нет?
Отличие между синтаксисом в SQLite и PostgreSQL мизерное... Может быть придется пару запросов переделать
братишька, давай еще видео!
1:03:45 - "Но мы это никак не обрабатываем. Соответственно пользователь это тоже видит, то есть ничего не работает - супер" 🤣🤣🤣
Доброго времени, автор!
Нуждаюсь в вашем совете
Скажите, на парсинге можно заработать?
Пробовал веб разработку, но учить много и не так просто попасть на джуна, да и джунов полно уже
Хотел поинтересоватся, если нацелится только лишь на парсинг, ну + телеграмм боты например (или что ещё нужно освоить?), можно ли в скором времени на фрилансе брать заказы, или тоже не годный вариант?
Не хочу бросать программирование, но и без быстрого результата, тоже скучно, так сказать
Помогите советом
Можно, на этом зарабатывают, я так начинал. Во фрилансе все зависит от личных качеств: насколько хорошо у вас получится брать заказы и что самое главное - набить постоянную аудиторию клиентов (повторные обращения, ваш личный рейтинг на фриланс платформах, заказы с последующей долгосрочной поддержкой и тд..., чтоб не сидеть только на случайно пойманных заказах). Одного парсинга маловато (но для начала пойдет), если + боты уже лучше. Но самый главный совет - не бросайте то что уже знаете и достигли.
Спасибо автору. Тяжелый труд, но тысячи благодарных учеников по этому курсу. С нетерпением хочу дописать по этим урокам бота и использовать его как отличную базу для дальнейших работ. В процессе теста возник вопрос. Часто товары вводим на кирилице и в цене автоматом ставим запятую вместо точки. Функция Float это не пропускает и отправляет на проверку ошибки. Читал, что можно это делать с помощью модуля LOCALE. Подскажите как это исправить, может есть какой то вообще простой метод?
Проще так:
if ',' in text:
text = text.replace(',', '.')
Огромное спасибо за ответ. Действительно просто. Хотел ещё спросить. Было бы не плохо, чтобы в админ хендлере после удаления товара его карточка тоже сразу удалялась с чата чтоб не перегружать его информацией и не делать новый запрос на выборку номенклатуры. Это будет дальше реализовано или искать методы самому? @@PythonHubStudio
После этого урока еще выскочил баг. Понятно, что на этом этапе урока мы уже все намного умнее, но... Если при добавлении товара в фото указать точку (не при изменении, а именно при добавлении), то выводит ошибку не в чат, а в терминал AttributeError: 'NoneType' object has no attribute 'image'. Или у меня ошибка в коде, или действительно так? @@PythonHubStudio
Нужно добавить дополнительное условие в хендлер, на проверку есть ли товар для изменения
Здравствуйте, видео очень полезное с подробными объяснениями, хотелось бы вас спросить, после освоения данного плейлиста и переход изучения библиотеки Джанго, хорошая идея? Хочу по больше изучать Питон и библиотеки
Django лучше чем боты. Однозначно стоит.
@@PythonHubStudio Здравствуйте, спасибо за ответ!
Здравствуйте.
А сколько у вас ушло примерно времени от самого начала освоения программирования до первой зарплаты?
Спасибо тебе за твой труд, и очень любопытно сколько может стоить такой бот?
Добрый день!
Спасибо вам за классно преподнесенный материал.
Хотел уточнить информацию, вот как самому научиться писать то что вы делаете?
Как вы понимаете какие функции надо писать?
Просто столько инфы полезной, но хотелось бы от вас (развернутый по возможности) ответ.
Потому что, сам сижу читаю документацию либо ничего не понимаю либо не могу найти информацию
Спасибо еще раз за контент
Я этому много уделил времени в плейлисте этих видео - чтение документации api telegram и aiogram. Только такой путь.
Будет ли 3 часть для django home курса?
9:46, у меня у одного на этом моменте возникла ошибка
"TypeError: CounterMiddleware.__init__() takes 1 positional argument but 4 were given"?
И даже если в инициализатор впихнуть *args то потом возникает другая ошибка
"TypeError: object CounterMiddleware can't be used in 'await' expression". Вроде всё как на видео, но не получается
Скиньте сюда код метода init мидлвари и строку где он регистрируется
@@PythonHubStudio Регистрация middleware @basecmdRouter.message.outer_middleware(PrivateChatOnlyMiddleware())
Сам код class PrivateChatOnlyMiddleware(BaseMiddleware):
async def __call__(
self,
handler: Callable[[Message, Dict[str, Any]], Awaitable[Any]],
event: Message,
data: Dict[str, Any],
) -> Any:
if F.chat.type.in_(["group", "supergroup"]):
await event.answer("ok")
return await handler(event, data)
TypeError: __call__() missing 2 required positional arguments: 'event' and 'data'
Возникает ошибка. Перепробовал достаточно разных примеров мидлвари, все приводят к одному и тому же. Может быть вы сможете подсказать в чем заключается ошибка
В самом методе call все нормально. Зачем символ декоратора @ в регистрации мидлвари? Просто через объект роутера нужно
Тоже столкнулся с этой ошибкой, полез гуглить, добавил аргументы и поймал следующую ошибку...
Все делал как в видео. Единственное отличие, PyCharm.
"dp = Dispatcher()
admin_router.message.middleware(CounterMiddleware)
dp.include_routers(user_private_router)
dp.include_routers(user_group_router)
dp.include_routers(admin_router)"
Где тут @, я не понял. Python только начал изучать.
Сори, нашел ошибку. Не внимательный, потерял скобки.
Очень познавательно видео.
Почему мы не используем асинхронность при создании кнопок?
Потому что там ждать нечего, их код выполняется сразу без задержек на ожидание чего-то, например на получение ответа от сервера или от бд
@@PythonHubStudio Спасибо за быстрый ответ. Жду следующего видео ролика
Будут ли реализованы корзина, кнопки для добавления позиций меню, оплата?
В плане есть
Доброго времени суток! А Вы случаем индивидуально и групповые занятия не проводите?
Очень крутой курс, за токое другие деньги берут) спасибо автору за крутой контент!!!
Подскажи плиз такую штуку - убрать возможность набирать текст, can_send_messages, например при выборе только из кнопок, куда это сунуть?
Просто удаляйте все что пользователь вводит не с вашей клавиатуры
У меня удаление анкеты не через инлайн кнопки, а через меню, вот, в orm написана в точности такая же функция, но мне пишут TypeError orm_delete() missing 1 required positional argument:'product_id'. В файле models db тоже все также импорт Product имеется, я не увидел похожего вопроса, поэтому решил задать
Заметил, что на aiogram 3.7 не работает форматирование подписей под фото..
Пица
Пица
Там изменили "место" где нужно указывать метод форматирования (рефакторинг пакетов сделали). Посмотрите в документах "formatting". И никогда не спешите обновлять версии) Видео на 3.3.0, поэтому такие моменты возможны
Когда новое видео?
Столкнулся с проблемой: бот не может отдать изображение по ID. Error: "wrong file identifier/HTTP URL specified". Проблема плавающая. Если пользователь, еще не общался с ботом, то вполне вероятно, что он не увидит картинку. Если удалить и перезапустить чат, в котором отображались картинки, то с определенной вероятностью, картинки не смогут загрузиться по ID, которые сохранены в базе. Выходит, что нельзя доверять хранение изображений/файлов Telegram, и лучше хранить их на диске?
здравствуйте, у меня проблема: Telegram server says - Bad Request: can't parse entities: Unexpected end tag at byte offset 82
огонь! я вот заметил особенность: весь проект в функциональном стиле, а фильтры и мидлвары в ООП. Чем обусловлен такой подход?
Где что удобнее... Фильтры и прочее удобнее и проще в классах, а хендлеры и прочее удобнее в функциях (когда это свой проект - делаешь так как это удобнее самому). Классы для всего - это не панацея, а зачастую лишь требование загнанного в угол руководителя проекта, а отсюда и стереотипы)))
@@PythonHubStudio пасиб ) и еще вопрос с 14й минуты (возможно дальше будет ответ... кто знает) мидлвар, прописанный в admin_router.message.middleware(CounterMiddleware()) увеличивает счетчик при любом обращении к admin_router, а выводит на экран результат только при Delete Product. Хотя в декораторе @admin_router.message(F.text == "Delete Product") тоже фильтрация происходит. Есть ли какой то способ навешивать мидлвар на конкретную функцию, а не на весь роутер?
Нет, только на роутер - до или после фильтров
Ну да , можно упростить в разы на классах, потом легче переносить в другие проекты. Ассемблер напоминает 😊, взять это копировать туда гоу-ту джамп😊
Спасибо за видео! Хотелось бы узнать не сталкивались ли вы с ошибкой Unclosed client session. Весь код с вашего видео, использую postgresql в docker контейнере, когда запускаю бота с хоста и подключаю его к docker контейнеру с бд, всё работает отлично. Упаковываю код бота в контейнер и подключаю к контейнеру бд, выдает ошибки Unclosed client session и Unclosed connector. Гуглить получается, а вот советы не работают. Не понимаю как правильно закрывать соединение в коде. Если можете подсказать, будет очень здорово. Видео хорошее, спасибо:)
Во первых, эта ошибка не имеет значения, потому что ваш бот и так 'ложится' при ошибке и его нужно перезапускать. Во вторых, ошибка очень странная, такое обычно бывает когда ресурсов ПК не хватает на вовремя закрытие сессии. Можете указать в функции "on shutdown" закрытие сессии бд "session maker"-a (это будет как действие при экстренных случаях)
Здравствуйте, проходил курс, всегда все получалось сделать, но вот при выводе строки по айди з базы данных постоянно появляется ошибка, пробовал фиксить но безуспешно уже как дня 2. Вот ошибка:
RuntimeWarning: coroutine 'AsyncSession.execute' was never awaited
Где-то забыли await написать
сделаем скидка 3.00 -> 2.99 ))
😅
Как сделать бота, которого можно было бы добавить в чат, чтобы бот считал сообщения пользователей и за каждые 50 сообщений давал 5 к балансу пользователя в боте
у меня почему-то наоборот вылетает миллиард ошибок после того как подключил базу данных, причем ошибки не схожие вообще
Покажите как добавить на самое первое сообщение от бота (start) фотографию над текстом или gif файл. Благодарю!
.answer_photo(InputFile(фото)или id или url фото в виде строки, captions=текст)
Или сначала просто без описания фотку, и следом текст
Автор, спасибо за бесценные видео!
Немного глупый вопрос - как корректно передавать параметры в dp.shutdown.register(on_shutdown), если я хочу, допустим, снести БД? пробовал кидать в бота, но не то(
Так как было в on_startup функции.
а где можно посмотреть про стандарт наименования таблиц как существительных в единственном числе? Мне вот только во множественном попадались. Т.е. запросы типа SELECT * FROM products; и дальше каждая запись мапится на product, что в принципе логично...
Погуглить, но дело в том, что можно и во множественном числе, но негласное соглашение стараться делать в единственном числе, ведь записи в таблице описывают продукт, и чтоб не путаться с -s или без -s, при работе с таблицами, есть негласное правило product а не products
Здравствуйте. Что делать, если я копирую весь ваш код, который выложен на GitHub, но у меня все равно ничего не работает? В терминале просто очень много каких-то ошибок:
Traceback (most recent call last):
File "G:\pycharm projects\pythonProject\app.py", line 13, in
from database.engine import create_db, drop_db, session_maker
File "G:\pycharm projects\pythonProject\database\engine.py", line 12, in
engine = create_async_engine(os.getenv('DB_URL'), echo=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "G:\pycharm projects\pythonProject\.venv\Lib\site-packages\sqlalchemy\ext\asyncio\engine.py", line 120, in create_async_engine
sync_engine = _create_engine(url, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "", line 2, in create_engine
File "G:\pycharm projects\pythonProject\.venv\Lib\site-packages\sqlalchemy\util\deprecations.py", line 281, in warned
return fn(*args, **kwargs) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^
File "G:\pycharm projects\pythonProject\.venv\Lib\site-packages\sqlalchemy\engine\create.py", line 546, in create_engine
u = _url.make_url(url)
^^^^^^^^^^^^^^^^^^
File "G:\pycharm projects\pythonProject\.venv\Lib\site-packages\sqlalchemy\engine\url.py", line 846, in make_url
raise exc.ArgumentError(
sqlalchemy.exc.ArgumentError: Expected string or URL object, got None
Добрый день! я тоже с этой ошибкой столкнулся. Вы ее победили?
@@valerijt4344 нет
Нужно подключить базу данных. Именно об этом и говорит ошибка
@@PythonHubStudio спасибо за обратную связь. причина была еще банальней:
1) сначала было вот-так "sqlite+aiosqlie", а нужно "sqlite+aiosqlite"
2) дальше проявилась еще одна особенность алхимии, что она не подтягивает для mac_M1 модуль greenlet, и его нужно установить руками.
@@valerijt4344 Вы святой человек, благодарствую от всей души, сидел с этой же проблемой часа два
Курс супер. Но есть вопрос)) код разбит по модулям. В юзер Приват основной код. Но в моем случае в одной из функций сценария нужно вызвать методы бота: dowload , get_file. Я эту функцию вынес в main, но из-за этого и всё остальное пришлось переместить, потому что как мне показалось , логика сценария из-за такого переноса тоже страдает. Можно это как- то исправить?
Как я говорил в этом плейлисте - если нужны методы бота в хендлере, просто добавьте параметр
bot: Bot, и экземпляр бота пробросится в хендлер:
И юзайте в хендлере методы бота
await bot....
Действительно) спасибо!! Еще такой вопрос: может ли быть одновременно несколько состояний FSM? Понимаю что это просто другой класс(ы) и не должно быть с этим проблем, но не будет ли конфликта в сценарии?
Получается что на каждый клик по кнопке или сообщению открывается новая сессия?
А если там будет тысяча кликающих и пишущих пользователей?
Вы очень тонко подметили, я этого не сказал в видео. Поверхностно это так и выглядит, но sqlalchemy сформирует, так называемый, пул транзакций, если они однотипные, и выполнит одно обращение к бд. Суть: 1) 100 пользователей единовременно запросили главную страницу
2) Формируется 100 одинаковых сессий в орм
3) Они объединяются в один запрос (реальную одну сессию по работе с бд), которая выполняет единовременную множественную вставку/обновление/выборку из бд.
день вопросов продолжается)
как решить проблему, когда flake8 ругается на load_dotenv(find_dotenv()) между импортами ?
Можно отключить уведомление о конкретной стилистике. Так писать - нормально, так как подгрузка переменных из окружения должна быть до импорта модуля где создаётся engine. Варианты:
1) Сделать реформат проекта в сторону усложнения для того чтоб использовать подгрузку переменных после имплртов.
2) отключить уведомления от этого уведомления
3) игнорировать
Если будут править разные карточки два админа одновременно, то будет любопытный результат.
Да, это не предусмотрено
Здравствуйте! На аиограм диалог есть видео уроки?
Как вы могли заметить - нет. Будут ли? Вряд-ли, так как фреймворк поверх другого фреймворка ничего хорошего не несёт...(мое мнение). Это если вы имеете ввиду библиотеку по упрощённому созданию диалогов, а не "комнаты" aiogram.
Здравствуйте, повторял всё как в видео, но в конце возникла ошибка при подключении postgresql. Просмотрел на дебаггере, проблема возникает при создании движка. При выполнении строки await conn.run_sync(Base.metadata.create_all), открывается файл библиотеки, как я понял, connect_utils, в ней выполняется функция async def __connect_addr, В которой выполняется условие try:
await connected и код завершает работу на куче ошибок. В чём может быть проблема? Использую Windows 10 x64.
Эта информация, к сожалению ни о чем (не говорит о проблеме, не те выдержки прислали)...
Для начала проверьте:
1) установлена и работает ли служба PostgreSQL
2) установлен ли asyncpg
3) правильный ли пароль итд указан
Доброго дня!
Подскажите, пожалуйста, как можно изменить код, чтобы в конце FSM отправлять данные не в чат с админом, а в другую группу?
т.е. не
await message.answer(str(data))
что-то в виде:
await bot.send_message(chat_id,str(data))
Вы все правильно написали (метод через bot). В чем именно проблема?
@@PythonHubStudio ну вот не могу правильно дописать в Вашем примере.
Задача: чтобы отправить все данные в «data” не пользователю, а в админский чат
await bot.send_message(admin_id, str(data))
Или так как у нас есть список админов на экземпляре бота, то можно и так:
await bot.send_messages(bot.admins_list, str(data)) ^ (множественная рассылка по списку id)
@@PythonHubStudio мне кажется я так писал. Проверю сейчас
@@PythonHubStudio все получилось, ошибка была в том, что я не передавал bot в хендлере...
спасибо
Здравствуйте, не вылазит меню после ввода /admin как на видео на 42-й минуте, ошибок никаких нет, в терминале всё как у вас показывает, но вот меню нет. Сначала в группу вбил /admin подтянул админов, а потом уже боту написал, но ничего. Проверил код admin_private.py там всё нормально, слепил из скраншотов видео весь этот файлик, сверил всё идентично. Подскажите в каком файле ещё может быть ошибка. До этого проверка бота была, всё получилось, застрял на 42 минуте.
По описанию не могу сказать что не так. Сверьтесь с гитхабом урока.
@PythonHubStudio Может можете помочь с вопросом по Middleware? На основе ваших замечательных уроков делаю корпоративный бот и хочу не пропускать в бот тех, кого ещё нет в корп группе. За счёт фильтров мне все понятно, но хочется за счёт внешнего Middleware. И так, и сяк, но упёрся в пень. И не Ai, не Google не помогают. Может ваш светлый, чистый ум и открытое сердце помогут? 😊
В методе call мидлвари ДО вызова handler(event, data)
заберите из TelegramObject или Message id юзера, и потом по аналогии как мы делали с админами в хендлере, только экземпляр бота возьмите из словаря data и используйте метод бота get chat members (вроде так называется), и просто проверьте, если user id в списке участников группы по id, то только тогда пускать дальше, то есть вызывать handler (event, data)
@@PythonHubStudioОгромное спасибо. Все вышло. Теперь у меня есть закрытый бот для нужд компании
Отлично!👍, рад что все получилось!!!
Привет , подскажите почему в класс Base не передать id ? Он же тоже будет у всех классов
Можно
Здравствуйте, хотел бы вас спросить, когда я хочу добавить товар в базу данных с помощью команды добавить товар в админке, после того как ввожу описание товара, то выводить TypeError: add_description() missing 1 required positional argument: 'session', можете помочь, спасибо!
Сессию передайте в функцию добавления из хендлера
не могу решить никак проблему по добавлению фото. выбивает в терминале ошибку: "TypeError: add_image() missing 1 required positional argument: 'session'". Я уже даже твой код скопировал с гитхаба и все равно таже ошибка, даже с твоим кодом. В чем может быть проблема?
А сессию первым аргументом передаёте в add_image(session, ...) ?
@@PythonHubStudio попробовал первым вот так: async def add_image(session, message: types.Message, state: FSMContext):
и уже пишет что TypeError: add_image() missing 1 required positional argument: 'message'
если у кого будет подобная проблема. то вот что мне помогло: импортируйте from database.engine import session_maker и потом начинайте функцию вот так:
async def add_image(message: types.Message, state: FSMContext):
async with session_maker() as session:
тут остальное без изиенений
У меня выдает ошибку в файле admin_private:
AttributeError: type object 'AddProduct' has no attribute '_all_states_'
У кого нибудь случилось такое?
По два подчеркивания по краям:
'__all_states__'
Привет! Подскажите что не так- File ......./AppData\Local\Programs\Python\Python39\lib\site-packages\sqlalchemy\engine\url.py", line 846, in make_url
raise exc.ArgumentError(
sqlalchemy.exc.ArgumentError: Expected string or URL object, got None. Спасибо
разобрался в чем проблема была? а то у меня тоже она выскочила!!
Url адрес (строка базы данных) не просчиталась из файла .env, os.getenv вернул None, потому что нет переменной указанной в нем (опечатка). Можете там просто как строку url-ку записать
@@PythonHubStudio не поверите, но сегодня запустил опять Ваш код и все заработала без ошибок. Магия в общем )) все загружает в постегр и базы формирует. Спасибо за урок, жду с нетерпением продолжения :)
ругается на строчки импорт датабейс, хотя вроде все точно так же как у вас, помогите пожалуйста?
Возможно проект открыт в редакторе на директорию выше чем положено.
Здравствуйте, вроде бы написал код как у Вас, но в админ приват при попытке записи данных в базу данных выдаёт ошибку: KeyError 'image', подскажи пожалуйста что это может быть.(я пишу код в пайчарме) Спасибо!
(изменено)
ещё есть ошибка "in call return await handler(event, data)" не знаю какая из них главная и вызывает вторую
У меня такая же ошибка, только с кейеррор: description
Здравствуйте! Решили проблему?
Подскажите пожалуйста, столкнулся с проблемой... VS Code не всегда предлагает варианты исправления кода как у автора в этом видео. Например на 38:15 "session_maker" подчеркнут желтой линией и Quick Fix предложил вариант с импортом для исправления. Дак вот у меня в этом месте ничего не предлагает исправить, можно только посмотреть проблему. И много таких ситуаций было в течение курса, но иногда все же предлагает варианты для исправления. Quick Fix в настройках везде включен, в расширениях Python установлен последней версии, VS Code так же обновлен до последней версии. Работаю на Mac OS M1. Спасибо всем кто поможет) Я новичок и эта фишка очень помогла бы мне)
Проект открыт нормально в редакторе? Или вы открыли папку с этим и кучей других проектов?
Уважаемый автор, у меня есть канал на ютубе. Не такой большой как у Вас и немного на другую тему. Я создал бота для помощи водителям на дороге и планирую его усовершенствовать. Сможете помочь?
Извините, но дел и так очень много... С личным проектом не помогу.
@@PythonHubStudio если Вы водитель, то это может бесплатно помочь и Вам))) мне нужна элементарная помощь...бот человеку задает некие вопросы, получает ответы, где-то их собирает и в итоге данные из ответов вставляет в pdf файл и отправляет обратно пользователю
ну если не получится, то извините)))
С помощью какого плагина происходит автоимпорт?
pylance
Алхимия как смысл жизни 😂
Все хотят изобрести "философский камень")))
хьюстон, у меня проблема) не удается разрешить импорт kbds.inline, запускал через venv, даже установил версию python 3.11.1, не помогло, было у кого нибуть такое? гугол молчит на эту проблему
Не тот файл возможно запускается, нужно запускать app.py.
Причины:
1) В прямом смысле запускаете скрипт не с файла app.py
2) После смены папки проекта не создали новый config для "нового" проекта
3) В pycharm тыкнуть правой кнопкой мыши по папке, где лежит app.py и выбрать "пометить как папку проекта"
@@PythonHubStudio
сам накосячил, букву перепутал в названии папки) неделю искал проблему🤣
😅норм)
Здравствуйте. Появилась проблема (не появляется файл my_base.db, нет самого приложения с базой данных). Код вроде проверил все верно. Как решить такую проблему?
Ошибку отображает? Если нет, обновите експлорер файлов в редакторе, если есть ошибка, то рассмотрите ее, или пришлите сюда, посмотрим
@@PythonHubStudio, никаких ошибок нет. В терминале вылазит вывод sql-запросов. VS Code перезагружал. Файла все равно нет
Если вылазит вывод sql запросов, то значит все работает правильно, но!, обратите внимание на то как именно вы открыли проект и как его запустили. Файл my_base.db будет в той папке, где запускается терминал в редакторе. Просто в редакторе откройте терминал (terminal> new terminal) и посмотрите какой там указан путь. Суть в том, что проект нужно открывать в редакторе так, чтоб открыть папку в которой app.py, и тогда все будет на своем месте
@@PythonHubStudio, благодарю вас за помощь. Действительно помогло. Но приложение так и не нашёл.
Тут я не понял, сначала пропустил, думал это оборот речи, НО какое приложение имеется ввиду? Если вы имеете ввиду DB Browser (SQLite), то его нужно скачать из интернета, не с какого-то там сайта-агрегатора программ, а с их официального: на всякий случай вот ссылка, где я ее скачал:
sqlitebrowser.org/
подскажите пожалуйста как быть без dotenv, он не устанавливается, пришлось просто через конфиг, но тогда файл базы не создаётся
url бд тоже из конфига берите, или установите другую библиотеку для работы с env файлами (их много)
спасибо. я просто через pip3 установил. Но всё равно не создаётся файлик. так то ошибок нет. И принтит "бот лёг"
@@PythonHubStudio в чём может быть проблема?
с этим тоже разобрался уже. Но вот файлик реально не создаёт
нашёл. она почему в pythonprojects создалась
Автор доброго времени суток. У меня на сервере установлено MySQL Mariadb и клиент phpmyadmin Mariadb как в таком случае подключаться подскажите?
Погуглите: sqlalchemy для асинхронной MySQL. Будет примерно так:
mysql+asyncmy://login: password@localhost/dbname
@@PythonHubStudio спасибо большое.
Продолжение будет видео уроков с инструкциями? Учусь, записываю основные моменты
Следующий видик уже есть, дальше не знаю, буду делать продолжение или нет...
@@PythonHubStudioделайте обязательно, это единственный ролик на ютубе где я нашел как прокинуть скл алхими и сессии через мидлварь а не через глобальную сессию на ютубе! Очень хороший и качественный контент.
Доброго времени суток. Подскажите плиз при попытке изменения товара в ассортименте, а именно сохранении описания (путем ввода точки в сообщение телеграмм-боту) выдает ошибку
File "G:\tg\handlers\admin_private.py", line 177, in add_description
await state.update_data(description=AddProduct.product_for_change.description)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'ScalarResult' object has no attribute 'description'
Пока только учусь этой магии, не судите строго. Все делал по видео, первая ошибка которая появилось на всем пути ))
Хм... А исходник с GitHub работает?
@@PythonHubStudio хотелось самостоятельно прописать все, но в этом и оказались ошибки. Где то что-то пропустил )) не быть мне код-ревьювером ))
А сейчас уже новая ошибка вылезла при подключении уже PostgreSQL где ошибка с URL
File "g:\work_place\venv\Lib\site-packages\sqlalchemy\engine\url.py", line 846, in make_url
raise exc.ArgumentError(
sqlalchemy.exc.ArgumentError: Expected string or URL object, got None
Видел вопрос решился)
@@PythonHubStudio , привет, не нашел как вопрос решился?, тоже пишу сам, такое ощущение, что product_for_change как то коряво создается...
upd:
Ну так и есть , начал проверять запрос в базу , по итогу в orm_get_product, указал неверный return - result.scalars(), по итогу поправил на scalar() и все завелось.
Вдруг кому пригодится!
не совсем понятно, что такое handler в middleware
Это объект который заботиться о последующей распаковке данных апдейта из json в формат класса python типа Message, Callback и тд. Это внутренняя структура фреймворка и особо париться не нужно на этот счёт
@@PythonHubStudio спасибо!
У вас что-то с микрофоном не так.Местами по ушам бьет
Приму во внимание!