Telegram бот на python aiogram #6 FSM Машина состояний админка для бота
В видео рассмотрим машину состояний ( FSM ) для telegram бота на python с библиотекой aiogram. Машина состояний позволяет создать цепочку вопрос - ответ для бота. Напишем админку для бота telegram чтоб пользователь мог менять базу данных. Рассмотрим последовательность State, наследование от класса StatesGroup, как прописать отмену состояния бота. И написать проверку администратора чата для бота на python aiogram.
Поддержать канал:
www.buymeacoffee.com/PythonHu...
Также, доступны функции - Спонсорство на KZhead:
/ @pythonhubstudio
и кнопка Суперспасибо!
Документация aiogram:
docs.aiogram.dev/en/v2.25.1/
Этот плейлист:
• Телеграм бот на Python...
Плейлист курс по Телеграм ботам (новый aiogram 3):
• Telegram бот на python...
Курс по python 7 часов:
• Учим python за 7 часов...
Видео про асинхронность:
• Асинхронность, многопо...
Курс по Django 15 часов:
• Полный курс уроков по ...
Курс HTML / CSS:
• Учим HTML и CSS за 7 ч...
Не забудьте подписаться и включить оповещения, чтоб не пропустить новые выпуски!
#PythonHubStudio
#python
#aiogram
ВНИММАНИЕ!) В видео затаился БАГ: Хендлер отмены для корректной работы необходимо разместить после хендлера со стартом "машины состояний" (там где написано "FSMAdmin.photo.set() ) в видео он с командой "Загрузить". И в функции регистрации соответственно поменять порядок. В следующем видео наглядно поправлю) И Ссылка на видео - подробный курс про деплой (размещение на сервере) бота, как переписать на webhook и подключение к удаленной базе данных PostgreSQL: kzhead.info/sun/e9iMl9uCqIqeeWg/bejne.html
А я думаю "шо такое, почему только фото отменить можно" )) Спасибо что написали решения прямо здесь под этим роликом)
А нет проблемы с тем что айди фото меняется через время?
@@user-tc9gl6dr2d Ни одно айди не должно меняться со временим. Вы поподробнее можете описать
@@woodys27 можешь помочь ?Нужно разкоментировать и потом запускать верно?я сделал так # и запустил но нечего не работает ответа от бота разкоментировать верно?
/handlers/admin.py", line 47 @dp.message_handler(load_price, state = FSMAdmin.price) ^ SyntaxError: unexpected EOF while parsing ^ Почему мне дает эту ошибку я несколько раз просмотрел видео???(((( Почему вы не ставите сылку на уроки в гитхабе например?
Нашел решение для проблемы с фотографиями: В поле регистрации хендлеров нужно прописать в команде load_photo вместо commands=[‘photo’], поставить content_types=[‘photo’]. И у меня все заработало. Пролайкайте, чтобы остальные увидели!
Уроки божественны! Настолько всё классно пошагово объясняется, что дополнительных вопросов, как часто бывает, типа "Та блин, а это от куда тут взялось?", - просто не возникает!
Самые полезные уроки для начинающих на всём ютубе! Спасибо за проделанную работу!
Урок огонь. Автор глыба. Большое спасибо. Все твои уроки смотрю по несколько раз и конспектирую. Большая просьба больше роликов. Супер спасибо!!!
Лучшее видео по машинам состояний. Просто бальзам на душу тех, кто ищет практики по ним
Это лучшие уроки на свете по aiogram. Спасибо Вам большое, Вы лучший)))
Лучшее объяснение машин состояний. Благодарю!!!
Ого, так оперативно - всего пара дней с прошлого видео, и тут такой приятный сюрприз. Большое спасибо!
Успехов в данной деятельности, здравый человек, пишу первого бота для телеграмм, и это лучшее объяснение данной библиотечки, не хотелось писать копипастом скучного эхобота, написал логику всё рабочее, а вот с интеграцией пошли проблемы, поля ввода. Благодаря данному видео понял как у пользователя спрашивать информацию. Благодарю тебя здравый человек.
Огромное спасибо за видеозаписи! Очень спокойный приятный голос, все понятно и без спешки.
спасибо за урок) Благодаря курсам и вашим видео уже сам нахожу свои ошибки)
Спасибо большое за ваши уроки! Всё очень понятно и интересно, продолжайте в том же духе!
Вот это урок! Браво, теперь хоть стало понятно, что такое машина состояний и как вообще ее использовать! Да и вообще все эти уроки до этого по боту просто мое почтение! Просто словами не передать как благодарен!
Спасибо большое! Многие любят показывать уже готовый проект, после просмотра таких видео ничего не понятно. А разработка в реалтайме очень наглядна, это жирный плюс вашему каналу. Подпишусь на вашу рассылку.
Ты лучший , спасибо большое тебе за труды. Мне по кайфу тебя слушать, всё что нужно как же ты круто с материалом подобрал, видно что работаешь в этой сфере. Круто, и не бойся долго объяснять , по мне так программированию конца и края нет в учёбе.
Спасибо за крутые уроки. Вчера три часа ошибки искал после видоса, сегодня почти все сам поисправлял.
Спасибо за такие тщательные разъяснения! Продолжаю грызть камень программиста! Желаю успехов в Вашем деле!
Большое спасибо, что поделился этим материалом. Все очень понятно и доходчиво. Про боты это лучшая подборка.
Класс. Огромное спасибо) Особенно за часть с доступами через отдельную группу!)
Офигенно. Супер офигенно. Смотрю с рекламой! 👍 автор, благодарю!!!!!
Лучшие уроки по разработки tg bot на ютуб. Спасибо
Благодарю, очень понятно объяснил! Все работает😀
Здраствуйте, суперский урок, спасибо от души 🙏
Великолепные уроки! 🤩
Отлично. Большое спасибо за видео!
просто супер! Огромное вам спасибо!!!! вы преподаватель от Бога! :)
Лучшие уроки! Спасибо
Реально лучшие уроки!
Подача материала на высшем уровне
👍, Вышел новый плейлист по aiogram 3, этот по 2ке
Спасибо большое! Прекрасный туториал, жду патреон, чтобы можно было поддержать. Давно ждал, когда подробно появится aiogram
Браво, Автор! ЛАЙК И ПОДПИСКА! Идеальное объяснение. Вставки с работой бота вообще гениальны. Буду тебя смотреть! Красавчик!
Спасибо
7
Все пишется на одном дыхании. Я бы смотрел и делал любое по питону каждый день, настолько все понятно и откладывается в мозгу
Редко пишу комменты, но тут не сдержался)) .....Очень всё толково разъясняешь, круто! Огромный респект Бро!!!)
ура Спасибо! я ждал этот урок
жаль, что только один лайк поставить можно, очень долгожданное видео. Спасибо огромное
Спасибо большое за интересный контент!!!!!!
Всё работает как на видео. Отлично
Лучший! Спасибо тебе
Я тебя понимаю. Я всегда на уроках не понимал а тебя понимаю. У тебя дар учителя.
Спасибо за урок!
Спасибо за видео!
Отличные уроки! Проверку на админа, я бы сделал только в cm_start(), дальше уже не требуется, ибо туда мы никогда не попадем. А вместо message.replay можно писать message.answer, так красивее.
БОЛЬШОЕ спасибо, урок - мугический!
После загрузки фото - ОТМЕНА НЕ работает...... мб в функции нужно прописать state: '*', а не FSMContext ?!
НЕ заметил коментарий с декларацией бага......
Юююююхуууууу =))) Шикарные уроки. Сначала не работало, но вроде разобрался. От души 🙃👍
Спасибо вам!
Лучший из лучших!
Очень полезно, спасибо)
Ваши уроки огонь просто , спасибо за понятный и простой видеоурок. Есть просьба делайте ещё видео с машина состояний на проверку логин и пароль.
+
Как всегда, все прекрасно! На высшем уровне! У меня есть такой вопрос. В процессе внесения данных было обнаружено, что, например, описание не правильное или пицца не та была внесена (короче, ошибся/поспешил при заполнении). Т.е., данные уже в словаре, но еще не БД (о которой в следующем уроке). Так вот, можно ли каким-то образом вернуться в начало заполнения всех данных (начать сначала - с добавления фото). И повторять заполнение ТОЛЬКО ТЕМИ данными, которые надо изменить. Если же поле правильное, то переходить к следующему состоянию без изменения старых данных (например там надо много писать). Разъясни, пожалуйста. Может быть получится добавить этот видосик о возможности редактирования при использовании машины состояний.
Повторюсь, ты лучший!
Спасибо!
Спасибо!!!
Ваще супер!
Спасибо!!!!!!!!!!!!!!!!!!!!!!!
ну за такого бота однозначный лайк от легендарного вебмастера СЕООНЛИ
Спасибо за уроки! Подскажите пожалуйста, если необходимо изменить информацию в меню (например, изменилась цена пиццы) как быть?
👍
Здравствуйте! Ваши уроки действительно кладезь, каюсь что не стал смотреть сразу (давно бы бота уже написал). Но есть одно "но" я бы, включил ID админа в атрибуты класса, это бы позволило отказаться от global.
1:30 ахахха, лучший
Круто! Доступно! Понятно! Спасибо 😃 Если сможете рассказать более подробно, как работать с многоуровневыми инлайновыми кнопками, а именно направлять их взамен ранее направленных - будет здорово! P.S. понимаю, что нужно редактировать либо удалять сообщение к которому они были направлены ранее, но у меня не получалось. Постоянно ловил ошибки... Еще будет здорово узнать про форматирование инлайновых кнопок: можно ли текст выравнивать по левую/правую сторону кнопки и/или экрана чата.
Когда доберёмся до инлайна через несколько видео
@@PythonHubStudio Буду ждать. Кстати, не знал, что в aiogram есть состояния. Очень полезно. До этого видео, методом тыка сделал нечто похожее через sqlite и кучу условий, а оказывается есть лаконичное решение
В PyCharm, если что-то не подключил, например импорт, или сделал описку в названии уже созданной функции, то это дело подсветится, и подскажем в чем ошибка. И еще мне нравится, что там пишешь class FSMAdmin( и тебе сразу выдает список аргументов.
Хорошо объяснил . Лайк 👍. Хотел узнать будет возможность показать регистрацию пользователя . И как пример не зарегистрированный пользователь видео одно меню . А допустим у зарегистрированного появляется личный кабинет .
Thnaks
лайк + коммент
Супер уроки!!! Даже говорить ничего другого и не надо) Вот на счет проверки на модера это получатся есть от когда-то ввел команду "модер", то у него всегда есть админка в боте или же после каждого заполнения переменная ID какт-о должна чиститься но вроде в коде я этого не увидел.
Значение в переменной Id очиститься после перезагрузки бота или перезапишется если другой модератор авторизуется
Блеск!
И снова с благодарностью. А расскажи, пожалуйста, как в режиме машины состояний передавать в журнал полученные по апи данные (словари, картинки, аудио) и потом отправлять их сразу из оперативной памяти в чат без записи в базу данных? Спасибо!
Спасибо за урок! А как сделать одновременное добавление записей разными пользователями?
Не будет ли лучше сделать ID = set()? Чтобы, если админов несколько, можно было менять меню одновременно нескольким админам. А ещё проверка на state.get_state() не работает, даже если не запускал машину состояний, все равно "отмена" запускает всю функцию.
Добрый день, спасибо за уроки!) Подскажите, обнаружил такой баг: Команда "Отмена" работает корректно только на 1-ом состоянии, когда загружаем фото. В остальных случаях при вводе команды Отмена или текстом отмена, бот продолжает добавлять описание и название товара.
Да, хендлер отмены нужно переместить под хендлер с командой"загрузить" в том что написано FSMAdmin.photo.set() И регистрацию соответственно тоже
It works on my vegas pro 14) Tnx
Спасибо большое за урок. А можно в первом set() не ждать ответ от пользователя, а вписать свои данные? Грубо говоря я хочу вписать данные из переменной.
учусь по вашим, прям золото, подскажите пожалуйста, где и как разместить логирование и еще возможно сделать цифровую клавиатуру, которая будет отправлять сообщение только когда длина ввода будет например 6 цифр? клавиатура устройства не подходит, огромное спасибо
Лучше отлавливать ошибки через try catch. Бот не будет останавливаться, а ошибки можно будет выводить в консоль или сохранить в файл.
все таки проверка на админа через фильтр как-то более правильно что-ли, я считаю (хотя если брать конкретно пример с пиццерией - то, что бы заказчик мозг не парил, через группу таки удобнее в плане обслуживания). Сам пересматриваю этот плейлист и еще большой плейлист курс от "физик симпл" уже не в первый раз(да, до меня доходит все не с первого раза :-) ), и наконец-то начинаю догонять что и откуда растет. Как говорится: терпение и труд - все перетрут.
Вариантов много, но нужно иметь в виду, что пример из видео не авторитет!!! Видео для быстрого ознакомления с aiogram, чтоб было проще сориентироваться в документации к библиотеке.
Добрый день! Спасибо большое за уроки! У меня вызывается функция " load_photo " , только если установлена галочка " Сжать изображение " , это правильная работа? Почему так происходит и как этого избежать? Спасибо!
А будет урок по написанию админки с помощью Django? Чтобы получился сайт на котором пользователь может управлять своим ботом?
Спасибо за уроки, но хотел уточнить при вводе "отмена" бот пишет "ок" но не выходит из состояния админки и если снова написать загрузить, то можно заново загрузить фото.
Добрый день. Как я понимаю в машину состояний бот переходит после команды /загрузить, тогда вопрос: зачем прописывать проверку на модератора в каждом хэндлере машины состояний?
Огромная благодарность за материал и такую подачу!!! Есть небольшая проблемка, почему-то не удаляет сообщение moderator, кто с таким сталкивался?
А как реализовать кнопку "Назад"? То есть, чтобы сбрасывалось на предыдущее состояние. Например, админ вводил описание в сауне и экран залип и он в описании навводил всякой ерунды и чтобы опять заново не вводить все, начиная с фотки, он мог написать /назад и заново написать описание. Нужно в каждый хэндлер добавить иф с описанием, что делать если текст равен "назад", явно устанавливать состояние на предыдущее значение и присылать такое же сообщение как в нем?
@Python Hub Studio очень рад Вашим курсам по Python и написанию бота. Раньше вообще не понимал и не мог ничего написать, с Вами же все пошло на ура. У меня только возник вопрос: если я хочу вести бота без группы, то что и где нужно поменять, чтобы идентификация по ID проходила в боте, а не в группе?
Просто отправьте боту сообщение от нужного аккаунта и возьмите его Id, потом пропишите его в коде
@@PythonHubStudio Понял Вас, спасибо за ответ! Буду пробовать :)
Здравствуйте. Вам удалось разрешить этот вопрос?
А как сделать, чтобы вместо фото пользователь кидал любой файл (типа документ ворд или пдф) и точно также присваивался идентификатор для бд, а затем с бд в сообщение для юзера загружать этот файл, по аналогии с фото?
Добрый день, после отправки фото код не продолжает работу, с чем может быть связано? проверял десять раз код, все точно так же написано, при команде /загрузить , присылает сообщение (загрузи фото) загружаю фото и ничего не происходит
Использовать глобальную переменную будет разумно? Или в сочетании с FSM , переменная ID будет уникальная
Привет! Спасибо за прекрасные уроки. Хотел спросить, почему не сделать так, чтоб при вызове FSM: 1. Это можно было сделать только в личке с ботом или 2. админа перекидывало в личку к боту?
Нужно было просто видео досмотреть до конца, спасибо еще раз за уроки)))
можете подсказать насколько безопасна реализация проверки на соответствие айди отправителя == айди администратора и, если нет, то происходит выход из машины состояний? и ничего если в функцию cm_start я добавил аргумент (state: FSMContext) для непосредственно реализации выхода из машины состояний?
Здравствуйте, есть небольшая проблема. Когда отправляю команду боту для выполнения действий из видео , он её просто отправляет как эхо бот, но команды из раздела client он выполняет . Подскажите пожалуйста в чем может быть проблема
Здравствуйте, спасибо большое за такие понятные и полноценные уроки! У меня возник 1 вопрос, буду рад если вы на него ответите. Так как после команды /moderator изменяется глобальная переменная ID и она проверяется абсолютно в каждом хендлере состояний, то при попытке двух и более модераторов одновременно загрузить меню, первые не смогут завершить загрузку из-за того, что глобальный ID изменился на значение последнего модератора или все будет работать корректно?
Не будет, пример работает для одного модера и при запрете добавлять бота в другие группы и то он очень простой и на деле нужно чуть посерьёзнее подходить к таким вещам
Для ограничения доступа я предлагаю использовать декоратор перед всеми админскими обработчиками. Мне кажется это более элегантный способ, чем перегружать функцию дополнительным функционалом, также не нарушается принцип “don’t repeat yourself'
напиши пожалуйста как решил этот момент
@@evgeniiwjay6177 как я понял, он имеет в виду в файле handlers/admin не создавать функцию register_handlers_admin, а перед каждый обработчиком написать соответствующий декоратор
Доброго времени суток! Огромная благодарность вам за ваши уроки. Очень доходчиво объясняете без всякой воды. Столкнулся со следующей проблемой из функций client, other, admin в основном файле бота, работают при запуске через bat-файл только две первые. При смене порядка вызова также работают только две первые. Подскажите, в чем может быть дело? В интернете про это ничего не нашел, к сожалению.
у самого не работала регистрация admin, поэтому поэксперементировав я начал ее регестрировать первой,а после client, other
А если я хочу админку использовать отправляя боту на прямую? Не в групповом чате вызывать, в в ЛС боту. То тут как?
Добрый день , а как после запроса url в машине состояний перидовать его в inline button ??
Очень информативный и полезный урок, автору благодарность за проделанную работу! Возник вопрос, а есть ли необходимость проводить проверку на ID админа в каждом хэндлере при заполнении позиции (и в фото, и в названии и в описании)? Как я предполагаю, достаточно сделать данную проверку только в первом хэндлере по команде "Загрузить", ведь после него бот становится в отслеживание машины состоянии и производится заполнение, и, соответственно, если пользователь не пройдет проверку, то и бот не будет отслеживать состояния, а значит и заполнять будет нечего? Или не в том направлении думаю?
К такому же выводу пришел, что смысла нет везде писать проверки. В самом начале думаю было бы доставка
Достаточно*
я хочу загрузить pdf файл, что нужно вбить после content_types= ?
А как принимать аудио файл, если скидывает пользователь? data['photo'] = message.photo[0].file_id вот так фото принимаем, но если поставить аудио не срабатывает. как обработать его?
хорошие видео, конечно, но гораздо нагляднее было, когда фрагменты кода не вставлялись, а набирались в реальном времени с попутным объяснением. Видео может и стало бы на 10% длиннее, но твк было бы кратно доходчивее
Здравствуйте, как я могу сделать список state. Мне нужно хранить несколько переменных. Допустим если пользователь хочет заказать сразу несколько пицц.
как сделать хэндлер на выход из состояний при помощи библиотеки telebot, непонятно какие там надо библиотеки импортировать и методы использовать