Ботостроение Telegram. Машина состояний. Aiogram3 - полное руководство.

แชร์
ฝัง
  • เผยแพร่เมื่อ 31 ม.ค. 2025

ความคิดเห็น • 25

  • @gachick2326
    @gachick2326 ปีที่แล้ว +3

    я готов целовать твои руки, все уроки просто супер, просто как глоток свежего воздуха после попытки написать всё на telebot так ещё и с schedule, спасибо тебе огромное

    • @nztcoder
      @nztcoder  ปีที่แล้ว

      Большое спасибо за теплые слова.

  • @АристархИнферно
    @АристархИнферно ปีที่แล้ว +4

    Ух, спасибо, сейчас буду с помощью машины состояний реализовывать "ключ активации". Заказчик требует, чтобы бот работал только у тех, кто после команды start введёт правильный ключ.
    Пока не посмотрел видео, планировал такие костыли отращивать, что *цензура не пропустила*...
    Если у кого есть опыт, буду рад советам)
    Автор, тебе вообще большое спасибо, большую часть моего обучения Aiogram'у составили твои ролики, и ещё немного помогает chatGPT.

    • @KiR1LLingus
      @KiR1LLingus ปีที่แล้ว +1

      А разве не проще это сделать не с помощью State, а с помощью фильтров?

    • @helpatch
      @helpatch ปีที่แล้ว

      А нахуя собственно брать заказы, когда ты нехера не знаешь?

    • @АристархИнферно
      @АристархИнферно ปีที่แล้ว

      @@KiR1LLingus Там ситуация была интереснее. Бот работал не 24/7, и я не хотел, чтобы запрос на ключ приходилось делать при каждом перезапуске. Более того, я совершенно не хотел подключать PostgresQL для содержания авторизованных пользователей, или выделять их список в отдельный файл. Поэтому -- и это оказалось гениальным решением -- я проверял текущее состояние пользователя после перезапуска. Иначе говоря, если у него есть кнопки, значит он не UNREGISTERED, и ему не нужно входить снова. И наоборот, соответственно. Так, у меня есть полноценная авторизация, и при этом нет базы пользователей и накопления информации. Это успех.

    • @АристархИнферно
      @АристархИнферно ปีที่แล้ว +3

      ​@@helpatch Вот уж не для того, чтобы читать комменты от тех, чей рот настолько давно не мыли. Впрочем, в отличие от тебя, я не делаю поспешных выводов -- возможно, конкретно твой засоряют быстрее, может даже несколько раз за день)
      Что же до ответа -- я работаю на множестве языков, и обычно пишу бэкэнд, но человек, который собирался писать фронт для бота покинул проект, так что реализация перешла ко мне по наследству. Вот и решил освоиться в этом.
      PS: ты уж следи за словами, я и без "срача" в комментах умею за пояс заткнуть -- это характерная разница между нами)

  • @ivanpetrov1820
    @ivanpetrov1820 4 หลายเดือนก่อน

    @ntzcoder, а как записать в state.update_data динамический параметр, который меняется? Например: user_name_1, user_name_2 и т.п. То есть я формирую имя в переменной, а потом хочу сохранить значение с этим ключом в FSM.Context.

  • @y18kotov
    @y18kotov 2 ปีที่แล้ว +1

    Отлично. Спасибо!

  • @АнатолийГО-ж2п
    @АнатолийГО-ж2п 2 ปีที่แล้ว

    Есть видео вместо команды form по кнопке запрашивает инфу?

  • @RuVl_13
    @RuVl_13 ปีที่แล้ว +1

    А зачем всё регистрировать через dp? В aiogram3 доступны роутеры, через них все выглядит куда понятнее, но спасибо за урок про FSM, единственное так и нигде не могу найти: если мы заносим или обновляем данные через state.update_data(key=value), то зачем нужен метод state.set_data()?

    • @nztcoder
      @nztcoder  ปีที่แล้ว

      dp это считай корневой (основной) роутер. Можно и роутеры использовать.
      Уже точно не вспомню, но set_data записывает данные удаляя старые. Update_data добавляет к имеющемся данным указанные данные. Вроде так. Поэкспериментируй, потестируй.

  • @trahula
    @trahula ปีที่แล้ว

    кто подскажет как возможно обработать введенный текст. Польтзователь вводит название города и если этот город есть списке городов, то ему отправляется информация из словаря. А если города в списке нет, то выводится сообщение о том, что такого города нет. Саму функцию я написал, перваая часть условия выполняется, а вот вторая(там где город в списке отсутствует), к сожалению мне не удается.

    • @Tmk_est
      @Tmk_est 11 หลายเดือนก่อน

      Укажи часть кода с городами как отдельную функцию, и с помощью if/elif укажи что при невыполнении этой функции (!) выходит текст "Город не найден" или что-то подобное, можешь приписать много действий далее

  • @vitalik3447
    @vitalik3447 2 ปีที่แล้ว

    Спасибо, все работает ! Добавьте пожалуйста в состояние возможность отмены ввода. Т е в видео 3 шага, а если шагов скажем 30, то кнопка отмены или выхода из машины состояний очень бы пригодилась. Также добавьте пожалуйста возможность добавлять медиа контент в машину состояний и сохранение данных из машины состояний в базу SQL

    • @nztcoder
      @nztcoder  2 ปีที่แล้ว

      Для очистки машины состояний можно использовать отдельный хэндлер на команду reset - в функции просто написать await state.clear() и уведомить сообщением пользователя о сбросе состояния.
      Добавлять медиаконтент можно точно также как и любые данные - значением ключа будет file_id отправленного боту файла.
      Пример сохранение данных в базу есть в видео по миддлвари и в сегодняшнем видео по рассылке с помощью телеграм бота. Все что нужно это достать данные из машины состояний - await state.get_data

    • @nztcoder
      @nztcoder  2 ปีที่แล้ว

      На основе видео-уроков на моем канале вы можете сделать это самостоятельно. Крепкую базу я вам дал. Если что-то не получается, то вы можете заказать у меня платную консультацию написав мне в телеграм - t.me/nztcoder
      Или же вступив в клуб - Богатый пайтон разработчик. Подробности на сайте nztcoder.com

  • @Maxlubanclan
    @Maxlubanclan 2 ปีที่แล้ว

    Сделай видео по тому как юзер делает инпут боту и идет поиск по базе данных

    • @nztcoder
      @nztcoder  2 ปีที่แล้ว

      Есть такое видео. Вчера выкатил. Поищи на канале и посмотри.

    • @Maxlubanclan
      @Maxlubanclan 2 ปีที่แล้ว +2

      ​@@nztcoder а можешь тогда разобрать более подробно именно эту тему : как показать InlineKeyboardMarkup кнопки в боте, которые берутся из sqlite3 на каждый новый ряд из таблицы? И чтобы когда пользователь тыкал на них, то открывалась возможность добавить к этому объекту новые значения в колонку?

    • @RuVl_13
      @RuVl_13 ปีที่แล้ว

      @@Maxlubanclan Можно реализовать FSM и во время выполнения хэндлера текущего состояния находить в бд нужный объект и менять его значение из сообщения, а FSM использовать для получения всех изменений, а потом применения их (например: хотим создать человека в бд: получаем имя, фамилию, телефон и только после этого что-то пытаемся записать в бд)

  • @azizbekortikov5728
    @azizbekortikov5728 ปีที่แล้ว

    +

  • @ozxxx0
    @ozxxx0 2 ปีที่แล้ว

    жоска

    • @nztcoder
      @nztcoder  2 ปีที่แล้ว

      Превосходно)