Python_Scripts
8.22K subscribers
1.01K photos
5 videos
674 files
1.55K links
Скрипты 💾 на Python 🐍
- боты 🛠
- парсеры📁
- чекеры🔍
- автоматизация🔧
- многое другое💻

Ваши предложения📝 @cmd_dark @CMD_Vega
Download Telegram
📌 Простой индикатор "страха и жадности"👨‍💻
import requests
import numpy as np

def get_market_data():
"""Получает данные о 24-часовой статистике торговых пар с Binance."""
url = "https://api.binance.com/api/v3/ticker/24hr"
response = requests.get(url)
if response.status_code == 200:
return response.json()
else:
print("Ошибка подключения к Binance API.")
return []

def calculate_fear_greed_index(data):
"""Рассчитывает индикатор страха и жадности."""
price_changes = []
volumes = []

for pair in data:
price_change = float(pair['priceChangePercent'])
volume = float(pair['quoteVolume'])

price_changes.append(price_change)
volumes.append(volume)

# Нормализуем данные
avg_price_change = np.mean(price_changes)
avg_volume = np.mean(volumes)

fear_index = 50 - (avg_price_change / 2) # Чем ниже, тем больше страха
greed_index = (avg_volume / np.max(volumes)) * 50 # Чем выше объем, тем больше жадности

total_index = max(0, min(100, fear_index + greed_index)) # Суммируем в пределах [0, 100]
return total_index

def main():
print("Индикатор страха и жадности на основе Binance...")
data = get_market_data()
if data:
index = calculate_fear_greed_index(data)
print(f"Текущий индекс страха и жадности: {index:.2f}/100")
if index < 25:
print("Рынок в зоне страха. Возможно, это хорошее время для покупки.")
elif index > 75:
print("Рынок в зоне жадности. Будьте осторожны с покупками.")
else:
print("Рынок сбалансирован.")
else:
print("Не удалось получить данные для расчета индикатора.")

if __name__ == "__main__":
main()

📌 Подпишись  Python_Scripts❗️
🔥13👍52🤩1
🚀 Полезные библиотеки Python

💾 PyWebIO

📌 Библиотека Python, для создания интерактивного интерфейса прямо в браузере без необходимости создания полноценного веб-приложения.

Она позволяет взаимодействовать с пользователями через текстовые вводы, формы и графические элементы.

Особенности:

- Быстрое создание интерактивного интерфейса.

- Не требует знаний HTML/CSS.

- Подходит для создания интерактивных скриптов и прототипов.

⚙️ Установка 👇👇👇

pip install pywebio


📁 Документация

#библиотеки

📌 Подпишись Python_Scripts ❗️
6👍6
SpamBot-main.zip
26.1 KB
📌 Скрипт автоматической рассылки сообщений и накрутки участников чатов в Telegram.

💻  ЯП:  Python 3.11+🐍
💾  Модули: pyTelegramBotAPI, telethon, pandas
📂  База данных: sqlite3

📌 Скрипт помогающий оперировать множеством аккаунтов Telegram для выполнения определённых задач, таких как рассылка сообщений, накрутка участников чатов и постановка реакций, поддерживающий личные пространства для многопользовательского использования.

Программа состоит из двух элементов: консольного приложения и Telegram-бота, выступающего в роле удобного интерфейса редактирования рассылаемых сообщений.

📌 Вся информация приведена исключительно в ознакомительных целях❗️❗️❗️

#telegram

📌
Подпишись  Python_Scripts❗️
👍93🔥2🎉1
📌 Анализ баланса ордеров (Order Book Imbalance) на Binance.
Помогает трейдерам оценить давление покупателей или продавцов на рынке.👨‍💻
import requests

def get_order_book(symbol, limit=100):
"""
Получает стакан ордеров для указанной торговой пары.
"""
url = f"https://api.binance.com/api/v3/depth?symbol={symbol}&limit={limit}"
response = requests.get(url)
if response.status_code == 200:
return response.json()
else:
print(f"Ошибка получения стакана ордеров для {symbol}.")
return None

def analyze_order_book(order_book):
"""
Анализирует дисбаланс между заявками на покупку и продажу.
"""
bids = order_book['bids'] # Покупки
asks = order_book['asks'] # Продажи

