aiogram 3 - Telegram бот python #6 FSM Машина состояний, Админка в боте, Диалоги, фильтр IsAdmin

Поділитися
Вставка
  • Опубліковано 26 гру 2024

КОМЕНТАРІ • 210

  • @artemoleinichenko1005
    @artemoleinichenko1005 10 місяців тому +13

    Прекрасный разбор. Один из лучших русскоязычных авторов на платформе UA-cam! Кто смотрит - будете довольны.

  • @belford123
    @belford123 11 місяців тому +18

    Не выходные а фантастика! 😃✌🏻 Спасибо автор!

    • @PythonHubStudio
      @PythonHubStudio  11 місяців тому +1

      Точно, сегодня же воскресенье 😀 Хорошего вечера!!!

  • @GameStreamJ
    @GameStreamJ 11 місяців тому +4

    Как же я ждал этот видос 🎉

  • @Ильмир_Гильмияров
    @Ильмир_Гильмияров 2 місяці тому

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

    • @PythonHubStudio
      @PythonHubStudio  Місяць тому

      Благодарю, очень приятно!

  • @alsoduos
    @alsoduos 11 місяців тому +5

    Огромное спасибо за урок! С нетерпением жду следующего!

  • @Евгений-т3ц9к
    @Евгений-т3ц9к 11 місяців тому +4

    Во, еще видос! Автор красава! Есть чем заняться в выходной день!))) Здоровья тебе! Лайк!

  • @Jloh9-11
    @Jloh9-11 10 місяців тому +3

    Вы делаете очень качественный контент! Спасибо вам большое за труд!

  • @IvaschenkoN
    @IvaschenkoN 11 місяців тому +2

    Спасибо! Качество кода и подача материала на высоте! Огромная просьба завернуть проект в докер перед началом использования базы. Надеюсь что моя просьба не увеличит интервал подачи материала. С нетерпением ждем продолжение )

    • @PythonHubStudio
      @PythonHubStudio  11 місяців тому +3

      Благодарю 👍.Давайте докер отложим на потом, чтоб не вмешивать не связанный с aiogram инструмент, в итак насыщенное следующее видео (middleware, sqlalchemy и тд).

    • @IvaschenkoN
      @IvaschenkoN 10 місяців тому

      @@PythonHubStudio ну вот, один неудачный комментарий и сломалась частота подачи материала. 4й день подходит к концу, а видео все еще нет (

    • @PythonHubStudio
      @PythonHubStudio  10 місяців тому +3

      Это не при чем)) с понедельника (скорее всего, максимум вторник) публикация продолжится

  • @АмирНасибуллин-ц2с
    @АмирНасибуллин-ц2с 9 місяців тому +1

    Лучший курс, который я видел в интернете. Огромное Спасибо🤛

  • @nikulin7944
    @nikulin7944 11 місяців тому +3

    Спасибо! Несколько раз пытался начать писать тг ботов но внятных уроков не попадалось. Ваши уроки 🔥

  • @shemyatin_konstantin
    @shemyatin_konstantin 11 місяців тому +3

    Многое для себя подметил, хотя уже писал ботов с FSM. Спасибо за ваши труды!

  • @RoboTron_Channel
    @RoboTron_Channel 11 місяців тому +3

    Ну это просто праздник какой-то! (с)

  • @Serg_NT
    @Serg_NT 7 місяців тому

    за обработку некорректных данных в определенном состоянии - отдельное спасибо!!! Это гениально и просто)

  • @Forrobloxstudio-h4x
    @Forrobloxstudio-h4x 11 місяців тому +2

    хочу сказать спасибо автору канала

  • @SuperYuri009
    @SuperYuri009 8 місяців тому +3

    Лучший контент. Спасибо.

  • @yurgango6444
    @yurgango6444 11 місяців тому +3

    Красавец! Спасибо!🤘

  • @neurotop
    @neurotop 11 місяців тому +3

    Спасибо большое ❤Вы лучший

  • @АндрейЛосюк
    @АндрейЛосюк 5 місяців тому

    Спасибо большое за этот замечательные курсы ! Понятно объясняете !!! 👍👍👍

  • @courses_uz
    @courses_uz 11 місяців тому +2

    Thank you very much. This is very good video

  • @ФедорГуглин-ш4з
    @ФедорГуглин-ш4з 8 місяців тому

    Привет! Очень полезный курс у Вас получился, спасибо!
    Я час убил на то чтобы понять как работает функция go_back, хотел уже задать вопрос, но вдруг все понял. Конструкция цикла вскипетила мне мозг.:D

  • @xxx-jy1ji
    @xxx-jy1ji 7 місяців тому +1

    Однозначно отлично рассказываешь. Подписка, лайки под всеми видео.
    Я только в этом уроке не мог понять почему у меня админ фильтр не работает. Дело в том, что я не скачиваю уроки твои, а сам набираю. Так лучше запоминается.
    Неделю пытался понять. Поковырялся в коде. Я не обратил внимания, а ты не упомянул, что нужно в апп, добавить диспетчер dp.include_router(admin_router). Хотя в моменте, где ты говоришь о добавлениии май админ лист к боту, там на экране видо, что рорутер админ, добавлен. Если бы я скопировал урок, то ошибки бы не было. А так сам пропустил, и сам нашел))).
    Т.к. я новичек (не яд), то долго не мог понять, пересмотрел этот ролик раз 30. Но зато сам разобрался и увидел, что сам роуртер не объявлен. ООООООООчень кайфонул когда решил проблему. Значит обучение идет). Спасибо.

  • @Paul-vt2ie
    @Paul-vt2ie 3 місяці тому +1

    Если у вас Бот выдает заголовки видаОплата, то вам нужно дописать в последней строке await message.answer(text.as_html(), parse_mode="HTML")

  • @андрейщеглов-й6б
    @андрейщеглов-й6б 3 місяці тому

    Спасибо за работу. автор ты лучший

  • @tetraocean
    @tetraocean 5 місяців тому

    Очень помогли, разобраться в основах aiogram, перехожу к след уроку😀

  • @gektorat
    @gektorat 10 місяців тому +2

    однозначно лайк! спасибо!

  • @BEGovoy_DZEN
    @BEGovoy_DZEN 9 місяців тому +1

    взял код из следующего видео и сработало

  • @default6993
    @default6993 7 місяців тому +3

    12:47
    Пацаны, у кого не работает, добавьте в файл app следующие две строки:
    from handlers.admin_private import admin_router
    dp.include_router(admin_router)

    • @genylivnev7822
      @genylivnev7822 6 місяців тому +1

      Спасибо тебе добрый человек! Реально заработало

  • @Loony666Noob
    @Loony666Noob 10 місяців тому

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

  • @ЕвгенийПетренко-ж1з
    @ЕвгенийПетренко-ж1з 11 місяців тому +3

    Сделайте курс по FastAPI

  • @musoroszhigayschiy_zavod76
    @musoroszhigayschiy_zavod76 10 місяців тому

    Уважаемый автор, не дайте пропасть пятнице) давайте новый ролик)

    • @PythonHubStudio
      @PythonHubStudio  10 місяців тому

      Послезавтра(в понедельник), отдыхайте)

  • @2bdriveservice675
    @2bdriveservice675 5 місяців тому

    Извините, а реализация хранения FSM в БД 18:04 будет рассмотрена в дальнейших видео?

  • @sunpluck
    @sunpluck 11 місяців тому

    Великолепные уроки, спасибо большое! Почему, кстати, именно aiogram, а не pyrogram или telethon? Последние больше для пользовательских сессий подходят, или на них вообще не написать так легко бота?

    • @PythonHubStudio
      @PythonHubStudio  11 місяців тому +1

      Даже не знаю.., возможно потому что "на глаз" понравилась простота и логичность

  • @robertfalken2699
    @robertfalken2699 11 місяців тому

    Когда следующее видео? Жду с нетерпением!

    • @PythonHubStudio
      @PythonHubStudio  11 місяців тому +1

      Через пару дней, дела...

  • @wonderofu5609
    @wonderofu5609 9 місяців тому +1

    Лучший!!!!

  • @shimhound
    @shimhound 4 місяці тому

    Здравствуйте, я либо не понял, либо прослушал этот момент. Примерно когда начинается 18:00, у вас идет допустим
    async def add_description......а снизу идет:
    await message.answer("Введите стоимость товара") это идет у вас опечатка или так нужно делать? Заранее благодарю за ваше старание!

  • @Prizrak_09
    @Prizrak_09 11 місяців тому +1

    ​Приветствую тебя!
    Посоветуй пожалуйста, что начать изучать для создания сайта, информационного портала с добавлением интерактивной картой? Нужно для реализации проекта, туристических маршрутов по вершинам Южного Урала/Кавказа. Сам работаю разработчиком 1С, но сайты никогда не разрабатывал
    Подробности по проекту могу больше описать, если это требуется

  • @izi4191
    @izi4191 10 місяців тому

    Есть вопрос ,подскажите как так бысто импортировать , как на 22:32

  • @legaru9738
    @legaru9738 8 місяців тому +1

    Как можно сделать? Загрузка фото сразу несколько штук за раз
    . и чтоб каждое фото сохранилось.

  • @photo_graf_khv
    @photo_graf_khv 7 місяців тому

    Просто супер!

  • @МагестЛоил
    @МагестЛоил 5 місяців тому

    28:00 У меня код вылетает. Ругается на admin_router.message(AddProduct.name, F.text). Не знаю из за чего. Бот просто не запускается теперь.

    • @МагестЛоил
      @МагестЛоил 5 місяців тому

      я по ошибке в классе addProduct сделал запятые после полей name и т.д.

  • @spielshow3474
    @spielshow3474 11 місяців тому

    Жду с нетерпением базу данных. ❤

  • @bunta8789
    @bunta8789 9 місяців тому

    7:04 В метод __call__ помимо message и bot что еще можно передать?
    Если я правильно понимаю, то срабатывание этого метода происходит вообще где-то в глубине пакета aiogram (то есть не в коде, который мы написали, а в коде, который написали разработчики), несмотря на то, что мы даже явно не указали никаких экземпляров наших кастомных фильтров.
    Соответственно там происходит вызов экземпляра класса и уже там при вызове передаются экземпляры класса types.Message и Bot. Так вот не понятно, помимо этих классов, в метод __call__ что еще можно передать? В самих пакетах aiogram не смог найти где этот вызов находится. И в документации тоже, вроде бы, не сказано, что можно передавать.

    • @PythonHubStudio
      @PythonHubStudio  9 місяців тому

      Можно взять любые данные которые передаются через словарь data из middleware (промежуточные слои). О middleware будет в следующих видео (которые уже есть)

  • @МихаилВасин-о3ю
    @МихаилВасин-о3ю 11 місяців тому

    Спасибо за подробный рассказ и обьяснения! А вопрос такой, у меня sinology дома, могу как то запустить бота, написаный по Вашим роликам? Направте на путь поиска информации, а если есть ответ-поделитесь

  • @erwinrommel693
    @erwinrommel693 10 місяців тому

    Здравствуй, подскажи пожалуйста какой курс стоит покупать по питону, что бы не кинули, есть ли у тебя проверенные варианты? к кому можно будет пойти для платного обучения.

  • @musoroszhigayschiy_zavod76
    @musoroszhigayschiy_zavod76 11 місяців тому +1

    дошел до 12:50 клавиатура админа не появляется

    • @PythonHubStudio
      @PythonHubStudio  11 місяців тому

      А если взять код с гитхаба работает? Если да, то у вас где-то ошибка/опечатка/чего-то не хватает.

    • @musoroszhigayschiy_zavod76
      @musoroszhigayschiy_zavod76 11 місяців тому

      @@PythonHubStudio оттуда все работает)))

    • @PythonHubStudio
      @PythonHubStudio  11 місяців тому

      Значит есть в чем поразбираться) Сделайте паузу, чтоб не было 'замыливания' взгляда.

    • @kootlife9432
      @kootlife9432 11 місяців тому

      @@PythonHubStudio Добрый день подскажите пожалуйста у меня ошибка "Import "common.restricted_words" could not be resolvedPylancereportMissingImports)"если я удаляю хэндлер с restricted_word то все работает

    • @PythonHubStudio
      @PythonHubStudio  11 місяців тому

      Закройте/откройте редактор заново, это просто pylance сбоит

  • @a11eyezonme1
    @a11eyezonme1 10 місяців тому

    Добрый день, не подскажите как сделать так чтобы при проверке почты, imaplib не отмечал письма как прочитанные?

  • @Никита-б7о1м
    @Никита-б7о1м 6 місяців тому

    Добрый день!
    Большое спасибо за ваш труд, давно уже смотрю ваши видео))
    Единственное, не разобрался как вы так быстро наведя на слово импортируете фильтры например и т.д. ? Точнее на видео это понятно как выглядит, но у меня такое не подсвечивается, чтобы он автоматически импортировал, а приходится руками всё время вбивать((

    • @PythonHubStudio
      @PythonHubStudio  6 місяців тому +1

      Это плагин для vscode - pylance, соответственно настроенный. На канале есть видео как так его настроить

  • @poroshochek1
    @poroshochek1 5 місяців тому

    Так понимаю, передача списка my_admin_list через бота, является не совсем верным способом передачи зависимостей. Лучше это делать через workflow_data.

    • @poroshochek1
      @poroshochek1 5 місяців тому +1

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

  • @oleksanriya
    @oleksanriya 9 місяців тому

    А есть ли возможность работать как-то с календарем? имею в виду например выбрать доставку на какой-то день и время, как в примере?

  • @musoroszhigayschiy_zavod76
    @musoroszhigayschiy_zavod76 11 місяців тому

    Админская клава при добавлении товара постоянно отправляет ""Введите описание товара". Как исправить?

    • @PythonHubStudio
      @PythonHubStudio  11 місяців тому

      Проверить текст сообщений в хендлерах или фильтры, вообщем код. Если делали копипаст, то может глюк редактора

    • @musoroszhigayschiy_zavod76
      @musoroszhigayschiy_zavod76 11 місяців тому

      ​@@PythonHubStudioделал копи паст с гит хаба. Пайчарм перезапускал. Посмотрите пожалуйста почему название товара дает вводить, в как вводишь описание, то он повторяет сообщение "введите описание"

  • @gametown1437
    @gametown1437 11 місяців тому +1

    Здравствуйте! А что лучше использовать, MySQL или PSql
    В рамках такого бота по "продаже" товаров
    Я только начинаю свой путь в it, так что извините, если задал неразумный вопрос

    • @PythonHubStudio
      @PythonHubStudio  11 місяців тому

      Разницы не будет в работе. Но по psql больше распространение и примеров в сети если возникнут вопросы/проблемы и более знакома другим разработчикам если проект будет совместный с кем-то впоследствии.

    • @gametown1437
      @gametown1437 11 місяців тому

      ​@@PythonHubStudio, спасибо!😊

  • @АнтонК-ы8й
    @АнтонК-ы8й 8 місяців тому

    Спасибо за видео! А можно про вариант добавления админов в отдельный список подробнее? Условно есть супер админ, который дает другим админам доступ к боту, как он это будет делать? Прописывать id пользователя и сохранять в базу? Как ему узнать этот id, если он понятия не имеет как это сделать? Вообще как в бота добавить пользователя, не абы кого, а конкретного пользователя?

    • @PythonHubStudio
      @PythonHubStudio  8 місяців тому

      Как отличить админов поможет запрос к api get administrators (мы его делали в хендлере на команду /admin)(сделайте принт ответа чтоб посмотреть). Создатель бота вообще числится как owner/creator.
      По id пользователя можно удобно раздавать права.
      Это если более подробно чем в видео итак было показано

    • @АнтонК-ы8й
      @АнтонК-ы8й 8 місяців тому

      ​@@PythonHubStudio у меня сложность в том, что я не понимаю как добавить пользователя в бот. Допустим я написал бота и запустил его. Сейчас я один пользователь в нем, теперь я хочу добавить людей, которые этим ботом смогут пользоваться. Вариант прописать id нужных пользователей в настройках бота не подходит, их нужно добавлять через бот. Все ответы которые я смог найти свлядятся к тому, что пользователь регистрируется в боте самостоятельно, естественно тогда я его и username и id могу выцепить. А тут мне надо пользователя зарегистрировать в боте, только после этого он получит к нему доступ.

  • @sanyajc5300
    @sanyajc5300 10 місяців тому

    В конце 6го урока автор отдельным хэндлером ловит ошибку ввода пользователя, а не проще обернуть в try except и в except написать что что то пошло не так и выкинуть в начало его, так он не только неправильный ввод будет ловить, но и другие ошибки без помех работы бота. Я лично каждый хэндлер оборачиваю в try/except, иногда бывает долгий ответ от сервера и бот лег, а так отписал что то не так и работает дальше)

    • @PythonHubStudio
      @PythonHubStudio  10 місяців тому

      Не проще. Отдельный хендлер нужен для отлова отправки вместо текста - стикера или фото или ..., try except имеет смысл писать только внутри хендлера, и то, если через if elif не смогли предусмотреть варианты (как запасной вариант).

  • @gametwitch8356
    @gametwitch8356 2 місяці тому

    Здравствуйте, помогите пожалуйста. скопировал ваш год и бот не запускается и выдает ошибку
    from common.restricted_words import restricted_words
    ModuleNotFoundError: No module named 'common.restricted_words'
    перепробовал все, в интернете нет ответа

  • @ypohut1673
    @ypohut1673 11 місяців тому

    Спасибо. Пожалуйста сделайте еще вк

  • @vladimirdedov5160
    @vladimirdedov5160 9 місяців тому

    Ваш способ защиты от неправильных данных в конце, не фильтрует защиту от отправки emoji вместо текста. Не подскажите как с ними быть?

    • @PythonHubStudio
      @PythonHubStudio  9 місяців тому +1

      И не должно, смайл это текст, который может быть в описании/названии. Можно, если нужно, сделать проверку строки на содержание емоджи через регулярные выражения или просто через проверку. Посмотрите как выглядит реальная строка emoji (сырая).

  • @vladimirfesenko12345
    @vladimirfesenko12345 5 місяців тому

    Здравствуйте. Большое спасибо за обзор и понятное объяснение FSM. Подскажите пожалуйста, как решается проблема, если пользователю надо загрузить не одно, а несколько фото? Если они объединяются в media group, то есть mediagrouphandler. А вот если пользователь вдруг решил их не группой отправить, а по отдельности. Вы сталкивались с такой задачкой? Рылся в гугле и на форумах. Честно.

    • @PythonHubStudio
      @PythonHubStudio  5 місяців тому

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

    • @vladimirfesenko12345
      @vladimirfesenko12345 5 місяців тому

      @@PythonHubStudio Спасибо за ответ. Я уже рассматривал такой вариант поведения, но после фото он сразу должен выдавать сообщение с вопросом про контактные данные (пользователь не должен ничего вводить). Можно сделать reply кнопку "Подтвердить ввод", но в моем контексте это не совсем верно. Радует то, что по умолчанию несколько фото группируются и пользователю надо снять галочку эту, чтобы получить не совсем адекватное поведение. Тоже думал, что все просто, а по факту голову уже сломал и ничего толкового, кроме как в сообщении написать пользователю, чтобы при отправке группы фоток эту галку оставлял, не пришло. )))

    • @PythonHubStudio
      @PythonHubStudio  5 місяців тому

      Последнее, на самом деле, очень верно, любое неадекватное поведение юзера предусмотреть невозможно, сразу предупредили текстом, и если что сделали кнопку назад и все.

    • @vladimirfesenko12345
      @vladimirfesenko12345 5 місяців тому

      @@PythonHubStudio Да, вы правы. Спасибо.

  • @KroLenbDC
    @KroLenbDC 11 місяців тому

    12:37
    не знаю почему, но сообщение не удаляется, но при этом клавиатура в боте появляется исправно

    • @PythonHubStudio
      @PythonHubStudio  11 місяців тому

      Бот должен быть админом в группе

    • @KroLenbDC
      @KroLenbDC 11 місяців тому

      @@PythonHubStudio он и есть админ, да и доступ к удалению сообщений тоже у него есть

    • @PythonHubStudio
      @PythonHubStudio  11 місяців тому

      Значит проверьте свой хендлер для группы /admin. Не может быть, что у меня работает (код на гитхабе есть), а у вас просто так нет. Если делали копипаст, то может редактор не воспринял некоторые строки(такое бывает) - добавьте где нибудь рандомный print, чтоб текст заново прочитался, или перезагрузите редактор(закрыть/открыть). Как-то так...

  • @РусланТитаренко-ф6я
    @РусланТитаренко-ф6я 4 місяці тому +1

    Как же кайфово, когда какие-то неточности и баги ловишь и потом такой целый ищешь причину.
    В общем из-за того, что диспеччер админки был размещен ниже диспечера приватки - у меня не реагировало в привате на /admin. Реально целый день потратил, на то, что бы это определить.
    dp = Dispatcher()
    dp.include_router(admin_router)
    dp.include_router(user_private_router)
    dp.include_router(user_group_router)

  • @belford123
    @belford123 10 місяців тому

    Добрый день Автор! Все хорошо у тебя? Чет пропал ...

  • @shu3s
    @shu3s 10 місяців тому

    можешь в следующем уроке объяснить как сделать жирный шрифт конкретно в кнопке пожалуйста? хтмл, маркдаун парс там не работает(

    • @Amirhan91
      @Amirhan91 10 місяців тому

      пните если ответит

    • @PythonHubStudio
      @PythonHubStudio  10 місяців тому

      А так вообще можно...?

    • @shu3s
      @shu3s 10 місяців тому

      @@PythonHubStudio да, возможно. в некоторых ботах замечаю такое

  • @ЄвгенійМахота
    @ЄвгенійМахота 11 місяців тому

    Огромное спасибо за урок.
    Можете ли сделать урок как создать опрос в группе при помощи бота? Спасибо

    • @PythonHubStudio
      @PythonHubStudio  11 місяців тому

      Был же пример в теме про кнопки(там где request poll), или что-то другое?

  • @Texoras
    @Texoras 11 місяців тому

    Спасибо вам большое, а будет видео про дискорд бота?

    • @PythonHubStudio
      @PythonHubStudio  11 місяців тому +1

      Можно, это не сложно сделать(обновить существующий уже плейлист на канале по discord боту, там ничего существенного не изменилось, по сравнению с телеграм), но такой запрос поступил только один раз - от Вас!

  • @Mintik24
    @Mintik24 7 місяців тому

    Здравствуйте,как запустить отдельно один урок чтобы проверить что поучилось?

    • @PythonHubStudio
      @PythonHubStudio  7 місяців тому +1

      Как отдельный проект. Суть та же. И бд под него можно отдельную также сделать . На одной бд для всех вариантов могут быть проблемы в совместимости бд по таблицам

  • @АлександрБеляев-с1ю
    @АлександрБеляев-с1ю 11 місяців тому

    Как сделать, если допустим имеется несколько магазинов и у каждого свой ассортимент (пиццы, пироги, пироженные, торты и т. д) как добавить список магазинов в виде инлайн клавиатуры и уже проваливаясь в магазин работать с ассортиментом, далее с названиями?
    Или другой пример, список объектов, на объектах есть оборудование (разного назначения, количества и с разными характеристиками). В боте инлайн клавиатура со списком объектов, проваливаемся в объект, получаем инлайн клавиатуру список оборудования по типу, проваливаемся далее, получаем названия, характеристики, количество, фото...

    • @PythonHubStudio
      @PythonHubStudio  11 місяців тому

      Вы сильно круто берете, как для начинающего разрабатывать ботов. Тут могу ответить так: делить базы данных по id (и это не значит в прямом смысле id в телеграмме) клиента (заказчика).

  • @rogalik4163
    @rogalik4163 10 місяців тому

    как добавить боту кастомные emoji из премиумам?

  • @Amirhan91
    @Amirhan91 10 місяців тому

    Спасибо за видео! Подскажите как сделать рассылку?

    • @PythonHubStudio
      @PythonHubStudio  10 місяців тому +1

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

  • @kootlife9432
    @kootlife9432 10 місяців тому

    @PythonHubStudio когда уже новый видос неделя прошла((( каждый день жду уже не могу

    • @PythonHubStudio
      @PythonHubStudio  10 місяців тому

      Код 7го урока на гитхабе уже есть, после монтажа завтра публикация

  • @PaxtonFettel_EBM
    @PaxtonFettel_EBM 7 місяців тому

    Атрибут bot.my_admins_list случайно не в оперативной памяти хранит список? Если это так, значит после перезапуска бота нужно будет каждый раз в ручную тянуть командой в группе заново список, верно?

    • @PythonHubStudio
      @PythonHubStudio  7 місяців тому +1

      Правильно

    • @PaxtonFettel_EBM
      @PaxtonFettel_EBM 7 місяців тому

      ​@@PythonHubStudio Хочу выразить вам благодарность за отличный контент и что активно общаетесь с аудиторией) Жду ваши видео как любимый сериал)

  • @zhanybekov9616
    @zhanybekov9616 10 місяців тому

    Добрый вечер, благодарен за ваши видео они очень крутые. У меня возникла проблема на этапе написания команды /admin в группу, не вылезает клавиатура как у вас в видео. Был бы рад если бы подсказали как решить.

    • @PythonHubStudio
      @PythonHubStudio  10 місяців тому

      Просмотрите разницу между исходником на гитхабе или ошибку сюда напишите

    • @zhanybekov9616
      @zhanybekov9616 10 місяців тому

      @@PythonHubStudio сравнил свой код с исходником, вроде нет различий. Не вылезает никакой ошибки, просто бот не отправляет клавиатуру.

    • @zhanybekov9616
      @zhanybekov9616 10 місяців тому

      Может быть проблема в телеграме? Боту нужно давать админку в группе?

    • @zhanybekov9616
      @zhanybekov9616 10 місяців тому

      @@PythonHubStudio нашел ошибку, спасибо за помощь. У вас классный канал.

    • @АртёмГородской-ф4ъ
      @АртёмГородской-ф4ъ 10 місяців тому

      ​@@zhanybekov9616Здравствуйте. Точно такая же проблема. Подскажите пожалуйста как исправили её

  • @alexandr_segeda
    @alexandr_segeda 10 місяців тому

    Продолжение будет?)))

    • @PythonHubStudio
      @PythonHubStudio  10 місяців тому

      Скорее всего в понедельник, дела...

  • @maksimklisenko2867
    @maksimklisenko2867 10 місяців тому

    у меня работают команды назад только если их писать вместе с "/". Что делать??

    • @PythonHubStudio
      @PythonHubStudio  10 місяців тому

      Просмотрите фильтры в вашем обработчике

  • @zolotaya_pora
    @zolotaya_pora 7 місяців тому

    спасибо!

  • @migoamigo5553
    @migoamigo5553 9 місяців тому

    Здравствуйте, сталкивался кто с такой проблемой(from common.restricted_world import restricted_world ) ошибка (Доступ к "restricted_world" не осуществляется Pylance) и много где такое бывает, как можно это исправить?Автору огромное спасибо!Лучший!

    • @PythonHubStudio
      @PythonHubStudio  9 місяців тому

      Проект открыт в редакторе нормально или на папку выше в которой все проекты?

    • @migoamigo5553
      @migoamigo5553 9 місяців тому

      @@PythonHubStudio проект открыт нормально,все проверил,вы сказали, что скопируйте код... скопировал и в хендлерах вылазит что то подобное.
      Например "from sqlalchemy.ext.asyncio import AsyncSession"
      (Unable to import'sqlalchemy.ext.asyncio'PylintE0401:import-error
      Не удается разрешить импорт "sqlalchemy.ext.asyncio" Pylance(reportMissingImports)
      Весь интеренет перерыл, ничего не нашел на данную проблему

  • @MrSasuke1337
    @MrSasuke1337 10 місяців тому

    Здравствуйте, у меня с самого начала уже вопросы, у меня Pycharm, в папке filter файл chat_types, у меня где my_admin_list не работает (ошибку показывает), хотя весь код скопировал с гита, но все равно показывает ошибку + для каждой папки создал __init__.py и прописал туда все импорты, но все равно не помогло, можете сказать в чем моя ошибка? 😢

    • @PythonHubStudio
      @PythonHubStudio  10 місяців тому

      Наверно у вас в редакторе проект открыт на папку выше чем положено (должна быть открыта папка, где файл app.py). Или можно в окне папок и файлов проекта(експлорере), тыкнуть ПКМ, по ней, и выбрать "пометить как папка проекта")

    • @kifurrer
      @kifurrer 10 місяців тому

      скорее всего ты забыл включить роутер в главный файл апп пу, пропиши эту команду "dp.include_router(admin_router)"

    • @JohnMapukuta
      @JohnMapukuta 5 місяців тому

      @@kifurrer От души тебе!❤❤❤❤❤

  • @Барабашка-ц5с
    @Барабашка-ц5с 10 місяців тому

    когда следующий урок?

  • @konand5
    @konand5 8 місяців тому

    Добрый день!
    Как быть если в личных сообщениях с ботом обычным пользователям (не администраторам) тоже необходимо использовать команду "/admin". Если я пропишу обработчик для этой команды в @user_private_router, то этот роутер будет перехватывать сообщения и от администраторов и отрабатывать как общий хендлер. Очевидный вариант: в диспчер включать роутер администратора первым, а потом уже роутер обычных пользователей, но вариант не очень красивый, как можно сделать лучше? Заранее спасибо!

    • @PythonHubStudio
      @PythonHubStudio  8 місяців тому

      1) ваш вариант хорош
      2) изменить имя команды и не париться (или для админа или для пользователей)

  • @RevolversSlav
    @RevolversSlav 9 місяців тому

    Уважаемый автор! Благодарю Вас за качественный материал, не останавливайтесь)
    И есть у меня к Вам вопрос: При запуске бота, в терминал выдает предупреждение. Как переписать код в данном боте? Также работаю в PyCharm MacOS, остановился на создании BD. Все необходимые библиотеки инсталлировались после 20.03.2024. Заранее благодарю за ответы
    DeprecationWarning: Passing `parse_mode`, `disable_web_page_preview` or `protect_content` to Bot initializer is deprecated. This arguments will be removed in 3.5.0 version
    Use `default=DefaultBotProperties(...)` instead.
    bot = Bot(token=os.getenv('TOKEN'), parse_mode=ParseMode.HTML)

    • @PythonHubStudio
      @PythonHubStudio  9 місяців тому

      Это просто предупреждение о том что, в версии 3.5 aiogram-a будет перемещение способа указания parse mode.

    • @akobelyov
      @akobelyov 9 місяців тому

      если прям сильно напрягает это предупреждение, то можно заменить на
      bot = Bot(token=os.getenv('TOKEN'), default=DefaultBotProperties(parse_mode=ParseMode.HTML))
      у меня на версии 3.4.1 с такой строкой всё работает.

  • @СтудиядикихКазахскихмангустови

    Уже все перепробовал не видит my_admins_list
    Не знаю что делать уже скопировал репозитории полностью все равно не видит

  • @wonderofu5609
    @wonderofu5609 9 місяців тому

    Привет! Обращаюсь к вам так как зашёл в тупик.
    В кратце я создал два экземпляра бота, и проблема в том что команды пересекаются между ними (роутерами)
    Какой сделать фильтр? У меня идея была сделать фильтр на имя роутера, но к сожалению дало ошибку(

    • @PythonHubStudio
      @PythonHubStudio  9 місяців тому

      Одни роутеры вешайте на одного бота, а другие на другого, в этом то и суть - разделить

    • @wonderofu5609
      @wonderofu5609 9 місяців тому

      @@PythonHubStudio та уже решил) Вопрос был в том, как сделать кастомный фильтр, и додумался сделать фильтр на сам экземляр бота и всё сработало как надо
      Я просто не знал, что у message есть свойство bot
      Вот такой фильтр у меня получился
      class ChatBotFilter(Filter):
      def __init__(self, bot: Bot) -> None:
      self.bot = bot
      async def __call__(self, message: types.Message) -> bool:
      return message.bot == self.bot

    • @wonderofu5609
      @wonderofu5609 9 місяців тому

      @@PythonHubStudio но у меня появилась другая проблема, как между роутерами передавать переменные? может знаете

  • @1230pp
    @1230pp 10 місяців тому

    Здравствуйте как связаться с вами?
    мне нужно инлайн бот телеграм

    • @PythonHubStudio
      @PythonHubStudio  10 місяців тому

      Уже только что связались... Заказы не принимаю

    • @1230pp
      @1230pp 10 місяців тому

      Понятно 😐

  • @xboxseriess5844
    @xboxseriess5844 9 місяців тому

    Спасибо за классный туториал!
    Но почему бы кнопки не сделать с помощью словаря, а вместо else if , использовать math case. Я не учу ни кого , я просто предложил😅

    • @PythonHubStudio
      @PythonHubStudio  9 місяців тому +1

      См. дальше

    • @xboxseriess5844
      @xboxseriess5844 9 місяців тому

      @@PythonHubStudio щас два дня на работе буду, поэтому хотелось бы спойлер

    • @PythonHubStudio
      @PythonHubStudio  9 місяців тому +1

      Match case не будет, чтоб сохранить совместимость с более ранними версиями python. Кнопки из словарей будут

    • @xboxseriess5844
      @xboxseriess5844 9 місяців тому

      @@PythonHubStudio имеет смысл такому быть

    • @xboxseriess5844
      @xboxseriess5844 9 місяців тому

      @@PythonHubStudio 👍👍👍

  • @ivansim3364
    @ivansim3364 2 місяці тому

    У меня не работает админка почему то(

  • @CryT0R
    @CryT0R 10 місяців тому

    Интересно ваше мнение. В коде обработчиков FSM есть ли мотивация писать в порядке
    await message.answer ("Введите название") #говорим что хотим от человека
    await state.set_state(AddProduct.name) #переходим к ожиданию ввода
    Вместо - сначала установки состояния, а затем отправки сообщения типа "Введите название"?
    await state.set_state(AddProduct.name) #переходим к ожиданию ввода
    await message.answer ("Введите название") #говорим что хотим от человека

  • @alexanderzimin6019
    @alexanderzimin6019 8 місяців тому

    Всем привет. В файле reply.py такая строка:
    sizes: tuple[int] = (2,),
    При ней у меня лезет ошибка:
    TypeError: 'type' object is not subscriptable
    Исправил на:
    sizes: tuple = (2,),
    все заработало.
    Вопросы:
    У всех, кто в восторге, какая строка работает?
    Если первая - почему у меня нет?
    Если сами исправили - почему не отписали?
    А курс реально крутой.

    • @denimani8990
      @denimani8990 7 місяців тому

      Потому что у тебя версия питона 3.8, либо ещё ниже

    • @alexanderzimin6019
      @alexanderzimin6019 7 місяців тому

      @@denimani8990 Спасибо. Точно - 3.8. "О сколько нам открытий чудных. Готовят..."

  • @Python-i2z
    @Python-i2z 5 місяців тому

    Здравствуйте, видео урок очень полезный, но хотел сказать что у вас запись подлагивает

  • @tormozzzful
    @tormozzzful 9 місяців тому

    Хехехе, у меня пока диалог из 38 пунктов) Вот такой вот бот

  • @koshied850
    @koshied850 11 місяців тому

    Подскажите, может, кто шарит?
    Как в vs code изменить тему, но оставить дефолтную подсветку текста?
    Был бы очень благодарен за помощь.
    Ролик - огонь!

  • @dimalakida8052
    @dimalakida8052 9 місяців тому

    Здравствуйте. Очень сильно помогли ваши видео. Уже много ветвлений в коде и стал вопрос, как их фильтровать. Попробовал по аналогии собрать свой фильтр, который смотрел бы в базу, но он не работает...
    class IsAdmin(Filter):
    async def __call__(self, session: AsyncSession, message: types.Message) -> bool:
    admins = []
    for a in await orm_get_admins(session):
    admins.append(a.admin)
    return message.from_user.id in admins
    TypeError: IsAdmin.__call__() got multiple values for argument 'session'
    Язык знаю плохо, точнее почти не знаю. Позскажите плз, что я делаю не так? И как лучше сделать?

    • @PythonHubStudio
      @PythonHubStudio  9 місяців тому

      Именно об этом (о сессиях бд) рассказано в следующем видео. Там используются middleware (промежуточные) слои.

    • @SeDiSlayer
      @SeDiSlayer 9 місяців тому

      Так запросы к базе, по отдельности, у меня все работают, а вот в фильтре, ошибку выдаёт.
      Про мидлваре смотрел, но не совсем понятно что там и для чего.

  • @smash6792
    @smash6792 10 місяців тому

    Очень нравиться ваш контент!!
    Возник вопрос:
    Как я могу скачать файл (в моем случае это .doc), который был отправлен моему боту пользователем?
    В документации нашел только await bot.download(document)
    Но как только я импортирую в файл user_private.py этого bot с файла app.py, то возникают ошибки
    я пытался переставлять импорты в файлах,в итоге я переставил from app import bot прямо перед строчкой await bot.download(document),но в этот раз другая ошибка RuntimeError: Router is already attached to
    Я понимаю,что ошибка заключается в том,что что-то вызывается несколько раз(а должно 1 раз)
    Если сможете помочь буду очень благодарен!!!
    *структура папок такая же как у вас на видео

    • @PythonHubStudio
      @PythonHubStudio  10 місяців тому +1

      Видимо пропустили, я говорил, что если нужен экземпляр бота в хендлере, то всего лишь нужно добавить соответствующий параметр в ваш хендлер, он туда прокинется aiogram-ом сам:
      (message: types.Message, bot: Bot)
      И юзайте вашего бота в хендлере как захочется. А для аннотации типа параметра bot: Bot, нужно просто добавить импорт экземпляра класса Bot, чтоб видеть его методы в автокомплите:
      from aiogram import Bot

    • @smash6792
      @smash6792 10 місяців тому

      Благодарю за ответ!!!@@PythonHubStudio

  • @icrypter
    @icrypter 11 місяців тому

    +

  • @MortyTown-c6p
    @MortyTown-c6p 3 місяці тому

    очень крутая реализация перехода на предыдущее состояние стейта трек тайм 34:50 . с начала не въехал а потом как въехал)))))))))))))))))) previous обновляется после каждой итерации , хитроумный алгоритм
    огромное вам спасибо.

    • @PythonHubStudio
      @PythonHubStudio  2 місяці тому +1

      Я всё ждал, оценит кто-то лайфхак или нет)))

  • @МагестЛоил
    @МагестЛоил 4 місяці тому

    await message.answer(f"Шаг назад
    {AddProduct.texts[previous.state]}")
    AttributeError: 'NoneType' object has no attribute 'state'. И я его понимаю. Как мы можем что то сюда передать если у нас previous на данный момент типа None.

  • @MrSasuke1337
    @MrSasuke1337 9 місяців тому

    Объясните пожалуйста момент 26:48, как преобразовать словарик в отдельный элемент, мне там число надо вводить, а я хочу получить не как {'number': '3'}, а как 3, что в этом случае делать
    У меня получилось так, это работает, но так не удобно писать:
    @user_private_router.message(Games.data_input, F.text)
    async def add_data_output(message: types.Message, state: FSMContext):
    await state.update_data(data_input=message.text)
    random_number = random.randint(1, 2)
    data = await state.get_data()
    # await message.answer(str(data))
    if data == {'data_input': f'{random_number}'}:
    await message.answer('Вы угадали')
    else:
    await message.answer("Вы не угадали :(")
    await message.answer(f"Было загадано число {random_number}")
    await state.clear()

    • @PythonHubStudio
      @PythonHubStudio  9 місяців тому

      if data["data_input"] == r_n:

    • @MrSasuke1337
      @MrSasuke1337 9 місяців тому

      @@PythonHubStudio спасибо, работает!

  • @genylivnev7822
    @genylivnev7822 7 місяців тому

    День добрый! Помогите разобраться с проблемой. В модуле chat_types в классе IsAdmin, bot не видит my_admins_list, я прописал его в модуле app, попытался импортировать саму переменную bot из app, но код не запускается, а в самом классе Is Admin, bot.my_admins_list он его не видит. Импорты не помогают

    • @PythonHubStudio
      @PythonHubStudio  7 місяців тому

      Проверьте на опечатки в свойстве my_admins_list, и там и там

    • @genylivnev7822
      @genylivnev7822 6 місяців тому

      @@PythonHubStudio проверил и даже с вашего гита качнул код, не получается. В модуле chat_types в классе IsAdmin, он my_admins_list просто не видит, подкрашивается серым. Если импорт делать, то там то же ошибка ( ImportError: cannot import name 'user_private_router' from partially initialized module )

    • @genylivnev7822
      @genylivnev7822 6 місяців тому

      @@PythonHubStudio все, разобрался ) там, внизу коментов есть ответ )

    • @LoRaX-ru4ge
      @LoRaX-ru4ge 17 днів тому

      @@genylivnev7822 не подскажешь где? Найти не могу

  • @mark.visotskiy
    @mark.visotskiy 11 місяців тому

    Приветствую, админа, у меня проблема с админ панелью, когда запускаю бота /admin не работает, бот вообще не заходит в handler с командой /админ и пропускает через обычный handler с фильтром F.text, подскажите как решить эту проблему. Единственная ошибка которую выдаёт ide, в файле chat_types не работает обращение к списку админов bot.my_amins_list , что делать?

    • @PythonHubStudio
      @PythonHubStudio  11 місяців тому

      1) Опечатка не my_amins_list, a my_admins_list
      2) Сверьтесь с кодом на гитхабе. В любом случае опечатка где-то

    • @mark.visotskiy
      @mark.visotskiy 11 місяців тому

      @@PythonHubStudioпришел к тому что он не заходил в handler admin из-за того что был F.text() поменял местами вызов в app.py, но чтобы бот сам определил админа так и не допер, в итоге вбил напрямую свой id

  • @nimble2268
    @nimble2268 10 місяців тому

    await state.reset_state()

  • @CryT0R
    @CryT0R 10 місяців тому

    И еще не совсем понятно как на видео отработал код
    #Хендлер для отлова некорректного ввода для состояния
    если среда ругается, что функция уже определена:
    #Ловим данные для состояние price и потом меняем состояние на image
    @admin_router.message(AddProduct.price, F.text)
    async def add_price
    #Хендлер для отлова некорректных ввода для состояния price
    @admin_router.message(AddProduct.price)
    async def add_price(message: types.Message, state: FSMContext):
    \\ Получим ошибку function already defined

    • @PythonHubStudio
      @PythonHubStudio  10 місяців тому

      Отработал нормально, как видно на видео. Это предупреждение линтера вашего редактора. Имя декорируемой функции не имеет значения.
      Переименуйте если мешает

  • @ArtemNerin
    @ArtemNerin 10 місяців тому

    Какие могут быть нюансы если вместо:
    #Становимся в состояние ожидания ввода name
    @admin_router.message(StateFilter(None), F.text == "Добавить товар")
    сделать:
    #Становимся в состояние ожидания ввода name
    @admin_router.message( F.text == "Добавить товар")
    await state.clear()
    async def add_product(message: types.Message, state: FSMContext):
    await message.answer(
    "Введите название товара", reply_markup=types.ReplyKeyboardRemove()
    )
    await state.set_state(AddProduct.name)

    • @PythonHubStudio
      @PythonHubStudio  10 місяців тому

      И так тоже можно, без проблем

  • @UlanKurmanbekov
    @UlanKurmanbekov 7 місяців тому

    Здравствуйте! Как думаете можно ли написать таким образом?
    @admin_router.message(AddTrainer.full_name, F.text)
    async def add_trainers_name(message: Message, state: FSMContext):
    if not contains_alpha(message.text):
    await message.answer('В Ф.И.О содержаться недопустимые символы
    Введите заново')
    return
    await state.update_data(name=message.text)
    await message.answer('Введите номер телефона тренера', reply_markup=CANCEL_KB)
    await state.set_state(AddTrainer.phone_number)
    чтобы не писать дополнительный хендлер

    • @PythonHubStudio
      @PythonHubStudio  7 місяців тому

      По чесноку, то тяжеловато понять без контекста полной структуры самого бота и как лучше. Но могу дать общее резюме по поводу структуры хендлеров: Если хорошо работает и так удобно реализовать это - то все хорошо. В последствии переделать - это нормально, если оказалось, что этот вариант не валиден. Но выглядит вроде ничего

    • @UlanKurmanbekov
      @UlanKurmanbekov 7 місяців тому

      @@PythonHubStudio спасибо за ответ, бот работает нормально. У вас прям очень и очень хорошие видеоуроки! Советую всем своим знакомым которые начинают учить Python