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

Ваши предложения📝 @cmd_dark @CMD_Vega
Download Telegram
Windows Service Watchdog — скрипт следит за критичными Windows-службами и автоматически их перезапускает, если они падают. Простой, понятный, работает без GUI и отлично подходит для обращения с сервисами, которые не должны падать.

📱 Python 3.8+
💾 Модули: psutil, subprocess, argparse, time

📌 Возможности скрипта:
🟠Проверяет состояние заданной службы (через psutil.win_service_get)
🟠Если служба не работает — делает попытку перезапуска через sc start
🟠Логирует результат: статус до/после
🟠Можно указать таймаут между проверками и автоматический перезапуск — минималистично и эффективно (stackoverflow.com, gist.github.com)


👨‍💻 Пример использования (CLI):
python service_watchdog.py --service "Spooler" --interval 30


👨‍💻 Код скрипта (service_watchdog.py):
import psutil, subprocess, time, argparse

def check_service(name):
try:
svc = psutil.win_service_get(name).as_dict()
return svc.get('status') == 'running'
except Exception as e:
print(f"Ошибка при проверке службы {name}: {e}")
return False

def restart_service(name):
print(f"Попытка перезапуска службы: {name}")
subprocess.run(['sc', 'start', name], shell=True)

def main(service, interval):
while True:
running = check_service(service)
print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] {service} is {'running' if running else 'NOT running'}")
if not running:
restart_service(service)
time.sleep(5)
print(f"Снова проверяю...")
time.sleep(interval)
else:
time.sleep(interval)

if __name__ == "__main__":
parser = argparse.ArgumentParser("Windows Service Watchdog")
parser.add_argument("--service", required=True, help="Name of the Windows service")
parser.add_argument("--interval", type=int, default=60, help="Check interval in seconds")
args = parser.parse_args()
main(args.service, args.interval)


⚙️ Установка зависимостей:
pip install psutil


— psutil нужен для проверки статуса службы. Команда sc используется для запуска, есть в Windows по умолчанию.

#скрипты

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
15🔥3
💬 Multi-Clipboard Utility Program

📱 Python 3.7+
💾 Модули: использует pyperclip для работы с буфером обмена. Подробнее в репозитории.
GitHub

📌 A-Multi-Clipboard-Utility-Program-In-Python — простой скрипт, который позволяет копировать заранее определённые текстовые шаблоны (например: "agree", "busy", "upsell") в буфер обмена по ключевому слову, переданному через аргумент командной строки. Очень удобно для вставки часто используемых фраз.
GitHub

👨‍💻 Код (упрощённая версия из mclip.py):
import sys
import pyperclip

snippets = {
"agree": "I agree to the terms and conditions.",
"busy": "I'm currently busy. I'll get back to you soon.",
"upsell": "Have you considered upgrading to our premium plan?"
}

if len(sys.argv) != 2 or sys.argv[1] not in snippets:
print("Usage: python mclip.py <keyphrase>")
print("Available keyphrases:", ", ".join(snippets.keys()))
sys.exit(1)

pyperclip.copy(snippets[sys.argv[1]])
print(f"Copied snippet for '{sys.argv[1]}' to clipboard.")


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


Ссылка на репозиторий: GitHub.

#скрипты

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍2
🔥 Полезные библиотеки Python

LivePython

📌 LivePython — малоизвестный инструмент для визуализации выполнения Python-кода в реальном времени. Он отображает текущую строку, контекст выполнения и изменения переменных — прямо как в анимации. Это удобно для понимания flow, обучения и отладки.

📌 Особенности библиотеки:
🟠 Анимация выполнения — пошагово показывает, какая строка выполняется, и как меняются данные.
🟠 Отлично подходит для обучения и объяснений — визуализация кода помогает быстрее понять логику, особенно новичкам.
🟠 Лёгкая и простая в использовании — минимализм и эффективность, без сложной настройки.


⚙️ Установка:
pip install livepython


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

#библиотеки

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
28👍4
💬 python-file-analyzer

📱 Python 3.7+
💾 Модули: используется встроенный модуль ast — никакие внешние зависимости не требуются. (GitHub репозиторий)

📌 python-file-analyzer — простой скрипт для анализа Python-файлов. Выводит детальную информацию о структуре кода: количество строк, функции, классы, импорты, вызовы функций и т.д. Отличный инструмент для быстрого обзора кода или метаданных скрипта без запуска.

👨‍💻 Код (примерный фрагмент из index.py):
import sys
import ast

