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

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

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

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

Мы привыкли использовать функцию sum() для подсчета суммы элементов в списке.
Но тут немного другая история.

Как видно из кейса, мы передаем в sum два аргумента. Первый - это список со списками. А второй - это список, в который мы все будем собирать.
То есть, если бы наш второй аргумент был НЕ пустым списком, а имел в себе какие-то элементы, то наш финальный результативный список начинался бы как раз с этих элементов.
👍5
‼️Создать базу данных SQLite через Python‼️

В Python для работы с SQLite мы будем использовать модуль sqlite3, который входит в стандартную библиотеку Python. Начнем с импорта модуля и создания соединения с базой данных:

import sqlite3

# Создание соединения с базой данных
conn = sqlite3.connect('mydatabase.db')


После создания соединения мы можем создать таблицы в нашей базе данных. Вот пример создания таблицы "users":

# Создание таблицы "users"
conn.execute('''CREATE TABLE users
(id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL);''')


Вставка данных в базу данных

После создания таблицы мы можем добавить данные в базу данных. Для этого мы можем использовать метод execute() и executemany() для вставки одной или нескольких строк данных соответственно. Вот пример вставки данных в таблицу "users":

# Вставка данных в таблицу "users"
conn.execute("INSERT INTO users (name, age) VALUES ('John Doe', 25)")
conn.execute("INSERT INTO users (name, age) VALUES ('Jane Smith', 30)")
conn.executemany("INSERT INTO users (name, age) VALUES (?, ?)", [('Alice Johnson', 35), ('Bob Brown', 40)])
👍6
🐍 Разбор 👨‍💻

Разберем код построчно:
🌝Создаём переменную со списком [6, 0] и сразу его переворачиваем -> l = [0, 6]
🌝Выводим этот список. На экране [0, 6]
🌝Проходимся по нашему списку через enumrate. Enumeratе это генератор, который выдает следующий елемент списка и его порядковый номер. Первый параметр принимает итерируемый объект.

for i, e in enumerate(['a', 'b', 'c']):
print(i, e) # a 0, b 1, c 2


Второй параметр - это с какого числа начинать отсчет.


for i, e in enumerate(['a', 'b', 'c'], 3):
print(i, e) # a 3, b 4, c 5


🌝Выводим изначальный список. Он выведется два раза тк цикл сработает два раза

Вывод: [0, 6] [0, 6] [0, 6]
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🏆1