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

  Переглядів 12,559

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 ч...
Не забудьте подписаться и включить оповещения, чтоб не пропустить новые выпуски!

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