Python Hub - сборище Питонистов
1.71K subscribers
657 photos
1 video
37 files
277 links
Уголок счастья для любого питониста.

Сотрудничество или заказы: @leshunist

https://shcoder.dev - студия разработки ShcoderDevelopment

https://t.me/pythonhub_chat - чат
Download Telegram
Python Hub - сборище Питонистов
Photo
Разбор 👨‍💻

Я думаю, что почти все из вас работали/знают, как работать с файловой системой в Python. Фишка этой задачи в том, что сперва мы создаем файл, куда закидываем текст Ben.

Вторым этапом идет добавление (потому что буква 'a') к уже существующему слову Ben слова Big —> BenBig.

Ну а далее мы открываем опять файл на запись через 'w', что означает, что ВСЕ данные в файле будут перезаписаны. —> BenBig удалится, а Moon появится.

Как результат, при чтении мы получим просто слово Moon.
👍3
🖼 Изменение разрешения и расширения файла при помощи библиотеки PIL (Pillow)


➡️ Открытие изображения

Первая команда, которую мы рассмотрим, это открытие изображения. С помощью функции open() из библиотеки PIL вы можете загрузить изображение из файла и сохранить его в переменную. Например, следующий код загрузит изображение с названием "image.jpg":

from PIL import Image

image = Image.open("image.jpg")


После выполнения этого кода, изображение будет загружено и готово к дальнейшей обработке.

➡️ Изменение размера изображения

Вторая команда, которую мы рассмотрим, это изменение размера изображения. Библиотека PIL предоставляет функцию resize(), которая позволяет изменять размер изображения. Например, следующий код изменит размер изображения до 500 пикселей по ширине и 300 пикселей по высоте:

resized_image = image.resize((500, 300))


Вы можете указать любые значения для ширины и высоты в пикселях, чтобы получить нужный размер изображения.

➡️ Сохранение изображения

Третья команда, которую мы рассмотрим, это сохранение изображения. После выполнения всех необходимых операций с изображением, вы можете сохранить его в файл с помощью функции save(). Например, следующий код сохранит измененное изображение в файл с названием "resized_image.jpg":

resized_image.save("resized_image.jpg")


Вы также можете указать другой формат файла, добавив соответствующее расширение к названию файла.

Вот тут можно почитать про примеры, да и в целом полистать доку

https://pillow.readthedocs.io/en/stable/handbook/tutorial.html
👍21🔥1🥰1
Что выдаст код выше?
Anonymous Quiz
9%
0
40%
1
9%
2
8%
3
0%
4
2%
5
19%
Error
13%
Не знаю
👍4
Python Hub - сборище Питонистов
Photo
Разбор 👨‍💻

Вся фишка в функции filter. Я думаю, что из названия и контекста понятно, что мы можем вызывать какую-то свою функцию для фильтрации итерируемого объекта. Здесь мы передали список на фильтрацию, получили объект типа filter, после чего привели его к списку и высчитали длину.

По какому алгоритму выбирали числа? Только четные И отрицательные —> -2.
У нас только одно такое число, так что и ответ: 1.
👍3
🔥Pyrogram🔥 - что это такое и с чем его едят?

🔥😉😛😍🙃😅😍😀😇 (в простонародье "Пирог") — это мощная библиотека для создания так называемых User Ботов для 😀 телеграмма.

🤖 ЮзерБоты - это скрипты которые работают от лица личного аккаунта и могут выполнять все тоже что и человек.

😀Например, можно запрограммировать автоответчик, который будет автоматически отвечать на определенные сообщения.

Но в основном ЮзерБоты используют как дополнения к телеграму, например, встроенный калькулятор. Вы скорее всего уже видели их. Кто-то пишет комманду, скажем, .calc 2+2, а скрипт все считает и, изменяя сообщение, выводит ответ.

😀 Именно такого юзербота мы и будет создавать в следующих постах, так что 📣подписывайся на канал, и включай 🔔уведомления!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍4
🔥Чтож, поехали! 🎉

😉🟣😍🙃😅😍😀😇🤪🥶🤨

📦 Начнем с самой базы - установки. В Консоли пишем
python -m pip install pyrogram

🚀 Для быстрой работы пирога лучше еще установить
python -m pip install TgCrypto


⌨️Теперь можно и код писать😉

#️⃣Импорт
Импорт тут максимально простой. Просто из pyrogram импортируем модули через from / import:
from pyrogram import Client # потом ещё будем добавлять


#️⃣Создание объекта бота
Как и в любом другом боте нам нужен объект, с помощью которого уже и осуществляется работа.
В пироге это екземпляр принято называть app.
В него нужно передать
🌝Название, строка
🌝API_ID, строка либо число (int)
🌝API_HASH, строка
Про API_ID и API_HASH поговорим чуток позже.
app = Client("MyFirstUserBot", api_id, api_hash)


