я готов целовать твои руки, все уроки просто супер, просто как глоток свежего воздуха после попытки написать всё на telebot так ещё и с schedule, спасибо тебе огромное
Ух, спасибо, сейчас буду с помощью машины состояний реализовывать "ключ активации". Заказчик требует, чтобы бот работал только у тех, кто после команды start введёт правильный ключ. Пока не посмотрел видео, планировал такие костыли отращивать, что *цензура не пропустила*... Если у кого есть опыт, буду рад советам) Автор, тебе вообще большое спасибо, большую часть моего обучения Aiogram'у составили твои ролики, и ещё немного помогает chatGPT.
@@KiR1LLingus Там ситуация была интереснее. Бот работал не 24/7, и я не хотел, чтобы запрос на ключ приходилось делать при каждом перезапуске. Более того, я совершенно не хотел подключать PostgresQL для содержания авторизованных пользователей, или выделять их список в отдельный файл. Поэтому -- и это оказалось гениальным решением -- я проверял текущее состояние пользователя после перезапуска. Иначе говоря, если у него есть кнопки, значит он не UNREGISTERED, и ему не нужно входить снова. И наоборот, соответственно. Так, у меня есть полноценная авторизация, и при этом нет базы пользователей и накопления информации. Это успех.
@@helpatch Вот уж не для того, чтобы читать комменты от тех, чей рот настолько давно не мыли. Впрочем, в отличие от тебя, я не делаю поспешных выводов -- возможно, конкретно твой засоряют быстрее, может даже несколько раз за день) Что же до ответа -- я работаю на множестве языков, и обычно пишу бэкэнд, но человек, который собирался писать фронт для бота покинул проект, так что реализация перешла ко мне по наследству. Вот и решил освоиться в этом. PS: ты уж следи за словами, я и без "срача" в комментах умею за пояс заткнуть -- это характерная разница между нами)
@ntzcoder, а как записать в state.update_data динамический параметр, который меняется? Например: user_name_1, user_name_2 и т.п. То есть я формирую имя в переменной, а потом хочу сохранить значение с этим ключом в FSM.Context.
А зачем всё регистрировать через dp? В aiogram3 доступны роутеры, через них все выглядит куда понятнее, но спасибо за урок про FSM, единственное так и нигде не могу найти: если мы заносим или обновляем данные через state.update_data(key=value), то зачем нужен метод state.set_data()?
dp это считай корневой (основной) роутер. Можно и роутеры использовать. Уже точно не вспомню, но set_data записывает данные удаляя старые. Update_data добавляет к имеющемся данным указанные данные. Вроде так. Поэкспериментируй, потестируй.
кто подскажет как возможно обработать введенный текст. Польтзователь вводит название города и если этот город есть списке городов, то ему отправляется информация из словаря. А если города в списке нет, то выводится сообщение о том, что такого города нет. Саму функцию я написал, перваая часть условия выполняется, а вот вторая(там где город в списке отсутствует), к сожалению мне не удается.
Укажи часть кода с городами как отдельную функцию, и с помощью if/elif укажи что при невыполнении этой функции (!) выходит текст "Город не найден" или что-то подобное, можешь приписать много действий далее
Спасибо, все работает ! Добавьте пожалуйста в состояние возможность отмены ввода. Т е в видео 3 шага, а если шагов скажем 30, то кнопка отмены или выхода из машины состояний очень бы пригодилась. Также добавьте пожалуйста возможность добавлять медиа контент в машину состояний и сохранение данных из машины состояний в базу SQL
Для очистки машины состояний можно использовать отдельный хэндлер на команду reset - в функции просто написать await state.clear() и уведомить сообщением пользователя о сбросе состояния. Добавлять медиаконтент можно точно также как и любые данные - значением ключа будет file_id отправленного боту файла. Пример сохранение данных в базу есть в видео по миддлвари и в сегодняшнем видео по рассылке с помощью телеграм бота. Все что нужно это достать данные из машины состояний - await state.get_data
На основе видео-уроков на моем канале вы можете сделать это самостоятельно. Крепкую базу я вам дал. Если что-то не получается, то вы можете заказать у меня платную консультацию написав мне в телеграм - t.me/nztcoder Или же вступив в клуб - Богатый пайтон разработчик. Подробности на сайте nztcoder.com
@@nztcoder а можешь тогда разобрать более подробно именно эту тему : как показать InlineKeyboardMarkup кнопки в боте, которые берутся из sqlite3 на каждый новый ряд из таблицы? И чтобы когда пользователь тыкал на них, то открывалась возможность добавить к этому объекту новые значения в колонку?
@@Maxlubanclan Можно реализовать FSM и во время выполнения хэндлера текущего состояния находить в бд нужный объект и менять его значение из сообщения, а FSM использовать для получения всех изменений, а потом применения их (например: хотим создать человека в бд: получаем имя, фамилию, телефон и только после этого что-то пытаемся записать в бд)
я готов целовать твои руки, все уроки просто супер, просто как глоток свежего воздуха после попытки написать всё на telebot так ещё и с schedule, спасибо тебе огромное
Большое спасибо за теплые слова.
Ух, спасибо, сейчас буду с помощью машины состояний реализовывать "ключ активации". Заказчик требует, чтобы бот работал только у тех, кто после команды start введёт правильный ключ.
Пока не посмотрел видео, планировал такие костыли отращивать, что *цензура не пропустила*...
Если у кого есть опыт, буду рад советам)
Автор, тебе вообще большое спасибо, большую часть моего обучения Aiogram'у составили твои ролики, и ещё немного помогает chatGPT.
А разве не проще это сделать не с помощью State, а с помощью фильтров?
А нахуя собственно брать заказы, когда ты нехера не знаешь?
@@KiR1LLingus Там ситуация была интереснее. Бот работал не 24/7, и я не хотел, чтобы запрос на ключ приходилось делать при каждом перезапуске. Более того, я совершенно не хотел подключать PostgresQL для содержания авторизованных пользователей, или выделять их список в отдельный файл. Поэтому -- и это оказалось гениальным решением -- я проверял текущее состояние пользователя после перезапуска. Иначе говоря, если у него есть кнопки, значит он не UNREGISTERED, и ему не нужно входить снова. И наоборот, соответственно. Так, у меня есть полноценная авторизация, и при этом нет базы пользователей и накопления информации. Это успех.
@@helpatch Вот уж не для того, чтобы читать комменты от тех, чей рот настолько давно не мыли. Впрочем, в отличие от тебя, я не делаю поспешных выводов -- возможно, конкретно твой засоряют быстрее, может даже несколько раз за день)
Что же до ответа -- я работаю на множестве языков, и обычно пишу бэкэнд, но человек, который собирался писать фронт для бота покинул проект, так что реализация перешла ко мне по наследству. Вот и решил освоиться в этом.
PS: ты уж следи за словами, я и без "срача" в комментах умею за пояс заткнуть -- это характерная разница между нами)
@ntzcoder, а как записать в state.update_data динамический параметр, который меняется? Например: user_name_1, user_name_2 и т.п. То есть я формирую имя в переменной, а потом хочу сохранить значение с этим ключом в FSM.Context.
Отлично. Спасибо!
Есть видео вместо команды form по кнопке запрашивает инфу?
А зачем всё регистрировать через dp? В aiogram3 доступны роутеры, через них все выглядит куда понятнее, но спасибо за урок про FSM, единственное так и нигде не могу найти: если мы заносим или обновляем данные через state.update_data(key=value), то зачем нужен метод state.set_data()?
dp это считай корневой (основной) роутер. Можно и роутеры использовать.
Уже точно не вспомню, но set_data записывает данные удаляя старые. Update_data добавляет к имеющемся данным указанные данные. Вроде так. Поэкспериментируй, потестируй.
кто подскажет как возможно обработать введенный текст. Польтзователь вводит название города и если этот город есть списке городов, то ему отправляется информация из словаря. А если города в списке нет, то выводится сообщение о том, что такого города нет. Саму функцию я написал, перваая часть условия выполняется, а вот вторая(там где город в списке отсутствует), к сожалению мне не удается.
Укажи часть кода с городами как отдельную функцию, и с помощью if/elif укажи что при невыполнении этой функции (!) выходит текст "Город не найден" или что-то подобное, можешь приписать много действий далее
Спасибо, все работает ! Добавьте пожалуйста в состояние возможность отмены ввода. Т е в видео 3 шага, а если шагов скажем 30, то кнопка отмены или выхода из машины состояний очень бы пригодилась. Также добавьте пожалуйста возможность добавлять медиа контент в машину состояний и сохранение данных из машины состояний в базу SQL
Для очистки машины состояний можно использовать отдельный хэндлер на команду reset - в функции просто написать await state.clear() и уведомить сообщением пользователя о сбросе состояния.
Добавлять медиаконтент можно точно также как и любые данные - значением ключа будет file_id отправленного боту файла.
Пример сохранение данных в базу есть в видео по миддлвари и в сегодняшнем видео по рассылке с помощью телеграм бота. Все что нужно это достать данные из машины состояний - await state.get_data
На основе видео-уроков на моем канале вы можете сделать это самостоятельно. Крепкую базу я вам дал. Если что-то не получается, то вы можете заказать у меня платную консультацию написав мне в телеграм - t.me/nztcoder
Или же вступив в клуб - Богатый пайтон разработчик. Подробности на сайте nztcoder.com
Сделай видео по тому как юзер делает инпут боту и идет поиск по базе данных
Есть такое видео. Вчера выкатил. Поищи на канале и посмотри.
@@nztcoder а можешь тогда разобрать более подробно именно эту тему : как показать InlineKeyboardMarkup кнопки в боте, которые берутся из sqlite3 на каждый новый ряд из таблицы? И чтобы когда пользователь тыкал на них, то открывалась возможность добавить к этому объекту новые значения в колонку?
@@Maxlubanclan Можно реализовать FSM и во время выполнения хэндлера текущего состояния находить в бд нужный объект и менять его значение из сообщения, а FSM использовать для получения всех изменений, а потом применения их (например: хотим создать человека в бд: получаем имя, фамилию, телефон и только после этого что-то пытаемся записать в бд)
+
жоска
Превосходно)