# Суммируем объемы заявок
total_bid_volume = sum([float(bid[1]) for bid in bids]) # bid[1] = объем
total_ask_volume = sum([float(ask[1]) for ask in asks]) # ask[1] = объем

imbalance = (total_bid_volume - total_ask_volume) / (total_bid_volume + total_ask_volume) * 100

return total_bid_volume, total_ask_volume, imbalance

def main():
pair = input("Введите торговую пару (например, BTCUSDT): ").strip().upper()
print(f"Получение стакана ордеров для {pair}...")
order_book = get_order_book(pair)

if order_book:
bid_volume, ask_volume, imbalance = analyze_order_book(order_book)
print(f"\nАнализ стакана для {pair}:")
print(f"Общий объем покупок (bids): {bid_volume:.2f}")
print(f"Общий объем продаж (asks): {ask_volume:.2f}")
print(f"Дисбаланс: {imbalance:.2f}%")

if imbalance > 10:
print("Рынок перекуплен (давление покупателей).")
elif imbalance < -10:
print("Рынок перепродан (давление продавцов).")
else:
print("Рынок сбалансирован.")
else:
print("Не удалось получить данные стакана ордеров.")

if __name__ == "__main__":
main()

📌 Подпишись  Python_Scripts❗️
🔥102
🚀 Полезные библиотеки Python

💾 Selenium-wire

📌 Расширение для библиотеки Python - Selenium, которое добавляет возможность перехвата и модификации HTTP-запросов и ответов во время автоматизации браузера.

Особенности:

- Подходит для анализа сетевого трафика.

- Возможность модификации запросов перед отправкой.

- Совместимость с популярными веб-драйверами.

⚙️ Установка 👇👇👇

pip install selenium-wire


📁 Документация

#библиотеки

📌 Подпишись Python_Scripts ❗️
👍6🔥43
WebScrapper-main.zip
450.1 KB
📌 Скрипт парсер

💻  ЯП:  Python 3.11+🐍
💾  Модули: pyrogram, bs4, requests, html5lib
📂  База данных: -

📌 Скрипт простой, мощный и универсальный Telegram бот для парсинга, разработанный для упрощения процесса извлечения данных с веб-сайтов.

Он имеет удобный интерфейс с меню и поддерживает широкий спектр опций извлечения данных, включая необработанный HTML, элементы HTML, абзацы, ссылки, аудио и видео.

📌 Вся информация приведена исключительно в ознакомительных целях❗️❗️❗️

#telegram

📌
Подпишись  Python_Scripts❗️
👍14🔥103👏2
📌 Уровни поддержки и сопротивления для выбранного актива используя публичное API Bybit👨‍💻
import requests
import pandas as pd

# Константы
BASE_URL = "https://api.bybit.com/v5/market"
SYMBOL = "BTCUSDT" # Торговая пара
CATEGORY = "spot" # Тип рынка: spot, linear, inverse
KLINE_LIMIT = 200 # Количество свечей для анализа
KLINE_INTERVAL = "60" # Интервал свечей: 1, 3, 5, 15, 60, D, W, M

def get_historical_data():
"""Получить исторические данные (Kline)"""
url = f"{BASE_URL}/kline"
params = {
"category": CATEGORY,
"symbol": SYMBOL,
"interval": KLINE_INTERVAL,
"limit": KLINE_LIMIT
}
response = requests.get(url, params=params)
if response.status_code == 200:
return response.json()["result"]["list"]
else:
raise Exception(f"Ошибка получения данных Kline: {response.status_code}, {response.text}")

def get_current_ticker_data():
"""Получить текущие данные тикера"""
url = f"{BASE_URL}/tickers"
params = {
"category": CATEGORY,
"symbol": SYMBOL
}
response = requests.get(url, params=params)
if response.status_code == 200:
return response.json()["result"]["list"][0]
else:
raise Exception(f"Ошибка получения данных тикера: {response.status_code}, {response.text}")

def calculate_support_resistance(klines):
"""Вычислить уровни поддержки и сопротивления"""
data = [
{"time": kline[0], "high": float(kline[2]), "low": float(kline[3])}
for kline in klines
]
df = pd.DataFrame(data)
support_level = df["low"].min() # Минимальная цена
resistance_level = df["high"].max() # Максимальная цена
return support_level, resistance_level