#️⃣Обработчики
Обработчики (хендлеры, handler) это функции, которые срабатывают при определенном событии, например, при новом сообщении.
В Pyrogram они в виде декорратора который начинается на "on" (с англ - при), наример @app.on_message, @app.on_chat_join_request.
В декоратор следует передать фильтр, по которому будут выбираться случаи когда нужно чтобы обработчик сработал.
В библиотеке есть встроенные фильтры, их надо импортировать, но их можно и самому написать (научимся позже)


Как я говорил в предыдущем посте, нам нужно обрабатывать команды. Для этого, логично, надо создать обработчик сообщений, с фильтром, что это команда, и то что написали ее мы (мы ведь не хотим чтобы другие командовали вашим ботом?)
@app.on_message(filters.command(["start"], prefixes=".") & filters.me)
async def start(_, msg):
pass


У обработчиков должен быть строгий порядок - от конкретных (например, команды), до более общих (всех сообщений)

Правильный порядок хендлеров сообщений должен выглядеть так:
Команды
Сообщения с какими-то триггерами (например, если в слове есть слово "привет")
Все сообщения


#️⃣Запуск
Обработчики прописали, теперь пора это все дело запустить!
Тут всё просто:
app.run()


#️⃣API_ID / API_HASH
И, самое главное, без чего наш код ни в коем случае не заработает - данные телеграмма.
Как я говорил выше, ЮзерБота, как бы входит в твой аккаунт. Ему конечно же нужны данные. Это и есть api_id и api_hash

✈️ Заходим на сайт https://my.telegram.org/apps
пишем свой номер телефона, на котором тг, и вводим код.
‼️Это безопасно, это сайт телеграмма
Далее там будет бланк, вы его заполняете. Данные можете писать какие угодно, они ни на что не влияют. Вы должны дойти то страницы с конфигурацией приложение (App Configuration). Там копируете app api_id и app api_hash, и вставляете в код, там где создавали екземпляр бота (app = ...)

👩‍💻👩‍💻👩‍💻👩‍💻
👩‍💻👩‍💻👩‍💻👩‍💻
from pyrogram import Client, filters

app = Client("тут", "ваши", "данные")

@app.on_message(filters.commands(["start"], prefixes=".") & filters.me)
async def start(_, msg):
pass

app.run()
#️⃣Итоги
Сегодня мы разобрались в базовой структуре ЮзерБота: поговорили про нужные классы, обработчики, их порядок, API данные. В следующем посте поговорим про отправку сообщений, редактирование, итп, так что 📣подписывайся на канал, и включай 🔔уведомления!

🔄: для тех кто не понял - 🔥 это лого пайрограма
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3
🔥😉🟣😍🙃😅😍😀😇#️⃣🧐

⚡️Так, мы уже умеем создавать обработчики, теперь надо научится что-то делать, а не только принимать.

🟢В пироге функции отправки чего-либо начинаются на "send" - app.send_message, например.

🖥Чтобы детально разобраться в какой-то функции - надо заглянуть в документацию! Кстати, у pyrogram она очень удобная и понятная

🔗 https://docs.pyrogram.org 🔗

🔍 Нам нужен метод который отвечает за отправку сообщения.💬 В документации слева в менюшке ищем Available Methods (Доступные методы) - далее - send_message (отправить сообщение).

👀 И видим полное описание этого метода, что он делает, какие параметры принимает, что возвращает, и еще и пример есть.

Сразу под названием видим описание метода, то что он делает
Send text messages.

перевод:
(отправляет текстовое сообщение)


📃Ниже список параметров которые нужно в него передать. Давайте его разберем.

chat_id (int | str) – Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use “me” or “self”. For a contact that exists in your Telegram address book you can use his phone number (str).

перевод:
(chat_id (int | str) — уникальный идентификатор (int) или имя пользователя (str) целевого чата. Для вашего личного облака (сохраненных сообщений) вы можете просто использовать «me» или «self». Для контакта, который существует в вашей адресной книге Telegram, вы можете использовать его номер телефона (str))

В самое первое — название параметра далее в скобках тип данных. "|" - это "или", "либо". Если в скобках есть оptional, то это значит что этот аргумент не обязательный.
И последнее - описание.

🧑‍⚕️Из цитаты нам становится понятно, что chat_id принимает ID чата в виде строки либо числа, либо номер телефона, либо "me"|"self" если надо отправить себе в избранное.

Второй параметр разберите сами
text (str) – Text of the message to be sent.

text (str) – Текст отправляемого сообщения.


🌱тут совсем легко, так что, думаю, все справились, сюда надо передать строку с отправляемым текстом

В итоге, отправлять сообщения надо так:
await app.send_message(chat_id, "text")


‼️ Обратите внимание, что в начале я поставил await. Если вы новичок - то просто ставьте перед методами await и все, а если вы уже что-то знаете, то объяснять не надо 🔮