def analyze_python_file(path):
with open(path, 'r') as f:
source = f.read()
tree = ast.parse(source)
analyzer = {
"lines": source.count('\n'),
"functions": [node.name for node in ast.walk(tree) if isinstance(node, ast.FunctionDef)],
"classes": [node.name for node in ast.walk(tree) if isinstance(node, ast.ClassDef)],
"imports": [node.names[0].name for node in ast.walk(tree) if isinstance(node, ast.Import)],
}
return analyzer

if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python index.py <path_to_python_file>")
sys.exit(1)

path = sys.argv[1]
result = analyze_python_file(path)
print(f"Analysis of {path}:")
print(f"Lines: {result['lines']}")
print(f"Functions: {result['functions']}")
print(f"Classes: {result['classes']}")
print(f"Imports: {result['imports']}")


(Оригинальный код использует ast и выводит в лог файл структуру файла с подробными данными.)

Ссылка на репозиторий: GitHub

#скрипты

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍3🔥2
🔥 Полезные библиотеки Python

River

📌 River — библиотека машинного обучения в режиме потоковых данных (streaming ML / continual learning). Объединяет лучшие идеи из creme и scikit-multiflow, и позволяет обучать модели на лету, без необходимости хранить все данные в памяти.

📌 Особенности библиотеки:
🟠 Поддержка incremental learning — модели обновляются по одной записи или мини-батчу, без необходимости переучиваться на всём наборе.
🟠 Примитивы для обработки данных “на лету”: трансформеры, нормализаторы, one-hot-кодировщики, скейлеры, и др., которые совместимы с потоковым обучением.
🟠 Поддержка метрик в режиме онлайн: accuracy, precision, recall, AUC, plus drift detection tools.
🟠 Архитектура ориентирована на эффективное использование памяти и скорость — идеальна для систем с ограниченными ресурсами.
🟠 Активное развитие и сообщество, open-source, большой набор алгоритмов для классификации, регрессии, кластеризации и обработки данных в потоке. 


⚙️ Установка:
pip install river


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

#библиотеки

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
5
archive-old-logs

📱 Python 3.7+
💾 Модули: os, shutil, datetime, zipfile.

📌 archive-old-logs — простой скрипт-автоматизатор, который находит файлы логов старше заданного числа дней, архивирует их в ZIP-файл и перемещает в архивную папку. Отлично подходит для бытового лог-менеджмента на сервере: освобождает место, упорядочивает логи, сохраняет историю в одном месте.

👩‍💻 Код (пример реализации):
import os
import shutil
import zipfile
from datetime import datetime, timedelta

def archive_old_logs(src_dir, archive_dir, days=30):
cutoff = datetime.now() - timedelta(days=days)
os.makedirs(archive_dir, exist_ok=True)
to_archive = []
for root, dirs, files in os.walk(src_dir):
for f in files:
if f.endswith(".log"):
full = os.path.join(root, f)
mtime = datetime.fromtimestamp(os.path.getmtime(full))
if mtime < cutoff:
to_archive.append(full)
if not to_archive:
print("No old logs to archive.")
return
zip_name = os.path.join(archive_dir, f"logs_archive_{datetime.now():%Y%m%d}.zip")
with zipfile.ZipFile(zip_name, "w", compression=zipfile.ZIP_DEFLATED) as zf:
for f in to_archive:
arcname = os.path.relpath(f, src_dir)
zf.write(f, arcname)
os.remove(f)
print(f"Archived {len(to_archive)} log files into {zip_name}")

if __name__ == "__main__":
src = "/var/log/myapp"
arch = "/var/log/myapp/archive"
archive_old_logs(src, arch, days=14)


#скрипты

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥3👍1
🔥 Полезные библиотеки Python

Missingno

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

📌 Особенности библиотеки:
🟠Генерирует визуальный отчёт пропусков данных: matrix, bar, heatmap, dendrogram. Удобно видеть, где лучше начинать очистку.
🟠Интегрируется с pandas.DataFrame — работать просто и понятно.


⚙️ Установка:
pip install missingno


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

#библиотеки

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍1
🔥 Полезные библиотеки Python

DisCoPy

📌 DisCoPy — библиотека для вычислений с монадическими категориями, где основным элементом являются строковые диаграммы (string diagrams). Используется для формального описания композиции процессов и взаимодействий — особенно в NLP, логике и квантовых алгоритмах.

📌 Особенности библиотеки:
🟠 Чёткий декларативный синтаксис для построения диаграмм: композиции, разветвления, транспозиций, функций как морфизмов.
🟠 Высокая модульность: можно комбинировать простые элементы в сложные графические структуры, отображать и вычислять дизъюнкты, копии и др.
🟠 Применима как в академических задачах (теория категорий, формальная семантика), так и в продакшн-сценариях: моделирование взаимодействий, автоматические преобразования данных, DSL-эндпоинты.