def main():
try:
# Получение исторических данных
klines = get_historical_data()
# Расчет уровней поддержки и сопротивления
support, resistance = calculate_support_resistance(klines)
print(f"Уровень поддержки: {support}")
print(f"Уровень сопротивления: {resistance}")
# Получение текущих данных тикера
ticker_data = get_current_ticker_data()
print(f"Последняя цена: {ticker_data['lastPrice']}")
except Exception as e:
print(f"Ошибка: {e}")

if __name__ == "__main__":
main()

📌 Подпишись  Python_Scripts❗️
6🔥6
🚀 Полезные библиотеки Python

💾 PyWebDAV3

📌 Библиотека Python для взаимодействия с серверами WebDAV, что позволяет управлять файлами и папками на удалённых серверах через HTTP. WebDAV часто используется для облачного хранения, управления файлами на серверах и совместного использования данными.

Ключевые возможности:

1. Клиент WebDAV:

- Загрузка, скачивание, удаление файлов.

- Создание и удаление каталогов.

- Получение метаинформации о файлах (размер, дата изменения и т. д.).

2. Сервер WebDAV:

- Настройка собственного WebDAV-сервера для управления файлами.

3. Поддержка аутентификации:

- Поддержка HTTP Basic Auth для подключения к защищённым серверам.

4. Кроссплатформенность:

-Работает на всех платформах, где поддерживается Python.

⚙️ Установка 👇👇👇

pip install PyWebDAV3


📁 Документация

#библиотеки

📌 Подпишись Python_Scripts ❗️
7👍4
YouTube-Telegram-Notification-Bot-main.zip
18.1 KB
📌 Скрипт мониторинг YouTube каналов

💻  ЯП:  Python 3.11+🐍
💾  Модули: requests , pyTelegramBotAPI
📂  База данных: -

📌 Скрипт Telegram бот который отслеживает каналы YouTube и отправляет мгновенные уведомления в группы Telegram при загрузке новых видео. Идеально подходит для менеджеров сообществ и создателей контента, которые хотят держать свою аудиторию в курсе событий.

📌 Вся информация приведена исключительно в ознакомительных целях❗️❗️❗️

#telegram

📌
Подпишись  Python_Scripts❗️
👍152
📌 Отслеживание резких изменений цены токена(price alert) используя публичное API Bybit👨‍💻
import requests
import time

# Константы
BASE_URL = "https://api.bybit.com/v5/market/tickers"
SYMBOL = "BTCUSDT" # Торговая пара
CATEGORY = "spot" # Тип рынка
CHECK_INTERVAL = 10 # Интервал проверки цены (в секундах)
THRESHOLD_PERCENT = 1 # Порог изменения цены (в процентах)

def get_current_price():
"""Получить текущую цену с API Bybit"""
params = {
"category": CATEGORY,
"symbol": SYMBOL
}
response = requests.get(BASE_URL, params=params)
if response.status_code == 200:
data = response.json()["result"]["list"][0]
return float(data["lastPrice"])
else:
raise Exception(f"Ошибка API: {response.status_code}, {response.text}")

def main():
print(f"Начинаем отслеживать резкие изменения цены для {SYMBOL}...")
previous_price = get_current_price()
print(f"Начальная цена: {previous_price}\n")

while True:
try:
current_price = get_current_price()
price_change = ((current_price - previous_price) / previous_price) * 100

# Если изменение цены превышает порог
if abs(price_change) >= THRESHOLD_PERCENT:
print(f"🔔 Резкое изменение цены!")
print(f"Старая цена: {previous_price}, Новая цена: {current_price}")
print(f"Изменение: {price_change:.2f}%\n")
previous_price = current_price # Обновляем предыдущую цену

time.sleep(CHECK_INTERVAL)

except Exception as e:
print(f"Ошибка: {e}")
time.sleep(CHECK_INTERVAL)

if __name__ == "__main__":
main()

📌 Подпишись  Python_Scripts❗️
8🔥5👍4
🚀 Полезные библиотеки Python

💾 WeasyPrint

📌 Библиотека Python, которая преобразует HTML и CSS в PDF-документы или изображения.

Позволяет создавать красивые отчёты, инвойсы, письма и другие документы, которые можно стилизовать с помощью стандартных веб-технологий.

Ключевые возможности:

1. Конвертация HTML и CSS в PDF:
Полная поддержка HTML5 и большинства CSS3 (включая шрифты, цвета, таблицы и многое другое).

2. Создание изображений:
Поддерживает экспорт документа в формате PNG.

3. Поддержка сложных макетов:
Работа с таблицами, вложенными элементами и несколькими страницами.

4. Поддержка Unicode и RTL-текста:
Работает с различными языками, включая те, которые читаются справа налево (например, арабский или иврит).

5. Интеграция с Python-программами:
Можно динамически генерировать PDF-документы из данных.

⚙️ Установка 👇👇👇

pip install weasyprint


📁 Документация

#библиотеки

📌 Подпишись Python_Scripts ❗️
👍102
TGgifts-buyer-master.zip
32.2 KB
📌 Скрипт автоматизированной отправки подарков

💻  ЯП:  Python 3.11+🐍
💾  Модули: pyrofork, asyncio
📂  База данных: -

📌 Скрипт продвинутый Telegram юзербот для автоматизированной отправки подарков с динамическими ценовыми диапазонами и саплаем. Поддерживает как лимитированные, так и обычные подарки с настраиваемыми правилами отправки.

Возможности:

- Динамическое количество подарков на основе ценовых диапазонов;
- Мониторинг лимитов саплая;
- Поддержка нескольких языков (EN/RU/UK);
- Автоматическое обнаружение подарков;
- Настраиваемые задержки и интервалы;
- Поддержка нескольких получателей;
-Фильтрация по цене.

📌 Вся информация приведена исключительно в ознакомительных целях❗️❗️❗️

#telegram

📌
Подпишись  Python_Scripts❗️
🔥8👍31👏1
📌Поиск уровня с максимальным объёмом в стакане используется публичное API Bybit👨‍💻
import requests

# Константы
BASE_URL = "https://api.bybit.com/v5/market/orderbook"
SYMBOL = "BTCUSDT" # Торговая пара
CATEGORY = "spot" # Тип рынка

def get_order_book():
"""Получить данные стакана (Order Book)"""
params = {
"category": CATEGORY,
"symbol": SYMBOL
}
response = requests.get(BASE_URL, params=params)
if response.status_code == 200:
return response.json()["result"] # Данные стакана
else:
raise Exception(f"Ошибка API: {response.status_code}, {response.text}")

def find_max_volume_levels(order_book):
"""Найти уровни с максимальными объёмами для Bid и Ask"""
bids = order_book["b"] # Покупки (Bid)
asks = order_book["a"] # Продажи (Ask)

# Находим цену с максимальным объёмом
max_bid = max(bids, key=lambda x: float(x[1])) # x[1] — объём
max_ask = max(asks, key=lambda x: float(x[1])) # x[1] — объём

return max_bid, max_ask

def main():
try:
print(f"Анализ стакана для {SYMBOL}...\n")

# Получаем данные стакана
order_book = get_order_book()

# Находим уровни с максимальными объёмами
max_bid, max_ask = find_max_volume_levels(order_book)

# Выводим результаты
print("Максимальный объём на покупку (Bid):")
print(f"Цена: {max_bid[0]}, Объём: {max_bid[1]}")
print("\nМаксимальный объём на продажу (Ask):")
print(f"Цена: {max_ask[0]}, Объём: {max_ask[1]}")

except Exception as e:
print(f"Ошибка: {e}")

if __name__ == "__main__":
main()

📌 Подпишись  Python_Scripts❗️
🔥11👍31
🚀 Полезные библиотеки Python

💾 Hypothesis

📌 Библиотека Python, для автоматизации тестирования кода. Она генерирует тестовые случаи автоматически на основе заданных условий (свойств) и проверяет, выполняются ли они. Этот подход позволяет находить сложные и редкие ошибки, которые могли бы быть упущены в обычных тестах.

Ключевые возможности:

1. Генерация входных данных:

Поддержка множества встроенных стратегий для создания тестовых данных (строки, числа, списки, словари и т.д.).

Возможность создания пользовательских стратегий.

2. Автоматическое упрощение:

Если тест провалился, Hypothesis пытается упростить входные данные, чтобы локализовать причину ошибки.

3. Поддержка сложных типов данных:

Генерация данных для пользовательских объектов, классов, JSON-структур и многого другого.

4. Интеграция с популярными фреймворками:

Работает с pytest, unittest и другими.

5. Детерминированное тестирование:

Повторяемость тестов благодаря фиксированным "seed"-значениям.

⚙️ Установка 👇👇👇

pip install hypothesis


📁 Документация

#библиотеки

📌 Подпишись Python_Scripts ❗️
👍54
av_kufar_bot-main.zip
14.7 KB
📌 Скрипт парсер

💻  ЯП:  Python 3.11+🐍
💾  Модули: aiogram, bs4, lxml
📂  База данных: -

📌 Скрипт для парсинга Kufar.by и Av.by в оболочке Telegram бота.

📌 Вся информация приведена исключительно в ознакомительных целях❗️❗️❗️

#telegram

📌
Подпишись  Python_Scripts❗️
7👍4
📌Вычисление индекса волатильности токена на основе исторических данных используется публичное API Bybit👨‍💻
import requests
import pandas as pd
import math

# Константы
BASE_URL = "https://api.bybit.com/v5/market/kline"
SYMBOL = "BTCUSDT" # Торговая пара
CATEGORY = "spot" # Тип рынка
INTERVAL = "60" # Интервал свечей (60 минут)
LIMIT = 24 # Количество свечей (24 часа = 24 свечи по 1 часу)

def get_historical_data():
"""Получить исторические данные (Kline)"""
params = {
"category": CATEGORY,
"symbol": SYMBOL,
"interval": INTERVAL,
"limit": LIMIT
}
response = requests.get(BASE_URL, params=params)
if response.status_code == 200:
return response.json()["result"]["list"]
else:
raise Exception(f"Ошибка API: {response.status_code}, {response.text}")

def calculate_volatility(klines):
"""Вычислить волатильность на основе исторических данных"""
data = [float(kline[4]) for kline in klines] # Закрытые цены (Close)
df = pd.DataFrame(data, columns=["close"])

# Вычисляем логарифмическую доходность
df["log_return"] = df["close"].apply(math.log).diff()

# Рассчитываем стандартное отклонение (волатильность)
volatility = df["log_return"].std() * math.sqrt(len(df))
return volatility

def main():
try:
print(f"Вычисляем волатильность для {SYMBOL} за последние {LIMIT} часов...\n")

# Получаем исторические данные
klines = get_historical_data()

# Вычисляем волатильность
volatility = calculate_volatility(klines)

# Выводим результат
print(f"Волатильность за {LIMIT} часов: {volatility:.2%}")
except Exception as e:
print(f"Ошибка: {e}")

if __name__ == "__main__":
main()

📌 Подпишись  Python_Scripts❗️
🔥14👍43
🚀 Полезные библиотеки Python

💾 Poetry-dynamic-versioning

📌 Библиотека Python, которая автоматически синхронизирует версию вашего проекта с Git-тегами.

Позволяет избегать ручного изменения версии в файле pyproject.toml и упрощает управление версиями в процессе разработки и релизов.

Ключевые возможности:

1. Синхронизация версий с Git-тегами:
Версия проекта в pyproject.toml автоматически обновляется на основе текущего Git-тега.

2. Поддержка автоматического версионирования:
Генерация промежуточных версий, например 1.0.1-dev, для незавершённых изменений.

3. Простая интеграция:
Лёгкая настройка без необходимости вручную управлять версиями.

4. Совместимость с Poetry:
Библиотека легко интегрируется в существующие проекты, использующие Poetry.

⚙️ Установка 👇👇👇

pip install poetry-dynamic-versioning


📁 Документация

#библиотеки

📌 Подпишись Python_Scripts ❗️
👍84🔥4
TG-VK-bot-integration-master.zip
80.4 KB
📌 Скрипт бот ВК для оперативного реагирования на заявки клиентов

💻  ЯП:  Python 3.11+🐍
💾  Модули: aiogram, telebot, vk-api
📂  База данных: aiosqlite

📌 Скрипт автоматизирует процесс обработки сообщения от клиентов, перенеся часть задач в Telegram. Это позволяет администраторам быстрее реагировать на запросы, управлять диалогами и обеспечивать высокий уровень обслуживания.
Автоматическая отправка сообщений от клиентов в чат-бота VK.

- Уведомления для администраторов в Telegram о новых сообщениях.
- Возможность модерации и управления сообщениями в режиме реального времени.
- Легко настраиваемый интерфейс и возможность расширения функционала.

