chore(userbot): apply ruff check --fix and ruff format

- ruff check --fix: 210 auto-fixed errors (import sorting, trailing
  whitespace, unused imports, f-string fixups, deprecated annotations)
- ruff format: 104 files reformatted to consistent style
- 268 non-auto-fixable issues remain (S113 requests timeout, etc.)
This commit is contained in:
2026-06-19 12:19:01 +02:00
parent bd9724da69
commit 0506aaaac8
104 changed files with 4338 additions and 5319 deletions
+66 -85
View File
@@ -17,7 +17,6 @@
import asyncio
import math
import mimetypes
import os
import time
from datetime import datetime
@@ -29,14 +28,13 @@ import urllib3
from pyrogram import Client, enums, filters
from pyrogram.types import Message
from pySmartDL import SmartDL
from utils.config import apiflash_key
from utils.misc import modules_help, prefix
from utils.scripts import format_exc, humanbytes, progress
def generate_screenshot(url):
api_url = f"https://api.apiflash.com/v1/urltoimage?access_key={apiflash_key}&url={url}&format=png"
api_url = f'https://api.apiflash.com/v1/urltoimage?access_key={apiflash_key}&url={url}&format=png'
response = requests.get(api_url)
if response.status_code == 200:
return BytesIO(response.content)
@@ -46,23 +44,23 @@ def generate_screenshot(url):
http = urllib3.PoolManager()
@Client.on_message(filters.command("short", prefix) & filters.me)
@Client.on_message(filters.command('short', prefix) & filters.me)
async def short(_, message: Message):
if len(message.command) > 1:
link = message.text.split(maxsplit=1)[1]
elif message.reply_to_message:
link = message.reply_to_message.text
else:
await message.edit(f"<b>Usage: </b><code>{prefix}short [url to short]</code>")
await message.edit(f'<b>Usage: </b><code>{prefix}short [url to short]</code>')
return
r = http.request("GET", "https://clck.ru/--?url=" + link)
r = http.request('GET', 'https://clck.ru/--?url=' + link)
await message.edit(
r.data.decode().replace("https://", "<b>Shortened Url:</b>"),
r.data.decode().replace('https://', '<b>Shortened Url:</b>'),
disable_web_page_preview=True,
)
@Client.on_message(filters.command("urldl", prefix) & filters.me)
@Client.on_message(filters.command('urldl', prefix) & filters.me)
async def urldl(client: Client, message: Message):
if len(message.command) > 1:
message_id = None
@@ -71,65 +69,63 @@ async def urldl(client: Client, message: Message):
message_id = message.reply_to_message.id
link = message.reply_to_message.text
else:
await message.edit(
f"<b>Usage: </b><code>{prefix}urldl [url to download]</code>"
)
await message.edit(f'<b>Usage: </b><code>{prefix}urldl [url to download]</code>')
return
await message.edit("<b>Trying to download...</b>")
await message.edit('<b>Trying to download...</b>')
c_time = time.time()
resp = requests.head(link, allow_redirects=True, timeout=5)
if resp.status_code != 200:
return await message.edit("<b>Failed to fetch request header information</b>")
return await message.edit('<b>Failed to fetch request header information</b>')
content_type = resp.headers.get("Content-Type").split(";")[0]
content_type = resp.headers.get('Content-Type').split(';')[0]
extension = mimetypes.guess_extension(content_type)
# Check if the file is an executable binary
is_executable = content_type in [
"application/octet-stream",
"application/x-msdownload",
'application/octet-stream',
'application/x-msdownload',
]
# Get the file extension from the URL
url_extension = os.path.splitext(link)[1].lower()
try:
os.makedirs("downloads")
os.makedirs('downloads')
if is_executable:
file_name = "downloads/" + link.split("/")[-1]
file_name = 'downloads/' + link.split('/')[-1]
if not file_name.endswith(url_extension):
file_name += url_extension
elif extension:
file_name = "downloads/" + link.split("/")[-1]
file_name = 'downloads/' + link.split('/')[-1]
if not file_name.endswith(extension):
file_name += extension
else:
file_name = "downloads/" + link.split("/")[-1]
file_name = 'downloads/' + link.split('/')[-1]
except FileNotFoundError:
if is_executable:
file_name = "downloads/" + link.split("/")[-1]
file_name = 'downloads/' + link.split('/')[-1]
if not file_name.endswith(url_extension):
file_name += url_extension
elif extension:
file_name = "downloads/" + link.split("/")[-1]
file_name = 'downloads/' + link.split('/')[-1]
if not file_name.endswith(extension):
file_name += extension
else:
file_name = "downloads/" + link.split("/")[-1]
file_name = 'downloads/' + link.split('/')[-1]
except FileExistsError:
if is_executable:
file_name = "downloads/" + link.split("/")[-1]
file_name = 'downloads/' + link.split('/')[-1]
if not file_name.endswith(url_extension):
file_name += url_extension
elif extension:
file_name = "downloads/" + link.split("/")[-1]
file_name = 'downloads/' + link.split('/')[-1]
if not file_name.endswith(extension):
file_name += extension
else:
file_name = "downloads/" + link.split("/")[-1]
file_name = 'downloads/' + link.split('/')[-1]
downloader = SmartDL(link, file_name, progress_bar=False, timeout=10)
start_t = datetime.now()
@@ -140,24 +136,24 @@ async def urldl(client: Client, message: Message):
while not downloader.isFinished():
total_length = downloader.filesize or None
downloaded = downloader.get_dl_size(human=True)
u_m = ""
u_m = ''
now = time.time()
diff = now - c_time
percentage = downloader.get_progress() * 100
speed = downloader.get_speed(human=True)
progress_str = (
"".join(["" for _ in range(math.floor(percentage / 5))])
+ "".join(["" for _ in range(20 - math.floor(percentage / 5))])
+ f"\n<b>Progress:</b> {round(percentage, 2)}%"
''.join(['' for _ in range(math.floor(percentage / 5))])
+ ''.join(['' for _ in range(20 - math.floor(percentage / 5))])
+ f'\n<b>Progress:</b> {round(percentage, 2)}%'
)
eta = downloader.get_eta(human=True)
try:
m = "<b>Trying to download...</b>\n"
m += f"<b>File Name:</b> <code>{unquote(link.split('/')[-1])}</code>\n"
m += f"<b>Speed:</b> {speed}\n"
m += f"{progress_str}\n"
m += f"{downloaded} of {humanbytes(total_length)}\n"
m += f"<b>ETA:</b> {eta}"
m = '<b>Trying to download...</b>\n'
m += f'<b>File Name:</b> <code>{unquote(link.split("/")[-1])}</code>\n'
m += f'<b>Speed:</b> {speed}\n'
m += f'{progress_str}\n'
m += f'{downloaded} of {humanbytes(total_length)}\n'
m += f'<b>ETA:</b> {eta}'
if round(diff % 10.00) == 0 and m != u_m:
await message.edit_text(disable_web_page_preview=True, text=m)
u_m = m
@@ -167,25 +163,23 @@ async def urldl(client: Client, message: Message):
if os.path.exists(file_name):
end_t = datetime.now()
sec = (end_t - start_t).seconds
await message.edit_text(
f"<b>Downloaded to <code>{file_name}</code> in {sec} seconds</b>"
)
ms_ = await message.edit("<b>Starting Upload...</b>")
await message.edit_text(f'<b>Downloaded to <code>{file_name}</code> in {sec} seconds</b>')
ms_ = await message.edit('<b>Starting Upload...</b>')
await client.send_document(
message.chat.id,
file_name,
progress=progress,
progress_args=(ms_, c_time, "`Uploading...`"),
caption=f"<b>File Name:</b> <code>{unquote(link.split('/')[-1])}</code>\n",
progress_args=(ms_, c_time, '`Uploading...`'),
caption=f'<b>File Name:</b> <code>{unquote(link.split("/")[-1])}</code>\n',
reply_to_message_id=message_id,
)
await message.delete()
os.remove(file_name)
else:
await message.edit("<b>Failed to download</b>")
await message.edit('<b>Failed to download</b>')
@Client.on_message(filters.command("upload", prefix) & filters.me)
@Client.on_message(filters.command('upload', prefix) & filters.me)
async def upload_cmd(_, message: Message):
max_size = 512 * 1024 * 1024
max_size_mb = 100
@@ -193,20 +187,18 @@ async def upload_cmd(_, message: Message):
min_file_age = 31
max_file_age = 180
ms_ = await message.edit("`Downloading...`", parse_mode=enums.ParseMode.MARKDOWN)
ms_ = await message.edit('`Downloading...`', parse_mode=enums.ParseMode.MARKDOWN)
c_time = time.time()
try:
file_name = await message.download(
progress=progress, progress_args=(ms_, c_time, "`Downloading...`")
)
file_name = await message.download(progress=progress, progress_args=(ms_, c_time, '`Downloading...`'))
except ValueError:
try:
file_name = await message.reply_to_message.download(
progress=progress, progress_args=(ms_, c_time, "`Downloading...`")
progress=progress, progress_args=(ms_, c_time, '`Downloading...`')
)
except ValueError:
await message.edit("<b>File to upload not found</b>")
await message.edit('<b>File to upload not found</b>')
return
if os.path.getsize(file_name) > max_size:
@@ -215,71 +207,60 @@ async def upload_cmd(_, message: Message):
os.remove(file_name)
return
await message.edit("<b>Uploading...</b>")
with open(file_name, "rb") as f:
await message.edit('<b>Uploading...</b>')
with open(file_name, 'rb') as f:
response = requests.post(
"https://x0.at",
files={"file": f},
'https://x0.at',
files={'file': f},
)
if response.ok:
file_size_mb = os.path.getsize(file_name) / 1024 / 1024
file_age = int(
min_file_age
+ (max_file_age - min_file_age) * ((1 - (file_size_mb / max_size_mb)) ** 2)
)
url = response.text.replace("https://", "")
file_age = int(min_file_age + (max_file_age - min_file_age) * ((1 - (file_size_mb / max_size_mb)) ** 2))
url = response.text.replace('https://', '')
await message.edit(
f"<b>Your URL: {url}\nYour file will remain live for {file_age} days</b>",
f'<b>Your URL: {url}\nYour file will remain live for {file_age} days</b>',
disable_web_page_preview=True,
)
else:
await message.edit(
f"<b>API returned an error!\n{response.text}\n Not allowed</b>"
)
await message.edit(f'<b>API returned an error!\n{response.text}\n Not allowed</b>')
print(response.text)
if os.path.exists(file_name):
os.remove(file_name)
@Client.on_message(filters.command(["ws", "webshot"], prefix) & filters.me)
@Client.on_message(filters.command(['ws', 'webshot'], prefix) & filters.me)
async def webshot(client: Client, message: Message):
if len(message.command) > 1:
url = message.text.split(maxsplit=1)[1]
if not url.startswith("https://"):
url = "https://" + message.text.split(maxsplit=1)[1]
if not url.startswith('https://'):
url = 'https://' + message.text.split(maxsplit=1)[1]
elif message.reply_to_message:
url = message.reply_to_message.text
if not url.startswith("https://"):
url = "https://" + url
if not url.startswith('https://'):
url = 'https://' + url
else:
await message.edit_text(
f"<b>Usage: </b><code>{prefix}webshot/{prefix}ws [url/reply to url]</code>"
)
await message.edit_text(f'<b>Usage: </b><code>{prefix}webshot/{prefix}ws [url/reply to url]</code>')
return
chat_id = message.chat.id
await message.edit("<b>Generating screenshot...</b>")
await message.edit('<b>Generating screenshot...</b>')
try:
screenshot_data = generate_screenshot(url)
if screenshot_data:
await message.delete()
await client.send_photo(
chat_id, screenshot_data, caption=f"Screenshot of <code>{url}</code>"
)
await client.send_photo(chat_id, screenshot_data, caption=f'Screenshot of <code>{url}</code>')
else:
await message.edit_text(
"<code>Failed to generate screenshot...\nMake sure url is correct</code>"
)
await message.edit_text('<code>Failed to generate screenshot...\nMake sure url is correct</code>')
except Exception as e:
await message.edit_text(f"An error occurred: {format_exc(e)}")
await message.edit_text(f'An error occurred: {format_exc(e)}')
modules_help["url"] = {
"short [url]*": "short url",
"urldl [url]*": "download url content",
"upload [file|reply]*": "upload file to internet",
"webshot [link]*": "Screenshot of web page",
"ws [reply to link]*": "Screenshot of web page",
modules_help['url'] = {
'short [url]*': 'short url',
'urldl [url]*': 'download url content',
'upload [file|reply]*': 'upload file to internet',
'webshot [link]*': 'Screenshot of web page',
'ws [reply to link]*': 'Screenshot of web page',
}