⚙️ Установка:
pip install discopy


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

#библиотеки

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥3👍2
AutoKey-Snippet-Launcher

📱 Python 3.9+
💾 Модули: autokey Python API — скрипты пишутся на самом AutoKey. Требуется установка приложения AutoKey (Linux).

📌 AutoKey-Snippet-Launcher — пользовательский скрипт для AutoKey, позволяющий запускать заранее подготовленные текстовые или кодовые фрагменты (snippets) по горячим клавишам или фразам-триггерам. Это расширенный функционал горячих фраз: можно запускать Python-логику, подставлять логические блоки, преобразовывать ввод пользователя и даже интерактивные диалоги. Всё — в AutoKey, без дополнительных приложений.

👨‍💻 Пример кода-сценария для AutoKey (snippet_launcher.py):
# snippet_launcher.py — AutoKey script

from autokey import clipboard, keyboard, system
# Словарь сниппетов
snippets = {
"addr": "ул. Гагарина, д.12, кв.34, Ташкент",
"sig": "С уважением,\nИван Иванов, инженер",
"date": system.exec_command("date +'%Y-%m-%d'")[0].strip()
}

def on_trigger(trigger_phrase):
if trigger_phrase in snippets:
text = snippets[trigger_phrase]
clipboard.fill_clipboard(text)
keyboard.send_keys("<ctrl>v")
else:
keyboard.send_keys(trigger_phrase)

# Привязка: триггер "addr" вызывает вставку адреса
on_trigger("addr")


#скрипты

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4🔥1
🔥 Полезные библиотеки Python

feature-engine — это Python-библиотека для продвинутой предобработки признаков в машинном обучении. Помогает очищать, трансформировать и отбирать признаки для улучшения качества моделей, работая как над табличными, так и категориальными данными.

📌 Особенности:
🟠Обработка пропусков, категориальных и числовых признаков
🟠Кодирование категориальных переменных
🟠Нормализация и масштабирование
🟠Отбор признаков по статистике и важности
🟠Полная интеграция с scikit-learn


⚙️ Установка:
pip install feature-engine


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

#библиотеки

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Automate Git Operations

📌 Скрипт автоматизирует рутинные git-операции: добавление файлов, коммит с шаблоном сообщения и пуш в ветку — всё одной командой. Сэкономит минуты, которые иначе уйдут на ввод git add ., git commit, git push. Особенно удобно при частых коммитах в работе.

📱 Python 3.7+
💾 Модули: subprocess, argparse, datetime

📌 Возможности скрипта:
🟠Выполняет добавление всех изменений (git add .)
🟠Составляет коммит-сообщение с временной меткой (например: Auto commit 2025-08-19 · Обновления)
🟠Делает git commit и git push, используя default-ветку
🟠Позволяет один раз запускать скрипт и забыть про многострочные команды—автоматизация на максималках


👨‍💻 Пример использования (CLI):
python git_auto.py


👨‍💻 Код скрипта (git_auto.py):
import subprocess
import argparse
from datetime import datetime

def auto_git():
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
msg = f"Auto commit {timestamp}"
try:
subprocess.run(["git", "add", "."], check=True)
subprocess.run(["git", "commit", "-m", msg], check=True)
subprocess.run(["git", "push"], check=True)
print(f" Changes pushed with message: '{msg}'")
except subprocess.CalledProcessError as e:
print(f" Git operation failed: {e}")

if __name__ == "__main__":
parser = argparse.ArgumentParser("Automate Git Operations")
args = parser.parse_args()
auto_git()


#скрипты

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3🔥2
🔥 Полезные библиотеки Python

wasabi

📌 wasabi — лёгкая утилита для форматированного вывода в консоли и логирования. Помогает красиво отображать статус, ошибки, предупреждения и структурированный текст. Часто используется в ML-проектах и скриптах, где нужен аккуратный вывод.

📌 Особенности библиотеки:
🟠 Красивые цветные сообщения: msg.info(), msg.warn(), msg.fail().
🟠 Поддержка таблиц и прогресс-баров.
🟠 Минимум зависимостей, работает быстро.
🟠 Хорошо интегрируется в пайплайны обучения моделей и тестирования.


⚙️ Установка:
pip install wasabi


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

#библиотеки

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍6🔥42
git-delete-merged-branches

