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

  Рет қаралды 14,937

Python Hub Studio

Python Hub Studio

Күн бұрын

В этом видео создадим админ панель для телеграм бота на python с aiogram 3, посмотрим на реализацию фильтра IsAdmin, функцию для генерации кнопок/клавиатур. Но самое главное - научимся работать с машиной состояний ( FSM ) в aiogram 3.
00:00 Что такое машина состояний FSM в aiogram, кратко
01:18 Обзор кода заготовки
01:50 Функция для универсальной и удобной генерации клавиатур / кнопок
05:36 Роутер для админки телеграм бота и о администраторах
06:35 IsAdmin, фильтр для проверки на администратора)
09:00 Запрос для получения администраторов группы, для админки в личке ( приватном чате )
13:40 Начинаем работать с FSM aiogram 3
16:41 Хранилища и стратегии состояний в aiogram 3 для машины состояний
20:02 Описание состояний для FSM aiogram
21:05 Переходы между состояниями, фильтры состояний, параметр state и его методы
29:29 Обработчик отмены диалога - сброс состояний
31:14 Как сделать шаг назад в диалоге, перейти на состояние назад aiogram 3
36:34 Как можно обработать некорректный ввод
38:20 Метод clear. Альтернативные варианты действий.
Поддержать канал:
На канале доступна функция Спонсорство с дополнительными бонусами.
Присоединиться:
/ pythonhubstudio
А также кнопка Суперспасибо под видео (отображается не во всех странах).
Документация API Telegram:
core.telegram.org/api
Документация aiogram:
docs.aiogram.dev/en/latest/
Код из видео:
(С дополнениями по FSM, см. код там чуть больше чем в видео)
github.com/PythonHubStudio/ai...
Этот плейлист:
• Telegram бот на python...
Курс по python 7 часов:
• Учим python за 7 часов...
Видео про асинхронность:
• Асинхронность, многопо...
Курс по Django 15 часов:
• Полный курс уроков по ...
Курс HTML / CSS:
• Учим HTML и CSS за 7 ч...
Не забудьте подписаться и включить оповещения, чтоб не пропустить новые выпуски!

