🐍 Канал о программировании на языке Python. Тематические уроки и лайфхаки.
aiogram. Прошлый пост был также переписан под aiogram.
В этом посте мы разберём как создавать и обрабатывать reply кнопки. Их вы видите сразу под строкой ввода сообщения. Чтоб создать кнопки, надо вначале создать объект клавиатуры - types.ReplyKeyboardMarkup(), она принимает на вход аргументы: resize_keyboard - булевый тип, подгоняет высоту клавиатуры до минимума и one_time_keyboard - булевый тип, скрывает клавиатуру после нажатия на её кнопку.
Для удобства работы в будущем, сделаем функцию send_main_keyboard() которая будет принимать на вход текст сообщения и отправлять главную клавиатуру с ней
Чтоб добавить кнопку в клавиатуру, воспользуемся методом keyboard.add(), передав в него текст кнопки. Кнопки можно размещать в один ряд, для этого нужно передать их текста, через запятую.
При нажатии на reply кнопку, Telegram отправляет её текст как обычное сообщение, поэтому нажатия на неё обрабатываем в обработчике сообщений.
Как этот бот выглядит со стороны пользователя можно увидеть на экране телефона в обложке этого поста. В следующих постах, мы реализуем процесс жалобы, а пока можете писать в чате, что вы хотите видеть дальше.pyTelegramBotAPI.
Для начала, нам необходимо зарегистрировать нового бота, для этого нужно написать отцу ботов и заполнить поля которые он спросит (там же можно задать описание, имя, @юзернейм и аватарку). В ответ на заполненную информацию, он пришлёт телеграм бот токен, его необходимо сохранить, т.к это ключ для авторизации бота и взаимодействия с ним.
Для примера, мы подготовили базовый шаблон, который можно использовать при написании своего бота. Он содержит обработчики команд и текстовых сообщений. Для начала работы необходимо установить библиотеку pyTelegramBotAPI (pip install pyTelegramBotAPI, не путать с библиотекой telebot!) и создать объект бота, передав в него токен, который мы получили.
Вызвав функцию bot.polling(), скрипт начинает постоянно запрашивать обновления на серверах Telegram-а и при их наличии, вызывает необходимый обработчик, передав в него объект message, который содержит в себе подробную информацию о полученном сообщении.
В нашем примере, для удобства работы мы сразу записываем основную информацию в переменные user_id (уникальный id пользователя в Telegram), username (уникальный логин пользователя) и text (текст сообщения) и сразу выводим их в консоль вместе с временем получения сообщения.
Далее в примере, мы проверяем присутствует ли сообщение в заготовленных списках и отвечаем по необходимости пользователю с помощью функции bot.send_message(), которая принимает на вход id пользователя и текст сообщения.
Как этот бот выглядит со стороны пользователя можно увидеть на экране телефона в обложке этого поста. В следующих постах, мы рассмотрим сценарии и ветки сообщений, а пока можете задавать вопросы в чате ниже.filter фильтрует элементы итерируемого объекта по заданной функции. Проще говоря, фильтр сохраняет те элементы, для которых функция вернула True.
Функция принимает на вход функцию и итерируемый объект. В примере мы создали функцию is_even которая проверяет число на четность, далее передав функцию в фильтр, мы проверяем список чисел и сохраняем только четные цифры.
#теория #фильтр #filterpip install requests и pip install beautifulsoup4 соответственно.
Далее с помощью метода requests.get получаем главную страницу хабра и передаём её в объект beautifulsoup. Библиотека beautifulsoup позволяет нам с помощью метода select получить список объектов по css-селектору.
Подсматриваем нужные нам селекторы в инспекторе кода браузера и начинаем парсинг. В начале получаем список всех статей. Далее в цикле, также с помощью метода select вытаскиваем нужные нам поля, например название и ссылку. Метод select всегда возвращает список объектов, поэтому если нам нужен только один объект, всегда нужно указать его индекс, например articles[0]. У каждого объекта есть поля и атрибуты, например поле text содержит весь текст в объекте, а в словаре attrs хранятся все атрибуты объекта.
#гайды #библиотеки #парсинг #habrlambda аргументы: выражение, поэтому часто их используют когда нужны безымянные функции на небольшой промежуток времени.
В первом примере, наша функция принимает на вход число и возвращает его квадрат. В следующем примере мы готовим приветствие: для пользователя: функция greetings принимает на вход имя и возвращает приветствие с этим именем. В последнем примере мы проверяем число на нечётность.
#теория #функции #лямбдыstr, int и float. Во втором примере мы преобразовываем строку в число с помощью функции int.
#типы_данных #строки #числаsplit используется для разбиения строк на подстроки по разделителю. Функция принимает два необязательных параметра, разделитель и максимальное количество разбиений.
В первом примере, мы не указываем разделитель и метод разделяет строку по умолчанию, по символу пробела.
Далее, мы указываем разделитель ";" и строка разделяется по этому символу. В последнем примере мы указывает вторым параметром в качестве количества разбиений пятерку и строка разбивается на 5 подстрок + оставшиеся элементы.
#теория #строки #методыbreak применяется для прерывания текущей итерации цикла. В первом примере цикл прерывается на шестой итерации.
Оператор continue прерывает текущую итерацию без остановки всего цикла. Во втором примере, шестая итерация прерывается до вывода числа в консоль и начинается седьмая.
#теория #циклы #break #continuepip install pyinstaller.
Чтоб собрать исполняемый файл нужно запустить команду pyinstaller --one-file main.py, по умолчанию файл собирается с консолью, чтоб отключить её нужно при сборке проекта дописать параметр --no-cosole.
#гайдыcopy, мы делаем глубокое копирование, копируем сам объект и все его дочерние элементы в новые ячейки памяти, поэтому изменения на старом объекте не отражаются.
#теория #копирование