📌 Этот скрипт чистит локальный git-репозиторий, удаляя все ветки, которые уже были смержены в main (или любую другую указанную ветку). Помогает поддерживать репозиторий в порядке, когда после фич- или баг-фиксов остаются десятки ненужных веток.

📌 Особенности скрипта:
🟠 Работает прямо из консоли, без зависимостей.
🟠 Можно указать целевую ветку (main, master, develop).
🟠 Поддерживает dry-run — можно посмотреть, какие ветки будут удалены, перед фактическим удалением.
🟠 Ускоряет навигацию и исключает мусор в локальных репозиториях.


⚙️ Использование:
python git-delete-merged-branches.py --base main --dry-run


Чтобы удалить реально:
python git-delete-merged-branches.py --base main


🔢 Репозиторий

#скрипты

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥3
🔥 Полезные библиотеки Python

halo

📌 halo — библиотека для создания анимированных индикаторов загрузки (spinners) в консоли. Удобна для CLI-инструментов и скриптов, где нужно показывать процесс выполнения.

📌 Особенности библиотеки:
🟠 Поддержка десятков встроенных спиннеров (точки, линии, стрелки и др.).
🟠 Возможность кастомизации текста, цвета и анимации.
🟠 Работает как с синхронным, так и с асинхронным кодом.
🟠 Лёгкая интеграция в любые консольные проекты.


⚙️ Установка:
pip install halo


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

#библиотеки

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍3🔥2
auto_vpn_connect

📱 Python 3.10+
💾 Модули: pyotp, argparse, плюс взаимодействие с внешним VPN-CLI (например, Pritunl, Global Protect) через subprocess. (GitHub репозиторий)

📌 auto_vpn_connect — скрипт-утилита, которая автоматизирует подключение к VPN-клиентам с минимальным участием пользователя. Поддерживаются Pritunl и Palo Alto Global Protect. Можно автоматически ввести PIN, TOTP-код, токен и подключиться к нужному VPN-профилю. Очень полезно, если VPN надо поднимать вручную или через GUI.

👨‍💻 Код и установка:
git clone https://github.com/Dhi13man/auto_vpn_connect.git
cd auto_vpn_connect
pip install pyotp


Файл vpn_data.json должен содержать конфигурацию VPN-профилей:
{
"config": {
"PRITUNL": {
"vpn_type": "PRITUNL",
"cli_path": "/path/to/pritunl-client"
},
"GLOBAL_PROTECT": {
"vpn_type": "GLOBAL_PROTECT",
"service_load_command": "...",
"service_unload_command": "..."
}
},
"vpn_list": [
{
"vpn_id": "<vpn_id_1>",
"vpn_type": "PRITUNL",
"pin": "<vpn_pin>",
"totp_url": "<totp_url_if_any>",
"token": "<vpn_token_if_any>"
},
{
"vpn_id": "GlobalProtect",
"vpn_type": "GLOBAL_PROTECT"
}
]
}


Запуск:
python auto_vpn_connect/__main__.py


Опции позволяют:
🟠Выбирать VPN-профиль по vpn_id
🟠Автоматически обрабатывать PIN, TOTP и токены
🟠Перезапускать VPN при падении соединения


#скрипты

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
16👍5🔥1😁1
🔥 Полезные библиотеки Python

PySnooper

📌 PySnooper — это «декоратор-лупа» для отладки кода. Он автоматически логирует выполнение функций: входные аргументы, строки кода, изменения переменных и возвращаемое значение. Работает без сложных настроек и показывает понятный трейс прямо в консоли или в файл.

📌 Особенности библиотеки:
🟠 Используется как простой декоратор @pysnooper.snoop() — минимальный порог входа.
🟠 Поддержка логирования в файл (@pysnooper.snoop("log.txt")).
🟠 Подсветка изменений переменных: видно старые и новые значения.
🟠 Удобна для обучения, отладки алгоритмов и сложных функций.


⚙️ Установка:
pip install pysnooper


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

#библиотеки

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3🔥3
PortScannerLite — скрипт на Python, который проверяет открытые порты на заданном хосте.

📱 Python 3.9+
💾 Модули: socket, argparse

📌 PortScannerLite — упрощённый аналог nmap, написанный на чистом Python. Подходит для админов и тестировщиков безопасности: быстро проверить, какие порты доступны у сервера или локальной машины.

👨‍💻 Код:
import socket
import argparse

def scan_ports(host, ports):
print(f"Сканирование {host}...")
for port in ports:
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(0.5)
result = sock.connect_ex((host, port))
if result == 0:
print(f"[+] Порт {port} открыт")
sock.close()
except Exception as e:
print(f"Ошибка при проверке порта {port}: {e}")