🟠Bound Methods
🔍Самые внимательные заметили, что в документации крок Available Methods есть еще Bound Methods (Связанные методы)
Их фишка в том, что это методы сообщений которые мы получаем из хендлера (параметр msg). Например, чтобы изменить сообщение, не обязательно писать
app.edit-бла-бла-бла, а можно просто msg.edit(). В него просто передаем строку и готово!

📝 Задание: Пользуясь документацией, выясните что делает msg.reply() и какие параметры он принимает.

🧠 Вернёмся в редактор кода
Теперь вспоминаем все что учили и соберём знания вместе. Сделаем так, чтобы при написании команды .start сообщение изменялось на Python Pyrogram!

🐍🔥
from pyrogram import Client, filters

app = Client("UserBot", 123, "abc")

@app.on_message(filters.command(["start"], prefixes=".") & filters.me)
async def start(_, msg):
await msg.edit("Python Pyrogram!")

app.run()


😶Итоги
Сегодня мы научились работать с документацией, и научились изменять сообщения. А следующем посте научимся получать из сообщения данные - его текст, отправитель, итп. Так что 📣подписывайся на канал, и включай 🔔уведомления!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2👨‍💻2🤯1
🏆Первая история на канале 😊

https://t.me/pythonhub001/s/1

Хотите больше сторисов? Голосуйте за наш канал:
t.me/pythonhub001?boost
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Python Hub - сборище Питонистов
Photo
Разбор 👨‍💻

Как работает zip? То есть функция берёт на вход несколько списков и создаёт из них список (в Python 3 создаётся не list, а специальный zip-объект) кортежей, такой, что первый элемент полученного списка содержит кортеж из первых элементов всех списков-аргументов.
Пример:
s = 'abc'
>>> t = (10, 20, 30)
>>> u = (-5, -10, -15)

>>> list(zip(s,t,u))
[('a', 10, -5), ('b', 20, -10), ('c', 30, -15)

Я думаю, что такой пример будет вполне хорош для описания
👍10
👀 Магия метода str.join()

🪄В мире Python есть такая штука — str.join(). Это как волшебная палочка, которая соединяет слова, фразы или элементы списка в одну большую строку. Представьте себе, что вы устраиваете вечеринку и хотите объединить всех друзей в круг. str.join() — это как магия, которая собирает всех вместе!

🔍Давайте посмотрим, как это работает на практике:

# Допустим, у нас есть список слов
words = ["Привет", "мир", "я", "Python"]

# И мы хотим объединить их в предложение
sentence = ' '.join(words)
print(sentence)


🖥 В результате этого кода мы получим строку: "Привет мир я Python".

Как это работает?

➡️ join() берет список (words в нашем случае) и использует пробел ' ' в качестве "клея", чтобы соединить все слова в одну строку.
В результате каждый элемент списка становится частью большой строки, разделенной пробелами или любым другим символом, который мы укажем перед join().

👨‍💻 Еще один пример:

users = ["RimMirK", "Anuke", "compuser"]

result = ', '.join(users)
print(result) # "RimMirK, Anuke, compuser"


😎 Тут мы соединили пользователей с через запятую
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Forwarded from RimMirK
🔥😉🟣😍🙃😅😍😀🟣 🥶🤓

🗣️ В прошлый раз я обещал научить вытаскивать данные из сообщения, этим и займёмся!

🔍Давайте с начала просто посмотрим из чего состоит получаемый объект

@app.on_message(filters.command(["start"], prefixes="."))
async def start(_, msg):
print(msg)
👀В результате увидим много всяких данных. Самые часто используемые - id, text, from_user, chat reply_to_message(сообщение на которое ответили).

🖥 Чтобы достать определенное значение надо перечислить ключи к нему через точку:

msg.text
msg.chat.id
msg.reply_to_message.date

🖥 Теперь попробуем на практике, поприветствуем новых участников в группе

@app.on_message(filters.chat([123,456]) & filters.new_chat_members)
async def welcome(_, msg):
new_members = [u.mention for u in msg.new_chat_members]
text = 'Привет, ' + ", ".join(new_members) + "!"
await msg.reply(text, True disable_web_page_preview=True)
👨‍💻 Разберем этот код
🌝Создаем Декоратор:
🌝1️⃣ Из определенных чатов ([123,456])
🌝2️⃣ Для новых участников
🌝Создаем функцию
И тут начинается самое то, что нас интересует
🌝Перебираем список новых участников, и из них берем параметр mention - имя с ссылкой.
🌝Формируем текст сообщения, соеденяя список из новый участников с помощью *str.join()* (о нем мы говорили в прошлом посте 👆)
🌝Отвечаем на сообщение ответом и без предпросмотора ссылок

#️⃣Итог
Мы научились доставать данные из сообщения и вспомнили фильтры с обработчиками.

👋До новых встреч!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1🤯1