Python Telegram Bot
Відкрити в Telegram
☑️ Заявки принимаются автоматически! Обучаем созданию и продвижению чат-ботов в телеграм. ссылка: @pybotg связь: @oksi_young https://telega.in/channels/+Mj_twnrYuAxkZmUy/card/?r=BrHKEWMo
Показати більше5 003
Підписники
Немає даних24 години
-67 днів
+1730 день
Архів дописів
5 003
Доступ в интернет
Имеется ряд модулей для доступа в интернет и обработки интернет протоколов. Два из самых простых:
urllib.request для получения данных из URL-адресов и smtplib для отправки почты. (Обратите внимание, что во втором примере требуется сервер почты, запущенный на локальном компьютере.
#python_обучение5 003
В этих постах мы разберем примеры форматирования текста.
Несмотря на то, что есть 2 варианта форматирования текста -
Markdown и HTML, мы настоятельно рекомендуем использовать HTML. В Markdown есть много проблем, в отличии от HTML, в котором текст форматируется с помощью тегов.
Кто встречался с HTML, тот знает, что такое теги(проще говоря, вы закрываете текст с одной стороны открывающим, а с другой закрывающим спец. символами, которые понимает браузер). Например, вы хотите создать жирный текст. Для этого вам нужно написать: <b>Какой то текст</b>. В данном примере <b> - открывающий тег, </b> - закрывающий. Раз уж заговорили о начертаниях шрифта, то есть тег <i> - курсив, <u> - подчеркнутый текст, <s> - зачеркнутый текст и т.д. Все эти теги являются парными и нуждаются в закрывающем теге.5 003
Математика
Модуль
math предоставляет доступ к базовым функциям библиотеки C для математики с плавающей запятой Код 1
Модуль random предоставляет инструменты для случайного выбора Код 2
Модуль statistics вычисляет основные статистические свойства (среднее значение, медиана, дисперсия и т.д.) числовых данных Код 3
Проект SciPy содержит много других модулей для числовых вычислений.
#python_обучение5 003
Финал поста выше
И теперь создаем хендлер для отлавливания номеров:
@dp.message_handler(content_types=type.ContentType.CONTACT) async def get_contact(message: types.Message): contact = message.contact await message.answer(f"Спасибо, {contact. full_name}\n" f"Ваш номер {contact.phone_number} был получен и передан менеджеру. Ожидайте", replay_markup=ReplayKeyboardRemove()).
Далее, импортируем все хендлеры в __init__ и перезапускаем бота. Хендлер на команду collback был немного неправильным. Вместо await message.answer_location нужно написать просто await message.answer. На этом работа с контактами и геопозицией закончена, все прекрасно работает.5 003
Продолжение к посту выше
В данный файл мы копируем то, что было в файле
get_location.py, но меняем "Местоположение" на "Контакт" и request_location на request_contact. Для контактов, так же, будет отдельный хендлер get_contact.py, где мы пропишем хендлеры для запроса контакта на обратный звонок и для передачи информации хендлеру.
Пишем: @dp. message_handler(Command("callback")) async def share_number(message: types.Message): await message.answer_location(f"Здравствуйте, {message.from_user.full_name}.\n" f"Для того, чтобы наш менеджер вам перезвонил поделитесь своим номером телефона " f"нажав на кнопку ниже!", replay_murkup=contact_buttons.Keyboard). На этом хендлер закончен. В следующем посте напишем хендлер для отлавливания номера пользователя.5 003
F#CK IT!🤬
Skillbox, Geekbrains и другие уже открыто посылают этих хакеров во всем известном направлении. Ниже можете ознакомиться, что нового они достали:
SkillBox.Zip (562 гб курсов)
GeekBrains.Rar (433 гб курсов)
Otus.Z01 (456 гб курсов)
Stepic.zip (233 гб курсов)
SkillFactory.rar (234 гб курсов)
Udemy.rar (556 гб курсов)
Хекслет.z01 (453 гб курсов)
Бесплатный доступ только в течении 24 часов, поспеши ☝️
5 003
Продолжение к посту выше
Дополним код до ответа пользователю:
text = "\n\n".join([text_format.format(shop_name=shop_name, url=url, distance=distance for shop_name, distance, url, shop_location in closest_shops]).
Теперь, допишем ответ пользователю: f"{text}, disable_web_page_preview=True". Помимо этого, мы можем еще отправить пользователю точную локацию прямо в телеграме: for shop_name, distance, url, shop_location in closest_shops: await message.answer_location(latitude=shop_location["lat"], longitude=shop_location["lon"],).
Далее, это все можно протестировать и посмотреть. В следующем посте разберем как отправлять контакты, а в этом сделаем некоторое подготовительное действие. В папке keyboards/default создадим файл contact_button.py.5 003
Ошибка при перенаправлении вывода и завершении программы
Модуль
sys также содержит атрибуты для stdin, stdout и stderr. Последнее полезно для передачи предупреждений и сообщений об ошибках, чтобы сделать их видимым даже при перенаправлении stdout Код 1
Самый прямой способ завершить сценарий — использовать sys.exit().
Модуль re предоставляет инструментарий для работы с регулярными выражениями для нетривиальной обработки текста. С помощью регулярных выражений можно создавать выразительные и оптимизированные решения для поиска и обработки строк Код 2.
Когда требуются более простые возможности, методы строковых объектов предпочтительнее, т.к. их легче читать и отлаживать Код 3
#python_обучение5 003
Ошибка при перенаправлении вывода и завершении программы
Модуль
sys также содержит атрибуты для stdin, stdout и stderr. Последнее полезно для передачи предупреждений и сообщений об ошибках, чтобы сделать их видимым даже при перенаправлении stdout Код 1
Самый прямой способ завершить сценарий — использовать sys.exit().
Модуль re предоставляет инструментарий для работы с регулярными выражениями для нетривиальной обработки текста. С помощью регулярных выражений можно создавать выразительные и оптимизированные решения для поиска и обработки строк Код 2.
Когда требуются более простые возможности, методы строковых объектов предпочтительнее, т.к. их легче читать и отлаживать Код 3
#python_обучение5 003
Продолжение к посту выше
Теперь, возвращаемся в файл get_location.py и импортируем нашу клавиатуру. Далее, создаем хендлер на обработку этого события:
@dp.message_handler(content_types=types.ContentType.LOCATION) async def get_location(message: types.Message): location = message.location latitude = location.latitude longitude = location.longitude.
Теперь, мы выбираем ближайший магазин(продолжаем хендлер): closet_shop = choose_shortest(location). Далее, выведем подробную информацию о магазине: text_format = "Название: {shop_name}. Google\n Расстояние до него: {distance:.1f} км.". И ответим пользователю: await message.answer(f"Спасибо.\n" f"Latitude = {latitude}\n" f"Longitude = {longitude}\n\n").
С ответом мы немного поспешили, в следующем посте немного допишем код, который находится до ответа пользователю5 003
Нейросети заменят джунов, поэтому нужно становиться сеньорами
Python | Notes — отличный инструмент для разработчика любого уровня, который сделает кодинг легким делом
Овладей Python и упорядочи рабочий процесс с помощью полной и актуальной коллекции шпаргалок
IT для чайников — доступные уроки помогут погрузиться в мир кодинга и развить востребованные навыки программирования на Python, Java, С++ и других языках с нуля
Noob to senior публикует видеоуроки, которые помогут начинающим получить упорядоченное обучение и приблизиться к уровню сеньора в кратчайшие сроки
Подпишись и получи преимущество, которое тебе так сейчас нужно
5 003
Продолжение к посту выше
Теперь, возвращаемся в файл get_location.py и импортируем нашу клавиатуру. Далее, создаем хендлер на обработку этого события:
@dp.message_handler(content_types=types.ContentType.LOCATION) async def get_location(message: types.Message): location = message.location latitude = location.latitude longitude = location.longitude.
Теперь, мы выбираем ближайший магазин(продолжаем хендлер): closet_shop = choose_shortest(location). Далее, выведем подробную информацию о магазине: text_format = "Название: {shop_name}. Google\n Расстояние до него: {distance:.1f} км.". И ответим пользователю: await message.answer(f"Спасибо.\n" f"Latitude = {latitude}\n" f"Longitude = {longitude}\n\n").
С ответом мы немного поспешили, в следующем посте немного допишем код, который находится до ответа пользователю5 003
Продолжение к посту выше
А теперь, мы уже начнем создавать наши хендлеры. В папке
users создаем файл get_lacation.py. Здесь мы начинаем создавать хендлер: @dp.message_handler(Command("show_on_map")) async def show_on_map(message: types.Message): await message.answer(f"Здравствуйте, {message.from_user.full_name}.\n", f"Для того, чтобы показать ближайшие магазины отправьте нам свою локацию", f"нажав на кнопку!", reply_markup=location_buttons.keyboard).
Теперь нам нужно создать эти кнопки, которые, как обычно, будут находиться в keyboards/default. Переходим туда и создаем файл location_buttons.py. В самом файле мы создаваем клавиатуру с названием keyboard и заполняем ее: keyboard = ReplyKeyboardMarkup(keyboard=[KeyboardButton(text="Местоположение", request_location=True)])5 003
Аргументы командной строки
Сценарии общего назначения часто нуждаются в аргументах командной строки. Эти аргументы хранятся в атрибуте
argv модуля sys в виде списка. Например, при запуске python demo.py one two three в командной строке шелла для сценария demo.py будет выведен Код 1
Модуль argparse обеспечивает более сложный механизм обработки аргументов командной строки. Следующий сценарий извлекает одно или несколько имен файлов и дополнительное количество отображаемых строк Код 2
При запуске в командной строке с python top.py --lines=5 alpha.txt beta.txt сценарий устанавливает для args.lines значение 5 и args.filenames в ['alpha.txt', 'beta.txt']
#python_обучение