Пікірлер: 180
@artemoleinichenko1005
@artemoleinichenko1005 4 ай бұрын
Прекрасный разбор. Один из лучших русскоязычных авторов на платформе KZbin! Кто смотрит - будете довольны.
@belford123
@belford123 4 ай бұрын
Не выходные а фантастика! 😃✌🏻 Спасибо автор!
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Точно, сегодня же воскресенье 😀 Хорошего вечера!!!
@alsoduos
@alsoduos 4 ай бұрын
Огромное спасибо за урок! С нетерпением жду следующего!
@shemyatin_konstantin
@shemyatin_konstantin 4 ай бұрын
Многое для себя подметил, хотя уже писал ботов с FSM. Спасибо за ваши труды!
@GameStreamJ
@GameStreamJ 4 ай бұрын
Как же я ждал этот видос 🎉
@nikulin7944
@nikulin7944 4 ай бұрын
Спасибо! Несколько раз пытался начать писать тг ботов но внятных уроков не попадалось. Ваши уроки 🔥
@spotsman9612
@spotsman9612 4 ай бұрын
Вы делаете очень качественный контент! Спасибо вам большое за труд!
@user-tu5un1dr2m
@user-tu5un1dr2m 2 ай бұрын
Лучший курс, который я видел в интернете. Огромное Спасибо🤛
@user-cp8ou1ot5z
@user-cp8ou1ot5z 4 ай бұрын
Во, еще видос! Автор красава! Есть чем заняться в выходной день!))) Здоровья тебе! Лайк!
@Serg_NT
@Serg_NT 27 күн бұрын
за обработку некорректных данных в определенном состоянии - отдельное спасибо!!! Это гениально и просто)
@SuperYuri009
@SuperYuri009 Ай бұрын
Лучший контент. Спасибо.
@RoboTron_Channel
@RoboTron_Channel 4 ай бұрын
Ну это просто праздник какой-то! (с)
@neurotop
@neurotop 4 ай бұрын
Спасибо большое ❤Вы лучший
@user-xl2yi9lr4f
@user-xl2yi9lr4f 4 ай бұрын
хочу сказать спасибо автору канала
@yurgango6444
@yurgango6444 4 ай бұрын
Красавец! Спасибо!🤘
@user-xz7xn2nu9w
@user-xz7xn2nu9w Ай бұрын
Привет! Очень полезный курс у Вас получился, спасибо! Я час убил на то чтобы понять как работает функция go_back, хотел уже задать вопрос, но вдруг все понял. Конструкция цикла вскипетила мне мозг.:D
@courses_uz
@courses_uz 4 ай бұрын
Thank you very much. This is very good video
@gektorat
@gektorat 4 ай бұрын
однозначно лайк! спасибо!
@IvaschenkoN
@IvaschenkoN 4 ай бұрын
Спасибо! Качество кода и подача материала на высоте! Огромная просьба завернуть проект в докер перед началом использования базы. Надеюсь что моя просьба не увеличит интервал подачи материала. С нетерпением ждем продолжение )
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Благодарю 👍.Давайте докер отложим на потом, чтоб не вмешивать не связанный с aiogram инструмент, в итак насыщенное следующее видео (middleware, sqlalchemy и тд).
@IvaschenkoN
@IvaschenkoN 4 ай бұрын
@@PythonHubStudio ну вот, один неудачный комментарий и сломалась частота подачи материала. 4й день подходит к концу, а видео все еще нет (
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Это не при чем)) с понедельника (скорее всего, максимум вторник) публикация продолжится
@BEGovoy_DZEN
@BEGovoy_DZEN 3 ай бұрын
взял код из следующего видео и сработало
@photo_graf_khv
@photo_graf_khv Ай бұрын
Просто супер!
@wonderofu5609
@wonderofu5609 3 ай бұрын
Лучший!!!!
@xxx-jy1ji
@xxx-jy1ji 19 күн бұрын
Однозначно отлично рассказываешь. Подписка, лайки под всеми видео. Я только в этом уроке не мог понять почему у меня админ фильтр не работает. Дело в том, что я не скачиваю уроки твои, а сам набираю. Так лучше запоминается. Неделю пытался понять. Поковырялся в коде. Я не обратил внимания, а ты не упомянул, что нужно в апп, добавить диспетчер dp.include_router(admin_router). Хотя в моменте, где ты говоришь о добавлениии май админ лист к боту, там на экране видо, что рорутер админ, добавлен. Если бы я скопировал урок, то ошибки бы не было. А так сам пропустил, и сам нашел))). Т.к. я новичек (не яд), то долго не мог понять, пересмотрел этот ролик раз 30. Но зато сам разобрался и увидел, что сам роуртер не объявлен. ООООООООчень кайфонул когда решил проблему. Значит обучение идет). Спасибо.
@spielshow3474
@spielshow3474 4 ай бұрын
Жду с нетерпением базу данных. ❤
@robertfalken2699
@robertfalken2699 4 ай бұрын
Когда следующее видео? Жду с нетерпением!
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Через пару дней, дела...
@user-yw7hd8qr1v
@user-yw7hd8qr1v Ай бұрын
спасибо!
@Loony666Noob
@Loony666Noob 4 ай бұрын
Думал, что клавиатуры трудны для понимания, но разобравшись с ними - теперь трудность в понимании возникает с FSMкой =) Надеюсь, что тоже при втором просмотре будет намного легче для понимания
@musoroszhigayschiy_zavod76
@musoroszhigayschiy_zavod76 4 ай бұрын
Уважаемый автор, не дайте пропасть пятнице) давайте новый ролик)
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Послезавтра(в понедельник), отдыхайте)
@ypohut1673
@ypohut1673 4 ай бұрын
Спасибо. Пожалуйста сделайте еще вк
@user-ro8iq2kd7w
@user-ro8iq2kd7w 4 ай бұрын
Спасибо за подробный рассказ и обьяснения! А вопрос такой, у меня sinology дома, могу как то запустить бота, написаный по Вашим роликам? Направте на путь поиска информации, а если есть ответ-поделитесь
@user-nk5hk2ut5p
@user-nk5hk2ut5p 4 ай бұрын
Сделайте курс по FastAPI
@erwinrommel693
@erwinrommel693 4 ай бұрын
Здравствуй, подскажи пожалуйста какой курс стоит покупать по питону, что бы не кинули, есть ли у тебя проверенные варианты? к кому можно будет пойти для платного обучения.
@Prizrak_09
@Prizrak_09 4 ай бұрын
​Приветствую тебя! Посоветуй пожалуйста, что начать изучать для создания сайта, информационного портала с добавлением интерактивной картой? Нужно для реализации проекта, туристических маршрутов по вершинам Южного Урала/Кавказа. Сам работаю разработчиком 1С, но сайты никогда не разрабатывал Подробности по проекту могу больше описать, если это требуется
@sunpluck
@sunpluck 4 ай бұрын
Великолепные уроки, спасибо большое! Почему, кстати, именно aiogram, а не pyrogram или telethon? Последние больше для пользовательских сессий подходят, или на них вообще не написать так легко бота?
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Даже не знаю.., возможно потому что "на глаз" понравилась простота и логичность
@default6993
@default6993 Ай бұрын
12:47 Пацаны, у кого не работает, добавьте в файл app следующие две строки: from handlers.admin_private import admin_router dp.include_router(admin_router)
@genylivnev7822
@genylivnev7822 14 күн бұрын
Спасибо тебе добрый человек! Реально заработало
@Meditopix
@Meditopix 4 ай бұрын
Спасибо вам большое, а будет видео про дискорд бота?
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Можно, это не сложно сделать(обновить существующий уже плейлист на канале по discord боту, там ничего существенного не изменилось, по сравнению с телеграм), но такой запрос поступил только один раз - от Вас!
@oleksanriya
@oleksanriya 3 ай бұрын
А есть ли возможность работать как-то с календарем? имею в виду например выбрать доставку на какой-то день и время, как в примере?
@user-yp5pk6cq1i
@user-yp5pk6cq1i 4 ай бұрын
Огромное спасибо за урок. Можете ли сделать урок как создать опрос в группе при помощи бота? Спасибо
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Был же пример в теме про кнопки(там где request poll), или что-то другое?
@sanyajc5300
@sanyajc5300 4 ай бұрын
В конце 6го урока автор отдельным хэндлером ловит ошибку ввода пользователя, а не проще обернуть в try except и в except написать что что то пошло не так и выкинуть в начало его, так он не только неправильный ввод будет ловить, но и другие ошибки без помех работы бота. Я лично каждый хэндлер оборачиваю в try/except, иногда бывает долгий ответ от сервера и бот лег, а так отписал что то не так и работает дальше)
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Не проще. Отдельный хендлер нужен для отлова отправки вместо текста - стикера или фото или ..., try except имеет смысл писать только внутри хендлера, и то, если через if elif не смогли предусмотреть варианты (как запасной вариант).
@user-zi7dm9uq3s
@user-zi7dm9uq3s Ай бұрын
Спасибо за видео! А можно про вариант добавления админов в отдельный список подробнее? Условно есть супер админ, который дает другим админам доступ к боту, как он это будет делать? Прописывать id пользователя и сохранять в базу? Как ему узнать этот id, если он понятия не имеет как это сделать? Вообще как в бота добавить пользователя, не абы кого, а конкретного пользователя?
@PythonHubStudio
@PythonHubStudio Ай бұрын
Как отличить админов поможет запрос к api get administrators (мы его делали в хендлере на команду /admin)(сделайте принт ответа чтоб посмотреть). Создатель бота вообще числится как owner/creator. По id пользователя можно удобно раздавать права. Это если более подробно чем в видео итак было показано
@user-zi7dm9uq3s
@user-zi7dm9uq3s Ай бұрын
​@@PythonHubStudio у меня сложность в том, что я не понимаю как добавить пользователя в бот. Допустим я написал бота и запустил его. Сейчас я один пользователь в нем, теперь я хочу добавить людей, которые этим ботом смогут пользоваться. Вариант прописать id нужных пользователей в настройках бота не подходит, их нужно добавлять через бот. Все ответы которые я смог найти свлядятся к тому, что пользователь регистрируется в боте самостоятельно, естественно тогда я его и username и id могу выцепить. А тут мне надо пользователя зарегистрировать в боте, только после этого он получит к нему доступ.
@tormozzzful
@tormozzzful 2 ай бұрын
Хехехе, у меня пока диалог из 38 пунктов) Вот такой вот бот
@belford123
@belford123 4 ай бұрын
Добрый день Автор! Все хорошо у тебя? Чет пропал ...
@legaru9738
@legaru9738 2 ай бұрын
Как можно сделать? Загрузка фото сразу несколько штук за раз . и чтоб каждое фото сохранилось.
@gametown1437
@gametown1437 4 ай бұрын
Здравствуйте! А что лучше использовать, MySQL или PSql В рамках такого бота по "продаже" товаров Я только начинаю свой путь в it, так что извините, если задал неразумный вопрос
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Разницы не будет в работе. Но по psql больше распространение и примеров в сети если возникнут вопросы/проблемы и более знакома другим разработчикам если проект будет совместный с кем-то впоследствии.
@gametown1437
@gametown1437 4 ай бұрын
​@@PythonHubStudio, спасибо!😊
@a11eyezonme1
@a11eyezonme1 4 ай бұрын
Добрый день, не подскажите как сделать так чтобы при проверке почты, imaplib не отмечал письма как прочитанные?
@bunta8789
@bunta8789 3 ай бұрын
7:04 В метод __call__ помимо message и bot что еще можно передать? Если я правильно понимаю, то срабатывание этого метода происходит вообще где-то в глубине пакета aiogram (то есть не в коде, который мы написали, а в коде, который написали разработчики), несмотря на то, что мы даже явно не указали никаких экземпляров наших кастомных фильтров. Соответственно там происходит вызов экземпляра класса и уже там при вызове передаются экземпляры класса types.Message и Bot. Так вот не понятно, помимо этих классов, в метод __call__ что еще можно передать? В самих пакетах aiogram не смог найти где этот вызов находится. И в документации тоже, вроде бы, не сказано, что можно передавать.
@PythonHubStudio
@PythonHubStudio 3 ай бұрын
Можно взять любые данные которые передаются через словарь data из middleware (промежуточные слои). О middleware будет в следующих видео (которые уже есть)
@izi4191
@izi4191 4 ай бұрын
Есть вопрос ,подскажите как так бысто импортировать , как на 22:32
@crypto_profitex
@crypto_profitex 4 ай бұрын
Продолжение будет?)))
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Скорее всего в понедельник, дела...
@RevolversSlav
@RevolversSlav 2 ай бұрын
Уважаемый автор! Благодарю Вас за качественный материал, не останавливайтесь) И есть у меня к Вам вопрос: При запуске бота, в терминал выдает предупреждение. Как переписать код в данном боте? Также работаю в 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 2 ай бұрын
Это просто предупреждение о том что, в версии 3.5 aiogram-a будет перемещение способа указания parse mode.
@akobelyov
@akobelyov 2 ай бұрын
если прям сильно напрягает это предупреждение, то можно заменить на bot = Bot(token=os.getenv('TOKEN'), default=DefaultBotProperties(parse_mode=ParseMode.HTML)) у меня на версии 3.4.1 с такой строкой всё работает.
@user-xt6lc2su7r
@user-xt6lc2su7r 4 ай бұрын
когда следующий урок?
@Amirhan91
@Amirhan91 4 ай бұрын
Спасибо за видео! Подскажите как сделать рассылку?
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Если группы нет, то ведите базу данных пользователей бота и каждому отправляйте сообщение по id пользователя взятому из бд.
@zhanybekov9616
@zhanybekov9616 4 ай бұрын
Добрый вечер, благодарен за ваши видео они очень крутые. У меня возникла проблема на этапе написания команды /admin в группу, не вылезает клавиатура как у вас в видео. Был бы рад если бы подсказали как решить.
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Просмотрите разницу между исходником на гитхабе или ошибку сюда напишите
@zhanybekov9616
@zhanybekov9616 4 ай бұрын
@@PythonHubStudio сравнил свой код с исходником, вроде нет различий. Не вылезает никакой ошибки, просто бот не отправляет клавиатуру.
@zhanybekov9616
@zhanybekov9616 4 ай бұрын
Может быть проблема в телеграме? Боту нужно давать админку в группе?
@zhanybekov9616
@zhanybekov9616 4 ай бұрын
@@PythonHubStudio нашел ошибку, спасибо за помощь. У вас классный канал.
@user-ld6ss8hi8v
@user-ld6ss8hi8v 4 ай бұрын
​@@zhanybekov9616Здравствуйте. Точно такая же проблема. Подскажите пожалуйста как исправили её
@rogalik4163
@rogalik4163 4 ай бұрын
как добавить боту кастомные emoji из премиумам?
@koshied850
@koshied850 4 ай бұрын
Подскажите, может, кто шарит? Как в vs code изменить тему, но оставить дефолтную подсветку текста? Был бы очень благодарен за помощь. Ролик - огонь!
@alexanderzimin6019
@alexanderzimin6019 2 ай бұрын
Всем привет. В файле reply.py такая строка: sizes: tuple[int] = (2,), При ней у меня лезет ошибка: TypeError: 'type' object is not subscriptable Исправил на: sizes: tuple = (2,), все заработало. Вопросы: У всех, кто в восторге, какая строка работает? Если первая - почему у меня нет? Если сами исправили - почему не отписали? А курс реально крутой.
@denimani8990
@denimani8990 Ай бұрын
Потому что у тебя версия питона 3.8, либо ещё ниже
@alexanderzimin6019
@alexanderzimin6019 Ай бұрын
@@denimani8990 Спасибо. Точно - 3.8. "О сколько нам открытий чудных. Готовят..."
@shu3s
@shu3s 4 ай бұрын
можешь в следующем уроке объяснить как сделать жирный шрифт конкретно в кнопке пожалуйста? хтмл, маркдаун парс там не работает(
@Amirhan91
@Amirhan91 4 ай бұрын
пните если ответит
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
А так вообще можно...?
@shu3s
@shu3s 4 ай бұрын
@@PythonHubStudio да, возможно. в некоторых ботах замечаю такое
@icrypter
@icrypter 4 ай бұрын
+
@xboxseriess5844
@xboxseriess5844 3 ай бұрын
Спасибо за классный туториал! Но почему бы кнопки не сделать с помощью словаря, а вместо else if , использовать math case. Я не учу ни кого , я просто предложил😅
@PythonHubStudio
@PythonHubStudio 3 ай бұрын
См. дальше
@xboxseriess5844
@xboxseriess5844 2 ай бұрын
@@PythonHubStudio щас два дня на работе буду, поэтому хотелось бы спойлер
@PythonHubStudio
@PythonHubStudio 2 ай бұрын
Match case не будет, чтоб сохранить совместимость с более ранними версиями python. Кнопки из словарей будут
@xboxseriess5844
@xboxseriess5844 2 ай бұрын
@@PythonHubStudio имеет смысл такому быть
@xboxseriess5844
@xboxseriess5844 2 ай бұрын
@@PythonHubStudio 👍👍👍
@PaxtonFettel_EBM
@PaxtonFettel_EBM Ай бұрын
Атрибут bot.my_admins_list случайно не в оперативной памяти хранит список? Если это так, значит после перезапуска бота нужно будет каждый раз в ручную тянуть командой в группе заново список, верно?
@PythonHubStudio
@PythonHubStudio Ай бұрын
Правильно
@PaxtonFettel_EBM
@PaxtonFettel_EBM Ай бұрын
​@@PythonHubStudio Хочу выразить вам благодарность за отличный контент и что активно общаетесь с аудиторией) Жду ваши видео как любимый сериал)
@migoamigo5553
@migoamigo5553 2 ай бұрын
Здравствуйте, сталкивался кто с такой проблемой(from common.restricted_world import restricted_world ) ошибка (Доступ к "restricted_world" не осуществляется Pylance) и много где такое бывает, как можно это исправить?Автору огромное спасибо!Лучший!
@PythonHubStudio
@PythonHubStudio 2 ай бұрын
Проект открыт в редакторе нормально или на папку выше в которой все проекты?
@migoamigo5553
@migoamigo5553 2 ай бұрын
@@PythonHubStudio проект открыт нормально,все проверил,вы сказали, что скопируйте код... скопировал и в хендлерах вылазит что то подобное. Например "from sqlalchemy.ext.asyncio import AsyncSession" (Unable to import'sqlalchemy.ext.asyncio'PylintE0401:import-error Не удается разрешить импорт "sqlalchemy.ext.asyncio" Pylance(reportMissingImports) Весь интеренет перерыл, ничего не нашел на данную проблему
@user-pr4qv3tx7n
@user-pr4qv3tx7n 4 ай бұрын
Как сделать, если допустим имеется несколько магазинов и у каждого свой ассортимент (пиццы, пироги, пироженные, торты и т. д) как добавить список магазинов в виде инлайн клавиатуры и уже проваливаясь в магазин работать с ассортиментом, далее с названиями? Или другой пример, список объектов, на объектах есть оборудование (разного назначения, количества и с разными характеристиками). В боте инлайн клавиатура со списком объектов, проваливаемся в объект, получаем инлайн клавиатуру список оборудования по типу, проваливаемся далее, получаем названия, характеристики, количество, фото...
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Вы сильно круто берете, как для начинающего разрабатывать ботов. Тут могу ответить так: делить базы данных по id (и это не значит в прямом смысле id в телеграмме) клиента (заказчика).
@kootlife9432
@kootlife9432 4 ай бұрын
@PythonHubStudio когда уже новый видос неделя прошла((( каждый день жду уже не могу
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Код 7го урока на гитхабе уже есть, после монтажа завтра публикация
@vladimirdedov5160
@vladimirdedov5160 3 ай бұрын
Ваш способ защиты от неправильных данных в конце, не фильтрует защиту от отправки emoji вместо текста. Не подскажите как с ними быть?
@PythonHubStudio
@PythonHubStudio 3 ай бұрын
И не должно, смайл это текст, который может быть в описании/названии. Можно, если нужно, сделать проверку строки на содержание емоджи через регулярные выражения или просто через проверку. Посмотрите как выглядит реальная строка emoji (сырая).
@wonderofu5609
@wonderofu5609 3 ай бұрын
Привет! Обращаюсь к вам так как зашёл в тупик. В кратце я создал два экземпляра бота, и проблема в том что команды пересекаются между ними (роутерами) Какой сделать фильтр? У меня идея была сделать фильтр на имя роутера, но к сожалению дало ошибку(
@PythonHubStudio
@PythonHubStudio 3 ай бұрын
Одни роутеры вешайте на одного бота, а другие на другого, в этом то и суть - разделить
@wonderofu5609
@wonderofu5609 3 ай бұрын
@@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 3 ай бұрын
@@PythonHubStudio но у меня появилась другая проблема, как между роутерами передавать переменные? может знаете
@Mintik24
@Mintik24 Ай бұрын
Здравствуйте,как запустить отдельно один урок чтобы проверить что поучилось?
@PythonHubStudio
@PythonHubStudio Ай бұрын
Как отдельный проект. Суть та же. И бд под него можно отдельную также сделать . На одной бд для всех вариантов могут быть проблемы в совместимости бд по таблицам
@musoroszhigayschiy_zavod76
@musoroszhigayschiy_zavod76 4 ай бұрын
Админская клава при добавлении товара постоянно отправляет ""Введите описание товара". Как исправить?
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Проверить текст сообщений в хендлерах или фильтры, вообщем код. Если делали копипаст, то может глюк редактора
@musoroszhigayschiy_zavod76
@musoroszhigayschiy_zavod76 4 ай бұрын
​@@PythonHubStudioделал копи паст с гит хаба. Пайчарм перезапускал. Посмотрите пожалуйста почему название товара дает вводить, в как вводишь описание, то он повторяет сообщение "введите описание"
@konand5
@konand5 2 ай бұрын
Добрый день! Как быть если в личных сообщениях с ботом обычным пользователям (не администраторам) тоже необходимо использовать команду "/admin". Если я пропишу обработчик для этой команды в @user_private_router, то этот роутер будет перехватывать сообщения и от администраторов и отрабатывать как общий хендлер. Очевидный вариант: в диспчер включать роутер администратора первым, а потом уже роутер обычных пользователей, но вариант не очень красивый, как можно сделать лучше? Заранее спасибо!
@PythonHubStudio
@PythonHubStudio 2 ай бұрын
1) ваш вариант хорош 2) изменить имя команды и не париться (или для админа или для пользователей)
@MrSasuke1337
@MrSasuke1337 3 ай бұрын
Здравствуйте, у меня с самого начала уже вопросы, у меня Pycharm, в папке filter файл chat_types, у меня где my_admin_list не работает (ошибку показывает), хотя весь код скопировал с гита, но все равно показывает ошибку + для каждой папки создал __init__.py и прописал туда все импорты, но все равно не помогло, можете сказать в чем моя ошибка? 😢
@PythonHubStudio
@PythonHubStudio 3 ай бұрын
Наверно у вас в редакторе проект открыт на папку выше чем положено (должна быть открыта папка, где файл app.py). Или можно в окне папок и файлов проекта(експлорере), тыкнуть ПКМ, по ней, и выбрать "пометить как папка проекта")
@kifurrer
@kifurrer 3 ай бұрын
скорее всего ты забыл включить роутер в главный файл апп пу, пропиши эту команду "dp.include_router(admin_router)"
@dimalakida8052
@dimalakida8052 3 ай бұрын
Здравствуйте. Очень сильно помогли ваши видео. Уже много ветвлений в коде и стал вопрос, как их фильтровать. Попробовал по аналогии собрать свой фильтр, который смотрел бы в базу, но он не работает... 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 3 ай бұрын
Именно об этом (о сессиях бд) рассказано в следующем видео. Там используются middleware (промежуточные) слои.
@SeDiSlayer
@SeDiSlayer 3 ай бұрын
Так запросы к базе, по отдельности, у меня все работают, а вот в фильтре, ошибку выдаёт. Про мидлваре смотрел, но не совсем понятно что там и для чего.
@maksimklisenko2867
@maksimklisenko2867 4 ай бұрын
у меня работают команды назад только если их писать вместе с "/". Что делать??
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Просмотрите фильтры в вашем обработчике
@KroLenbDC
@KroLenbDC 4 ай бұрын
12:37 не знаю почему, но сообщение не удаляется, но при этом клавиатура в боте появляется исправно
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Бот должен быть админом в группе
@KroLenbDC
@KroLenbDC 4 ай бұрын
@@PythonHubStudio он и есть админ, да и доступ к удалению сообщений тоже у него есть
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Значит проверьте свой хендлер для группы /admin. Не может быть, что у меня работает (код на гитхабе есть), а у вас просто так нет. Если делали копипаст, то может редактор не воспринял некоторые строки(такое бывает) - добавьте где нибудь рандомный print, чтоб текст заново прочитался, или перезагрузите редактор(закрыть/открыть). Как-то так...
@smash6792
@smash6792 4 ай бұрын
Очень нравиться ваш контент!! Возник вопрос: Как я могу скачать файл (в моем случае это .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 4 ай бұрын
Видимо пропустили, я говорил, что если нужен экземпляр бота в хендлере, то всего лишь нужно добавить соответствующий параметр в ваш хендлер, он туда прокинется aiogram-ом сам: (message: types.Message, bot: Bot) И юзайте вашего бота в хендлере как захочется. А для аннотации типа параметра bot: Bot, нужно просто добавить импорт экземпляра класса Bot, чтоб видеть его методы в автокомплите: from aiogram import Bot
@smash6792
@smash6792 4 ай бұрын
Благодарю за ответ!!!@@PythonHubStudio
@1230pp
@1230pp 4 ай бұрын
Здравствуйте как связаться с вами? мне нужно инлайн бот телеграм
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Уже только что связались... Заказы не принимаю
@1230pp
@1230pp 4 ай бұрын
Понятно 😐
@musoroszhigayschiy_zavod76
@musoroszhigayschiy_zavod76 4 ай бұрын
дошел до 12:50 клавиатура админа не появляется
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
А если взять код с гитхаба работает? Если да, то у вас где-то ошибка/опечатка/чего-то не хватает.
@musoroszhigayschiy_zavod76
@musoroszhigayschiy_zavod76 4 ай бұрын
@@PythonHubStudio оттуда все работает)))
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Значит есть в чем поразбираться) Сделайте паузу, чтоб не было 'замыливания' взгляда.
@kootlife9432
@kootlife9432 4 ай бұрын
@@PythonHubStudio Добрый день подскажите пожалуйста у меня ошибка "Import "common.restricted_words" could not be resolvedPylancereportMissingImports)"если я удаляю хэндлер с restricted_word то все работает
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Закройте/откройте редактор заново, это просто pylance сбоит
@CryT0R
@CryT0R 4 ай бұрын
Интересно ваше мнение. В коде обработчиков FSM есть ли мотивация писать в порядке await message.answer ("Введите название") #говорим что хотим от человека await state.set_state(AddProduct.name) #переходим к ожиданию ввода Вместо - сначала установки состояния, а затем отправки сообщения типа "Введите название"? await state.set_state(AddProduct.name) #переходим к ожиданию ввода await message.answer ("Введите название") #говорим что хотим от человека
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
Без разницы
@mark.visotskiy
@mark.visotskiy 4 ай бұрын
Приветствую, админа, у меня проблема с админ панелью, когда запускаю бота /admin не работает, бот вообще не заходит в handler с командой /админ и пропускает через обычный handler с фильтром F.text, подскажите как решить эту проблему. Единственная ошибка которую выдаёт ide, в файле chat_types не работает обращение к списку админов bot.my_amins_list , что делать?
@PythonHubStudio
@PythonHubStudio 4 ай бұрын
1) Опечатка не my_amins_list, a my_admins_list 2) Сверьтесь с кодом на гитхабе. В любом случае опечатка где-то
@mark.visotskiy
@mark.visotskiy 4 ай бұрын
@@PythonHubStudioпришел к тому что он не заходил в handler admin из-за того что был F.text() поменял местами вызов в app.py, но чтобы бот сам определил админа так и не допер, в итоге вбил напрямую свой id
@genylivnev7822
@genylivnev7822 24 күн бұрын
День добрый! Помогите разобраться с проблемой. В модуле chat_types в классе IsAdmin, bot не видит my_admins_list, я прописал его в модуле app, попытался импортировать саму переменную bot из app, но код не запускается, а в самом классе Is Admin, bot.my_admins_list он его не видит. Импорты не помогают
@PythonHubStudio
@PythonHubStudio 22 күн бұрын
Проверьте на опечатки в свойстве my_admins_list, и там и там
@genylivnev7822
@genylivnev7822 15 күн бұрын
@@PythonHubStudio проверил и даже с вашего гита качнул код, не получается. В модуле chat_types в классе IsAdmin, он my_admins_list просто не видит, подкрашивается серым. Если импорт делать, то там то же ошибка ( ImportError: cannot import name 'user_private_router' from partially initialized module )
@genylivnev7822
@genylivnev7822 14 күн бұрын
@@PythonHubStudio все, разобрался ) там, внизу коментов есть ответ )
@MrSasuke1337
@MrSasuke1337 2 ай бұрын
Объясните пожалуйста момент 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 2 ай бұрын
if data["data_input"] == r_n:
@MrSasuke1337
@MrSasuke1337 2 ай бұрын
@@PythonHubStudio спасибо, работает!
@nimble2268
@nimble2268 4 ай бұрын
await state.reset_state()
@CryT0R
@CryT0R 4 ай бұрын
И еще не совсем понятно как на видео отработал код #Хендлер для отлова некорректного ввода для состояния если среда ругается, что функция уже определена: #Ловим данные для состояние 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 4 ай бұрын
Отработал нормально, как видно на видео. Это предупреждение линтера вашего редактора. Имя декорируемой функции не имеет значения. Переименуйте если мешает
@ArtemNerin
@ArtemNerin 4 ай бұрын
Какие могут быть нюансы если вместо: #Становимся в состояние ожидания ввода 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 4 ай бұрын
И так тоже можно, без проблем
@UlanKurmanbekov
@UlanKurmanbekov Ай бұрын
Здравствуйте! Как думаете можно ли написать таким образом? @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 29 күн бұрын
По чесноку, то тяжеловато понять без контекста полной структуры самого бота и как лучше. Но могу дать общее резюме по поводу структуры хендлеров: Если хорошо работает и так удобно реализовать это - то все хорошо. В последствии переделать - это нормально, если оказалось, что этот вариант не валиден. Но выглядит вроде ничего
@UlanKurmanbekov
@UlanKurmanbekov 29 күн бұрын
@@PythonHubStudio спасибо за ответ, бот работает нормально. У вас прям очень и очень хорошие видеоуроки! Советую всем своим знакомым которые начинают учить Python
DELETE TOXICITY = 5 LEGENDARY STARR DROPS!
02:20
Brawl Stars
Рет қаралды 17 МЛН
Sprinting with More and More Money
00:29
MrBeast
Рет қаралды 182 МЛН
Climbing to 18M Subscribers 🎉
00:32
Matt Larose
Рет қаралды 29 МЛН
FSM Context - машина состояний на AIOGRAM 3.4 | 6 УРОК
11:07
DELETE TOXICITY = 5 LEGENDARY STARR DROPS!
02:20
Brawl Stars
Рет қаралды 17 МЛН