📌 Вся информация приведена исключительно в ознакомительных целях❗️❗️❗️

#telegram #vk

📌
Подпишись  Python_Scripts❗️
🔥62
🔍 Google — В С Ё ?

В 2024 году невозможно найти что-то полезное, просто загуглив: выдача поиска забита мусором из ChatGPT, а все годные материалы не попадают в топы поиска.

Хорошо, что есть База Знаний — сеть каналов, в которой команда опытных айтишников постит лучшее из мира IT. Для вашего удобства всё отсортировано по категориям:

👩‍💻 Все языки: @main_it_baza

🖥 Python: @python_baza

👩‍💻 Frontend: @frontend_baza

👩‍💻 Backend: @backend_baza

🎨 Дизайн: @design_baza

📊 Архив: @archive_baza

🕔 Ссылки будут активны ещё 48 часов, успейте сохранить себе, чтобы не потерять
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤩42😁2
📌Расчёт среднего истинного диапазона (ATR). ATR — это индикатор, который помогает измерять волатильность рынка. Он часто используется для установки уровней стоп-лоссов или определения трендов.
Используется публичное API Bybit👨‍💻
import requests
import pandas as pd

# Константы
BASE_URL = "https://api.bybit.com/v5/market/kline"
SYMBOL = "BTCUSDT" # Торговая пара
CATEGORY = "spot" # Тип рынка
INTERVAL = "60" # Интервал свечей (60 минут)
LIMIT = 14 # Количество свечей для ATR (по умолчанию 14 периодов)

def get_historical_data():
"""Получить исторические данные (Kline)"""
params = {
"category": CATEGORY,
"symbol": SYMBOL,
"interval": INTERVAL,
"limit": LIMIT + 1 # Нужно на 1 свечу больше для расчётов
}
response = requests.get(BASE_URL, params=params)
if response.status_code == 200:
return response.json()["result"]["list"]
else:
raise Exception(f"Ошибка API: {response.status_code}, {response.text}")

def calculate_atr(klines):
"""Вычислить ATR (средний истинный диапазон)"""
# Преобразуем данные в DataFrame
data = [
{"high": float(kline[2]), "low": float(kline[3]), "close": float(kline[4])}
for kline in klines
]
df = pd.DataFrame(data)

# Вычисляем истинный диапазон (TR)
df["previous_close"] = df["close"].shift(1)
df["tr"] = df[["high", "previous_close"]].max(axis=1) - df[["low", "previous_close"]].min(axis=1)

# Рассчитываем ATR как скользящее среднее истинного диапазона
df["atr"] = df["tr"].rolling(window=LIMIT).mean()

# Возвращаем последнее значение ATR
return df["atr"].iloc[-1]

def main():
try:
print(f"Вычисляем ATR для {SYMBOL} за последние {LIMIT} периодов...\n")

# Получаем исторические данные
klines = get_historical_data()

# Вычисляем ATR
atr = calculate_atr(klines)

# Выводим результат
print(f"Средний истинный диапазон (ATR) за {LIMIT} периодов: {atr:.2f}")
except Exception as e:
print(f"Ошибка: {e}")

if __name__ == "__main__":
main()

📌 Подпишись  Python_Scripts❗️
👍9🔥63
🚀 Полезные библиотеки Python

💾 FluPy

📌 Библиотека Python, для функционального программирования, которая предоставляет мощный инструмент для работы с коллекциями данных. Она позволяет выполнять операции над последовательностями данных (например, списками, словарями) с использованием функционального подхода: через цепочки методов, упрощающие обработку данных.

Ключевые возможности:

1. Чистый функциональный стиль:
Использование методов map, filter, reduce, и других, для работы с последовательностями данных.

2. Ленивая обработка данных:
Операции выполняются только по требованию, что экономит ресурсы для больших объёмов данных.

3. Простота использования:
Работает с любыми итерабельными объектами: списками, словарями, генераторами и т. д.

4. Поддержка цепочек вызовов:
Позволяет комбинировать несколько операций в одной строке, делая код более читаемым и компактным.

⚙️ Установка 👇👇👇

pip install flupy


📁 Документация

#библиотеки

📌 Подпишись Python_Scripts ❗️
👍103