if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Простой сканер портов")
parser.add_argument("host", help="IP или домен для проверки")
parser.add_argument("--ports", nargs="+", type=int, default=[21,22,80,443,3306],
help="Список портов через пробел (по умолчанию: 21 22 80 443 3306)")
args = parser.parse_args()

scan_ports(args.host, args.ports)


📌 Что делает:
🟠 Принимает домен или IP и список портов
🟠 Проверяет соединение через socket.connect_ex
🟠 Выводит список открытых портов
🟠 Легковесная альтернатива nmap для быстрых проверок


#скрипты

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍86🔥5
🔥 Полезные библиотеки Python

PyHHMM

📌 PyHHMM — библиотека для реализации heterogeneous hidden Markov models (разнородных скрытых марковских моделей). Подходит, когда в скрытых состояниях модели наблюдаются разные типы данных (не просто вещественные или категорийные), включая смешанные наблюдения и отсутствующие данные.

📌 Особенности библиотеки:
🟠 Поддержка смешанных наблюдений (continuous, multinoulli и др.), что дает гибкость в реальных задачах с разнородными данными.
🟠 Возможность semi-supervised обучения и выбора порядка модели.
🟠 Удобная объектно-ориентированная архитектура: легко задавать разные типы наблюдений, алгоритмы инициализации и критерии выбора порядка.
🟠 Зависимости: numpy, scipy, scikit-learn, seaborn.


⚙️ Установка:
pip install pyhhmm


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

#библиотеки

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3🔥2
processwatchdog.py
7.1 KB
ProcessWatchdog — скрипт на Python для мониторинга и автоматического восстановления процессов/сервисов при утечках памяти, зависаниях или потреблении CPU выше порога.

📱 Python 3.8+
💾 Модули: psutil, subprocess, time, argparse, logging, опционально requests (для Webhook/Telegram) или smtplib (для email). Установить: pip install psutil requests (requests — если нужно уведомление через HTTP).

📌 ProcessWatchdog — лёгкий демон/утилита, которая периодически проверяет выбранный процесс (по имени или PID), и если его потребление памяти или CPU превышает заданные пороги, пытается аккуратно перезапустить процесс (через systemd / сервисный скрипт / команду рестарта). Полезен на серверах, где один долгоживущий процесс может постепенно съесть всё ОЗУ или зависнуть, а автоматический откат предотвращает простои.

📌 Что делает:
🟠 Регулярно сканирует цель (по имени или PID).
🟠 Измеряет потребление памяти (RSS) и загрузку CPU.
🟠 Если пороги превышены — пытается рестартовать сервис самым безопасным способом (systemctl → start_cmd → kill+start).
🟠 Отправляет уведомление на указанный Webhook (например, Telegram/Slack) при рестарте.
🟠 Поддерживает cooldown, чтобы избежать петли рестартов.


#скрипты

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥3
🔥 AutoPilot (stream.py) — скрипт-утилита, которая позволяет запускать «хабы» автоматизации через Streamlit-интерфейс. Это удобный лайф-хак — собрать несколько мелких автоматизационных скриптов в одну визуальную панель и запускать их из браузера.

📱 Python 3.8+
💾 Модули: streamlit, pyperclip, requests, yt_dlp, Pillow, opencv-python и др. — зависимости указаны в requirements.txt репо.

📌 AutoPilot / stream.py — простой подход к объединению и запуску автоматических задач: downloader'ы, QR-генераторы, клипборд-менеджеры, resource-мониторы — всё можно запускать через Streamlit-кнопки. Хорошо подходит для тех, кому лень открывать терминал и хотят интерфейс для своих скриптов.

👨‍💻 Пример использования (адаптация):
import streamlit as st
import pyperclip
import requests
from yt_dlp import YoutubeDL

st.title("AutoPilot Hub")

if st.button("YouTube Download"):
url = st.text_input("YouTube URL")
if url:
with YoutubeDL({}) as ydl:
info = ydl.download([url])
st.write("Download complete")

if st.button("Copy Snippet"):
snippet = st.text_area("Snippet text")
if snippet:
pyperclip.copy(snippet)
st.write("Copied to clipboard")

if st.button("Fetch RSS News"):
feed_url = st.text_input("RSS feed URL")
if feed_url:
resp = requests.get(feed_url)
st.write(resp.text[:500]) # первые 500 символов


Репозиторий: AutoPilot / stream.py

#скрипты

🖥 Python_Scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥53