diff --git a/Dockerfile b/Dockerfile index 6148d41..50455a7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,15 @@ FROM python:3.11-slim AS builder +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + WORKDIR /src COPY requirements.txt . RUN pip install --no-cache-dir --user -r requirements.txt FROM python:3.11-slim +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + RUN apt-get update && apt-get install -y --no-install-recommends \ git \ mediainfo \ diff --git a/images/icons.py b/images/icons.py index 0c9737d..ea0f247 100644 --- a/images/icons.py +++ b/images/icons.py @@ -3,7 +3,7 @@ import re from io import BytesIO import requests -from bs4 import BeautifulSoup as BS +from bs4 import BeautifulSoup from pyrogram import Client, filters from pyrogram.errors import RPCError from pyrogram.types import InputMediaPhoto, Message @@ -22,7 +22,7 @@ async def search_icon(_, message: Message): try: html_content = requests.get(url, timeout=10).text - soup = BS(html_content, 'html.parser') + soup = BeautifulSoup(html_content, 'html.parser') results = soup.find_all( 'img', src=re.compile(r'https://cdn-icons-png.flaticon.com/128/[0-9]+/[0-9]+.png'), diff --git a/images/pinterest.py b/images/pinterest.py index 355f4b2..7fc7c22 100644 --- a/images/pinterest.py +++ b/images/pinterest.py @@ -40,7 +40,7 @@ async def download_image(url): @Client.on_message(filters.command('pinterest', prefix) & filters.me) -async def pinterest_search(client: Client, message: Message): +async def pinterest_search(_client: Client, message: Message): if len(message.command) < 2: await message.edit('Usage: `pinterest [number] `', parse_mode=enums.ParseMode.MARKDOWN) return diff --git a/images/unsplash2.py b/images/unsplash2.py index 859a358..5b6c1cb 100644 --- a/images/unsplash2.py +++ b/images/unsplash2.py @@ -40,7 +40,7 @@ async def download_image(url): @Client.on_message(filters.command(['unsplash2', 'usp2'], prefix) & filters.me) -async def imgsearch(client: Client, message: Message): +async def imgsearch(_client: Client, message: Message): if len(message.command) < 2: await message.edit('Usage: `img [number] `', parse_mode=enums.ParseMode.MARKDOWN) return diff --git a/modules/amongus.py b/modules/amongus.py index 95851ed..594bce6 100644 --- a/modules/amongus.py +++ b/modules/amongus.py @@ -10,15 +10,16 @@ from PIL import Image, ImageDraw, ImageFont from pyrogram import Client, filters from pyrogram.types import Message from utils.misc import modules_help, prefix -from utils.scripts import edit_or_reply -from utils.scripts import reply_check as ReplyCheck +from utils.scripts import edit_or_reply, reply_check async def amongus_gen(text: str, clr: int) -> str: url = 'https://github.com/TgCatUB/CatUserbot-Resources/raw/master/Resources/Amongus/' font = ImageFont.truetype( BytesIO( - requests.get('https://github.com/TgCatUB/CatUserbot-Resources/raw/master/Resources/fonts/bold.ttf', timeout=10).content + requests.get( + 'https://github.com/TgCatUB/CatUserbot-Resources/raw/master/Resources/fonts/bold.ttf', timeout=10 + ).content ), 60, ) @@ -97,7 +98,7 @@ async def amongus_cmd(client: Client, message: Message): await client.send_sticker( message.chat.id, imposter_file, - reply_to_message_id=ReplyCheck(message), + reply_to_message_id=reply_check(message), ) @@ -119,7 +120,7 @@ async def imposter_cmd(client: Client, message: Message): await client.send_photo( message.chat.id, imposter_file, - reply_to_message_id=ReplyCheck(message), + reply_to_message_id=reply_check(message), ) diff --git a/modules/anime/anilist.py b/modules/anime/anilist.py index b0ea92a..5aef87a 100644 --- a/modules/anime/anilist.py +++ b/modules/anime/anilist.py @@ -43,22 +43,22 @@ async def anime_search(client: Client, message: Message): result = response.json() - averageScore = result['averageScore'] + average_score = result['average_score'] try: - coverImage_url = result['imageUrl'] - coverImage = requests.get(url=coverImage_url, timeout=10).content + cover_image_url = result['imageUrl'] + cover_image = requests.get(url=cover_image_url, timeout=10).content async with aiofiles.open('coverImage.jpg', mode='wb') as f: - await f.write(coverImage) + await f.write(cover_image) except Exception: - coverImage = None + cover_image = None title = result['title']['english'] trailer = result['trailer']['id'] description = result['description'] episodes = result['episodes'] genres = ', '.join(result['genres']) - isAdult = result['isAdult'] + is_adult = result['is_adult'] status = result['status'] studios = ', '.join(result['studios']) @@ -68,7 +68,7 @@ async def anime_search(client: Client, message: Message): [ InputMediaPhoto( 'coverImage.jpg', - caption=f"Title: {title}\nAverage Score: {averageScore}\nStatus: {status}\nGenres: {genres}\nEpisodes: {episodes}\nIs Adult: {isAdult}\nStudios: {studios}\nDescription: {description}\nTrailer: Click Here", + caption=f"Title: {title}\nAverage Score: {average_score}\nStatus: {status}\nGenres: {genres}\nEpisodes: {episodes}\nIs Adult: {is_adult}\nStudios: {studios}\nDescription: {description}\nTrailer: Click Here", ) ], ) @@ -81,7 +81,7 @@ async def anime_search(client: Client, message: Message): [ InputMediaPhoto( 'coverImage.jpg', - caption=f"Title: {title}\nAverage Score: {averageScore}\nStatus: {status}\nGenres: {genres}\nEpisodes: {episodes}\nIs Adult: {isAdult}\nStudios: {studios}\nDescription: {description}\nTrailer: Click Here", + caption=f"Title: {title}\nAverage Score: {average_score}\nStatus: {status}\nGenres: {genres}\nEpisodes: {episodes}\nIs Adult: {is_adult}\nStudios: {studios}\nDescription: {description}\nTrailer: Click Here", ) ], ) @@ -109,22 +109,22 @@ async def manga_search(client: Client, message: Message): result = response.json() - averageScore = result['averageScore'] + average_score = result['average_score'] try: - coverImage_url = result['imageUrl'] - coverImage = requests.get(url=coverImage_url, timeout=10).content + cover_image_url = result['imageUrl'] + cover_image = requests.get(url=cover_image_url, timeout=10).content async with aiofiles.open('coverImage.jpg', mode='wb') as f: - await f.write(coverImage) + await f.write(cover_image) except Exception: - coverImage = None + cover_image = None title = result['title']['english'] trailer = result['trailer']['id'] description = result['description'] chapters = result['chapters'] genres = ', '.join(result['genres']) - isAdult = result['isAdult'] + is_adult = result['is_adult'] status = result['status'] studios = ', '.join(result['studios']) @@ -134,7 +134,7 @@ async def manga_search(client: Client, message: Message): [ InputMediaPhoto( 'coverImage.jpg', - caption=f"Title: {title}\nAverage Score: {averageScore}\nStatus: {status}\nGenres: {genres}\nChapters: {chapters}\nIs Adult: {isAdult}\nStudios: {studios}\nDescription: {description}\nTrailer: Click Here", + caption=f"Title: {title}\nAverage Score: {average_score}\nStatus: {status}\nGenres: {genres}\nChapters: {chapters}\nIs Adult: {is_adult}\nStudios: {studios}\nDescription: {description}\nTrailer: Click Here", ) ], ) @@ -147,7 +147,7 @@ async def manga_search(client: Client, message: Message): [ InputMediaPhoto( 'coverImage.jpg', - caption=f"Title: {title}\nAverage Score: {averageScore}\nStatus: {status}\nGenres: {genres}\nChapters: {chapters}\nIs Adult: {isAdult}\nStudios: {studios}\nDescription: {description}\nTrailer: Click Here", + caption=f"Title: {title}\nAverage Score: {average_score}\nStatus: {status}\nGenres: {genres}\nChapters: {chapters}\nIs Adult: {is_adult}\nStudios: {studios}\nDescription: {description}\nTrailer: Click Here", ) ], ) @@ -176,13 +176,13 @@ async def character(client: Client, message: Message): result = response.json() try: - coverImage_url = result['image']['large'] - coverImage = requests.get(url=coverImage_url, timeout=10).content + cover_image_url = result['image']['large'] + cover_image = requests.get(url=cover_image_url, timeout=10).content async with aiofiles.open('coverImage.jpg', mode='wb') as f: - await f.write(coverImage) + await f.write(cover_image) except Exception: - coverImage = None + cover_image = None age = result['age'] description = result['description'] diff --git a/modules/anime/anime.py b/modules/anime/anime.py index 0b6554a..efa1180 100644 --- a/modules/anime/anime.py +++ b/modules/anime/anime.py @@ -49,7 +49,7 @@ async def random(): @Client.on_message(filters.command(['arnd', 'arandom'], prefix) & filters.me) -async def anime_handler(client: Client, message: Message): +async def anime_handler(_client: Client, message: Message): try: await message.edit('Searching art', parse_mode=enums.ParseMode.HTML) ra = await random() diff --git a/modules/blackbox.py b/modules/blackbox.py index 0a6bbf0..5ed3359 100644 --- a/modules/blackbox.py +++ b/modules/blackbox.py @@ -11,7 +11,7 @@ def id_generator() -> str: @Client.on_message(filters.command(['bbox', 'blackbox'], prefix) & filters.me) -async def blackbox(client, message): +async def blackbox(_client, message): m = message msg = await m.edit_text('๐Ÿ”') diff --git a/modules/cohere.py b/modules/cohere.py index 4470739..fac15f3 100644 --- a/modules/cohere.py +++ b/modules/cohere.py @@ -5,7 +5,7 @@ from utils.scripts import import_library cohere = import_library('cohere') -import cohere # noqa: F811 +import cohere # noqa: F811, E402 co = cohere.Client(cohere_key) diff --git a/modules/demotivator.py b/modules/demotivator.py index c1b5d68..6c61672 100644 --- a/modules/demotivator.py +++ b/modules/demotivator.py @@ -15,7 +15,9 @@ from PIL import Image, ImageDraw, ImageFont # noqa: E402 @Client.on_message(filters.command(['dem'], prefix) & filters.me) async def demotivator(client: Client, message: Message): await message.edit('Process of demotivation...', parse_mode=enums.ParseMode.HTML) - font = requests.get('https://github.com/The-MoonTg-project/files/blob/main/Times%20New%20Roman.ttf?raw=true', timeout=10) + font = requests.get( + 'https://github.com/The-MoonTg-project/files/blob/main/Times%20New%20Roman.ttf?raw=true', timeout=10 + ) f = font.content template_dem = requests.get('https://raw.githubusercontent.com/files/main/demotivator.png', timeout=10) if message.reply_to_message: diff --git a/modules/destroy.py b/modules/destroy.py index 8c23595..95c2f39 100644 --- a/modules/destroy.py +++ b/modules/destroy.py @@ -11,7 +11,7 @@ from lottie.importers import importers # noqa: E402 @Client.on_message(filters.command('destroy', prefix) & filters.me) -async def destroy_sticker(client: Client, message: Message): +async def destroy_sticker(_client: Client, message: Message): """Destroy animated stickers by modifying their animation properties""" try: reply = message.reply_to_message diff --git a/modules/direct.py b/modules/direct.py index 498a444..6f4ce95 100644 --- a/modules/direct.py +++ b/modules/direct.py @@ -30,11 +30,11 @@ def subprocess_run(cmd): executable='bash', ) talk = subproc.communicate() - exitCode = subproc.returncode - if exitCode != 0: + exit_code = subproc.returncode + if exit_code != 0: reply += ( '```An error was detected while running the subprocess:\n' - f'exit code: {exitCode}\n' + f'exit code: {exit_code}\n' f'stdout: {talk[0]}\n' f'stderr: {talk[1]}```' ) diff --git a/modules/duckduckgo.py b/modules/duckduckgo.py index 1308dfc..31b59b2 100644 --- a/modules/duckduckgo.py +++ b/modules/duckduckgo.py @@ -4,7 +4,7 @@ from utils.misc import prefix @Client.on_message(filters.command('duck', prefix) & filters.me) -async def duckgo(client: Client, message: Message): +async def duckgo(_client: Client, message: Message): input_str = ' '.join(message.command[1:]) sample_url = 'https://duckduckgo.com/?q={}'.format(input_str.replace(' ', '+')) if sample_url: diff --git a/modules/example.py b/modules/example.py index ca3da04..78b925b 100644 --- a/modules/example.py +++ b/modules/example.py @@ -29,7 +29,7 @@ from utils.misc import modules_help, prefix @Client.on_message(filters.command('example_edit', prefix) & filters.me) -async def example_edit(client: Client, message: Message): +async def example_edit(_client: Client, message: Message): try: await message.edit('This is an example module') except Exception as e: diff --git a/modules/fliptext.py b/modules/fliptext.py index b85f36a..c625bca 100644 --- a/modules/fliptext.py +++ b/modules/fliptext.py @@ -85,7 +85,7 @@ REPLACEMENT_MAP = { @Client.on_message(filters.command('flip', prefix) & filters.me) -async def flip(client: Client, message: Message): +async def flip(_client: Client, message: Message): text = ' '.join(message.command[1:]) final_str = '' for char in text: diff --git a/modules/flux.py b/modules/flux.py index 4244a15..3b9ea80 100644 --- a/modules/flux.py +++ b/modules/flux.py @@ -9,9 +9,9 @@ from utils.scripts import format_exc, progress def schellwithflux(args): - API_URL = 'https://randydev-ryuzaki-api.hf.space/api/v1/akeno/fluxai' + api_url = 'https://randydev-ryuzaki-api.hf.space/api/v1/akeno/fluxai' payload = {'user_id': 1191668125, 'args': args} # Please don't edit here - response = requests.post(API_URL, json=payload, timeout=10) + response = requests.post(api_url, json=payload, timeout=10) if response.status_code != 200: print(f'Error status {response.status_code}') return None @@ -19,7 +19,7 @@ def schellwithflux(args): @Client.on_message(filters.command('fluxai', prefix) & filters.me) -async def imgfluxai_(client: Client, message: Message): +async def imgfluxai_(_client: Client, message: Message): question = message.text.split(' ', 1)[1] if len(message.command) > 1 else None if not question: return await message.reply_text('Please provide a question for Flux.') diff --git a/modules/hearts.py b/modules/hearts.py index 4b4f128..4bcf68c 100644 --- a/modules/hearts.py +++ b/modules/hearts.py @@ -37,20 +37,20 @@ async def _wrap_edit(message: Message, text: str): async def phase1(message: Message): """Big scroll""" - BIG_SCROLL = '๐Ÿงก๐Ÿ’›๐Ÿ’š๐Ÿ’™๐Ÿ’œ๐Ÿ–ค๐ŸคŽ' + big_scroll = '๐Ÿงก๐Ÿ’›๐Ÿ’š๐Ÿ’™๐Ÿ’œ๐Ÿ–ค๐ŸคŽ' await _wrap_edit(message, joined_heart) - for heart in BIG_SCROLL: + for heart in big_scroll: await _wrap_edit(message, joined_heart.replace(R, heart)) await asyncio.sleep(SLEEP) async def phase2(message: Message): """Per-heart randomiser""" - ALL = ['โค๏ธ'] + list('๐Ÿงก๐Ÿ’›๐Ÿ’š๐Ÿ’™๐Ÿ’œ๐ŸคŽ๐Ÿ–ค') # don't include white heart + all_hearts = ['โค๏ธ'] + list('๐Ÿงก๐Ÿ’›๐Ÿ’š๐Ÿ’™๐Ÿ’œ๐ŸคŽ๐Ÿ–ค') # don't include white heart format_heart = joined_heart.replace(R, '{}') for _ in range(5): - heart = format_heart.format(*random.choices(ALL, k=heartlet_len)) # noqa: S311 + heart = format_heart.format(*random.choices(all_hearts, k=heartlet_len)) # noqa: S311 await _wrap_edit(message, heart) await asyncio.sleep(SLEEP) @@ -75,7 +75,7 @@ async def phase4(message: Message): @Client.on_message(filters.command('hearts', prefix) & filters.me) -async def hearts(client: Client, message: Message): +async def hearts(_client: Client, message: Message): await phase1(message) await phase2(message) await phase3(message) diff --git a/modules/loader.py b/modules/loader.py index 7816d25..9c189f1 100644 --- a/modules/loader.py +++ b/modules/loader.py @@ -85,8 +85,8 @@ async def loadmod(_, message: Message): module_name = url.lower() try: f = requests.get( - 'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/full.txt' - , timeout=10).text + 'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/full.txt', timeout=10 + ).text except Exception: return await message.edit('Failed to fetch custom modules list') modules_dict = {line.split('/')[-1].split()[0]: line.strip() for line in f.splitlines()} @@ -97,8 +97,9 @@ async def loadmod(_, message: Message): return else: modules_hashes = requests.get( - 'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/modules_hashes.txt' - , timeout=10).text + 'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/modules_hashes.txt', + timeout=10, + ).text resp = requests.get(url, timeout=10) if not resp.ok: @@ -136,8 +137,8 @@ async def loadmod(_, message: Message): content = f.read() modules_hashes = requests.get( - 'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/modules_hashes.txt' - , timeout=10).text + 'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/modules_hashes.txt', timeout=10 + ).text if hashlib.sha256(content).hexdigest() not in modules_hashes: os.remove(file_name) @@ -214,7 +215,9 @@ async def load_all_mods(_, message: Message): os.mkdir(f'{BASE_PATH}/modules/custom_modules') try: - f = requests.get('https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/full.txt', timeout=10).text + f = requests.get( + 'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/full.txt', timeout=10 + ).text except Exception: return await message.edit('Failed to fetch custom modules list') modules_list = f.splitlines() @@ -281,14 +284,17 @@ async def updateallmods(_, message: Message): if not module_name.endswith('.py'): continue try: - f = requests.get('https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/full.txt', timeout=10).text + f = requests.get( + 'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/full.txt', timeout=10 + ).text except Exception: return await message.edit('Failed to fetch custom modules list') modules_dict = {line.split('/')[-1].split()[0]: line.strip() for line in f.splitlines()} if module_name in modules_dict: resp = requests.get( - f'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/{modules_dict[module_name]}.py' - , timeout=10) + f'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/{modules_dict[module_name]}.py', + timeout=10, + ) if not resp.ok: modules_installed.remove(module_name) continue diff --git a/modules/misc/autofwd.py b/modules/misc/autofwd.py index 73b2285..0951653 100644 --- a/modules/misc/autofwd.py +++ b/modules/misc/autofwd.py @@ -140,20 +140,20 @@ async def autofwd_main(client: Client, message: Message): target_chats = db.get('custom.autofwd', 'chatto') if source_chats is not None and chat_id in source_chats and target_chats is not None: - for chat in target_chats: + for chat in target_chats: + try: + await message.copy(chat) + except Exception as e: try: - await message.copy(chat) - except Exception as e: - try: - await client.send_message( - 'me', - f'Auto Forwarding Failed for Chat with id: {chat_id} to {chat}\n\n{e}', - ) - except MessageTooLong: - await client.send_message( - 'me', - f'Auto Forwarding Failed for Chat with id: {chat_id} to {chat}, Please check logs!', - ) + await client.send_message( + 'me', + f'Auto Forwarding Failed for Chat with id: {chat_id} to {chat}\n\n{e}', + ) + except MessageTooLong: + await client.send_message( + 'me', + f'Auto Forwarding Failed for Chat with id: {chat_id} to {chat}, Please check logs!', + ) modules_help['autofwd'] = { diff --git a/modules/misc/backup.py b/modules/misc/backup.py index f6f33fc..1f69c23 100644 --- a/modules/misc/backup.py +++ b/modules/misc/backup.py @@ -63,7 +63,7 @@ async def backup(client: Client, message: Message): @Client.on_message(filters.command(['restore', 'res'], prefix) & filters.me) -async def restore(client: Client, message: Message): +async def restore(_client: Client, message: Message): """ Restore the database """ @@ -98,7 +98,7 @@ async def restore(client: Client, message: Message): @Client.on_message(filters.command(['backupmods', 'bms'], prefix) & filters.me) -async def backupmods(client: Client, message: Message): +async def backupmods(_client: Client, message: Message): """ Backup the modules """ @@ -112,8 +112,8 @@ async def backupmods(client: Client, message: Message): for mod in modules_help: if os.path.isfile(f'modules/custom_modules/{mod}.py'): - f = open(f'backups/{mod}.py', 'wb') - f.write(open(f'modules/custom_modules/{mod}.py', 'rb').read()) + with open(f'backups/{mod}.py', 'wb') as f, open(f'modules/custom_modules/{mod}.py', 'rb') as src: + f.write(src.read()) await message.edit( text='All modules backed up to: backups/ folder', parse_mode=enums.ParseMode.HTML, @@ -123,7 +123,7 @@ async def backupmods(client: Client, message: Message): @Client.on_message(filters.command(['backupmod', 'bm'], prefix) & filters.me) -async def backupmod(client: Client, message: Message): +async def backupmod(_client: Client, message: Message): """ Backup the module """ @@ -142,8 +142,8 @@ async def backupmod(client: Client, message: Message): await message.edit('Backing up module...', parse_mode=enums.ParseMode.HTML) if os.path.isfile(f'modules/custom_modules/{mod}.py'): - f = open(f'backups/{mod}.py', 'wb') - f.write(open(f'modules/custom_modules/{mod}.py', 'rb').read()) + with open(f'backups/{mod}.py', 'wb') as f, open(f'modules/custom_modules/{mod}.py', 'rb') as src: + f.write(src.read()) else: return await message.edit( f'Module {mod} not found.', @@ -159,7 +159,7 @@ async def backupmod(client: Client, message: Message): @Client.on_message(filters.command(['restoremod', 'resmod'], prefix) & filters.me) -async def restoremod(client: Client, message: Message): +async def restoremod(_client: Client, message: Message): """ Restore the module """ @@ -178,11 +178,11 @@ async def restoremod(client: Client, message: Message): await message.edit('Restoring module...', parse_mode=enums.ParseMode.HTML) if os.path.isfile(f'backups/{mod}.py'): - f = open(f'modules/custom_modules/{mod}.py', 'wb') - f.write(open(f'backups/{mod}.py', 'rb').read()) + with open(f'modules/custom_modules/{mod}.py', 'wb') as f, open(f'backups/{mod}.py', 'rb') as src: + f.write(src.read()) else: return await message.edit( - f'Module {mod} not found.', + text='Backup file {mod} not found', parse_mode=enums.ParseMode.HTML, ) await message.edit( @@ -195,7 +195,7 @@ async def restoremod(client: Client, message: Message): @Client.on_message(filters.command(['restoremods', 'resmods'], prefix) & filters.me) -async def restoremods(client: Client, message: Message): +async def restoremods(_client: Client, message: Message): """ Restore the modules """ @@ -209,8 +209,8 @@ async def restoremods(client: Client, message: Message): if mod.endswith('.py'): if os.path.isfile(f'modules/{mod}'): continue - f = open(f'modules/custom_modules/{mod}', 'wb') - f.write(open(f'backups/{mod}', 'rb').read()) + with open(f'modules/custom_modules/{mod}', 'wb') as f, open(f'backups/{mod}', 'rb') as src: + f.write(src.read()) await message.edit( text='All modules restored from: backups/ folder', parse_mode=enums.ParseMode.HTML, diff --git a/modules/misc/prayer.py b/modules/misc/prayer.py index bf2d33c..a115c51 100644 --- a/modules/misc/prayer.py +++ b/modules/misc/prayer.py @@ -41,7 +41,7 @@ def format_time_12hr(time_str: str) -> str: @Client.on_message(filters.command('prayer', prefix) & filters.me) -async def namaz_times(client: Client, message: Message): +async def namaz_times(_client: Client, message: Message): if message.reply_to_message: city_name = message.reply_to_message.text country_name = DEFAULT_COUNTRY # Default to Pakistan if no country is provided diff --git a/modules/misc/safone.py b/modules/misc/safone.py index d5520a6..ba2a44d 100644 --- a/modules/misc/safone.py +++ b/modules/misc/safone.py @@ -166,17 +166,17 @@ async def app(client: Client, message: Message): result = response.json() try: - coverImage_url = result['results'][0]['icon'] - coverImage = requests.get(url=coverImage_url, timeout=10).content - async with aiofiles.open('coverImage.jpg', mode='wb') as f: - await f.write(coverImage) + cover_image_url = result['results'][0]['icon'] + cover_image = requests.get(url=cover_image_url, timeout=10).content + async with aiofiles.open('cover_image.jpg', mode='wb') as f: + await f.write(cover_image) except Exception: - coverImage = None + cover_image = None description = result['results'][0]['description'] developer = result['results'][0]['developer'] - IsFree = result['results'][0]['free'] + is_free = result['results'][0]['free'] genre = result['results'][0]['genre'] package_name = result['results'][0]['id'] title = result['results'][0]['title'] @@ -189,8 +189,8 @@ async def app(client: Client, message: Message): chat_id, [ InputMediaPhoto( - 'coverImage.jpg', - caption=f'Title: {title}\nRating: {rating}\nIsFree: {IsFree}\nPrice: {price}\nPackage Name: {package_name}\nGenres: {genre}\nDeveloper: {developer}\nDescription: {description}\nLink: {link}', + 'cover_image.jpg', + caption=f'Title: {title}\nRating: {rating}\nis_free: {is_free}\nPrice: {price}\nPackage Name: {package_name}\nGenres: {genre}\nDeveloper: {developer}\nDescription: {description}\nLink: {link}', ) ], ) @@ -202,16 +202,16 @@ async def app(client: Client, message: Message): chat_id, [ InputMediaPhoto( - 'coverImage.jpg', - caption=f'Title: {title}\nRating: {rating}\nIsFree: {IsFree}\nPrice: {price}\nPackage Name: {package_name}\nGenres: {genre}\nDeveloper: {developer}\nDescription: {description}\nLink: {link}', + 'cover_image.jpg', + caption=f'Title: {title}\nRating: {rating}\nis_free: {is_free}\nPrice: {price}\nPackage Name: {package_name}\nGenres: {genre}\nDeveloper: {developer}\nDescription: {description}\nLink: {link}', ) ], ) except Exception as e: await message.edit_text(format_exc(e)) finally: - if os.path.exists('coverImage.jpg'): - os.remove('coverImage.jpg') + if os.path.exists('cover_image.jpg'): + os.remove('cover_image.jpg') @Client.on_message(filters.command('tsearch', prefix) & filters.me) @@ -232,7 +232,7 @@ async def tsearch(client: Client, message: Message): result = response.json() - coverImage_url = result['results'][0]['thumbnail'] + cover_image_url = result['results'][0]['thumbnail'] description = result['results'][0]['description'] genre = result['results'][0]['genre'] category = result['results'][0]['category'] @@ -264,17 +264,17 @@ async def tsearch(client: Client, message: Message): content=all_results_content, ) - if coverImage_url is not None: - coverImage = requests.get(url=coverImage_url, timeout=10).content - async with aiofiles.open('coverImage.jpg', mode='wb') as f: - await f.write(coverImage) + if cover_image_url is not None: + cover_image = requests.get(url=cover_image_url, timeout=10).content + async with aiofiles.open('cover_image.jpg', mode='wb') as f: + await f.write(cover_image) await message.delete() await client.send_media_group( chat_id, [ InputMediaPhoto( - 'coverImage.jpg', + 'cover_image.jpg', caption=f"Title: {title}\nCategory: {category}\nLanguage: {language}\nSize: {size}\nGenres: {genre}\nDescription: {description}\nMagnet Link: Click Here\nMore Results: Click Here", ) ], @@ -292,7 +292,7 @@ async def tsearch(client: Client, message: Message): chat_id, [ InputMediaPhoto( - 'coverImage.jpg', + 'cover_image.jpg', caption=f"Title: {title}\nCategory: {category}\nLanguage: {language}\nSize: {size}\nGenres: {genre}\nDescription: {description}\nMagnet Link: Click Here", ) ], @@ -308,8 +308,8 @@ async def tsearch(client: Client, message: Message): except Exception as e: await message.edit_text(format_exc(e)) finally: - if os.path.exists('coverImage.jpg'): - os.remove('coverImage.jpg') + if os.path.exists('cover_image.jpg'): + os.remove('cover_image.jpg') @Client.on_message(filters.command('stts', prefix) & filters.me) diff --git a/modules/python.py b/modules/python.py index 5e166f7..72d41c1 100644 --- a/modules/python.py +++ b/modules/python.py @@ -53,7 +53,7 @@ async def user_exec(_: Client, message: Message): # noinspection PyUnusedLocal @Client.on_message(filters.command(['ev', 'eval'], prefix) & filters.me) -async def user_eval(client: Client, message: Message): +async def user_eval(_client: Client, message: Message): if len(message.command) == 1: await message.edit("Code to eval isn't provided") return diff --git a/modules/removebg.py b/modules/removebg.py index db720e1..05e9521 100644 --- a/modules/removebg.py +++ b/modules/removebg.py @@ -119,22 +119,23 @@ async def rmbg(client: Client, message: Message): start = datetime.now() await pablo.edit('sending to ReMove.BG') input_file_name = cool - files = { - 'image_file': (input_file_name, open(input_file_name, 'rb')), - } - r = requests.post( - 'https://api.remove.bg/v1.0/removebg', - headers={'X-Api-Key': rmbg_key}, - files=files, - allow_redirects=True, - stream=True, - timeout=10, - ) + with open(input_file_name, 'rb') as f: + files = { + 'image_file': (input_file_name, f), + } + r = requests.post( + 'https://api.remove.bg/v1.0/removebg', + headers={'X-Api-Key': rmbg_key}, + files=files, + allow_redirects=True, + stream=True, + timeout=10, + ) if os.path.exists(cool): os.remove(cool) output_file_name = r - contentType = output_file_name.headers.get('content-type') - if 'image' in contentType: + content_type = output_file_name.headers.get('content-type') + if 'image' in content_type: with io.BytesIO(output_file_name.content) as remove_bg_image: remove_bg_image.name = 'BG_rem.png' await client.send_document(message.chat.id, remove_bg_image, reply_to_message_id=message.id) diff --git a/modules/socialstalk.py b/modules/socialstalk.py index f6769df..a154836 100644 --- a/modules/socialstalk.py +++ b/modules/socialstalk.py @@ -67,8 +67,9 @@ async def ipinfo(_, message: Message): await m.edit_text('๐Ÿ”Ž') try: url = requests.get( - f'http://ip-api.com/json/{searchip}?fields=status,message,continent,continentCode,country,countryCode,region,regionName,city,district,zip,lat,lon,timezone,offset,currency,isp,org,as,asname,reverse,mobile,proxy,hosting,query' - , timeout=10) + f'http://ip-api.com/json/{searchip}?fields=status,message,continent,continentCode,country,countryCode,region,regionName,city,district,zip,lat,lon,timezone,offset,currency,isp,org,as,asname,reverse,mobile,proxy,hosting,query', + timeout=10, + ) response = json.loads(url.text) text = f""" IP Address: {response['query']} diff --git a/modules/spin.py b/modules/spin.py index dac7778..24843d2 100644 --- a/modules/spin.py +++ b/modules/spin.py @@ -102,7 +102,8 @@ async def spin_handler(client: Client, message: Message): elif message.reply_to_message.text: result = await quote_cmd(client, message) filename = 'sticker.png' if result[1] else 'sticker.webp' - open('downloads/' + filename, 'wb').write(result[0].getbuffer()) + with open('downloads/' + filename, 'wb') as f: + f.write(result[0].getbuffer()) coro = False else: filename = 'photo.jpg' diff --git a/modules/thumbnail.py b/modules/thumbnail.py index 99764b4..0d8e3c6 100644 --- a/modules/thumbnail.py +++ b/modules/thumbnail.py @@ -24,14 +24,14 @@ from utils.misc import modules_help, prefix @Client.on_message(filters.command('setthumb', prefix) & filters.me) async def setthumb(_, message: Message): - THUMB_PATH = 'downloads/thumb' + thumb_path = 'downloads/thumb' if message.reply_to_message: - if not os.path.exists(THUMB_PATH): - os.makedirs(THUMB_PATH) + if not os.path.exists(thumb_path): + os.makedirs(thumb_path) new_thumb = await message.reply_to_message.download() with Image.open(new_thumb) as img: if img.format in ['PNG', 'JPG', 'JPEG']: - new_path = os.path.join(THUMB_PATH, 'thumb.jpg') + new_path = os.path.join(thumb_path, 'thumb.jpg') os.rename(new_thumb, new_path) await message.edit_text('Thumbnail set successfully!') else: diff --git a/modules/vt.py b/modules/vt.py index efc70be..30d4bff 100644 --- a/modules/vt.py +++ b/modules/vt.py @@ -48,8 +48,9 @@ async def scan_my_file(_, message: Message): url = 'https://www.virustotal.com/vtapi/v2/file/scan' params = {'apikey': vak} - files = {'file': (downloaded_file_name, open(downloaded_file_name, 'rb'))} - response = requests.post(url, files=files, params=params, timeout=10) + with open(downloaded_file_name, 'rb') as f: + files = {'file': (downloaded_file_name, f)} + response = requests.post(url, files=files, params=params, timeout=10) try: r_json = response.json() md5 = r_json['md5'] @@ -104,9 +105,10 @@ async def scan_my_large_file(_, message: Message): url = upl_data - files = {'file': (downloaded_file_name, open(downloaded_file_name, 'rb'))} - headers = {'accept': 'application/json', 'x-apikey': vak} - response = requests.post(url, files=files, headers=headers, timeout=10) + with open(downloaded_file_name, 'rb') as f: + files = {'file': (downloaded_file_name, f)} + headers = {'accept': 'application/json', 'x-apikey': vak} + response = requests.post(url, files=files, headers=headers, timeout=10) r_json = response.json() analysis_url = r_json['data']['links']['self'] diff --git a/utils/conv.py b/utils/conv.py index b56e909..cf8854b 100644 --- a/utils/conv.py +++ b/utils/conv.py @@ -23,7 +23,7 @@ from pyrogram.handlers import MessageHandler class _TrueFilter(filters.Filter): - async def __call__(self, client: Client, update: types.Message): + async def __call__(self, _client: Client, _update: types.Message): return True diff --git a/utils/db.py b/utils/db.py index 90a2dc2..672e817 100644 --- a/utils/db.py +++ b/utils/db.py @@ -149,7 +149,7 @@ class SqliteDatabase(Database): self._lock.release() def get(self, module: str, variable: str, default=None): - sql = f"SELECT * FROM '{module}' WHERE var=?" + sql = f"SELECT * FROM '{module}' WHERE var=?" # noqa: S608 cur = self._execute(module, sql, (variable,)) row = cur.fetchone() @@ -162,7 +162,7 @@ class SqliteDatabase(Database): INSERT INTO '{module}' VALUES ( ?, ?, ? ) ON CONFLICT (var) DO UPDATE SET val=?, type=? WHERE var=? - """ + """ # noqa: S608 if isinstance(value, bool): val = '1' if value else '0' @@ -183,7 +183,7 @@ class SqliteDatabase(Database): return True def remove(self, module: str, variable: str): - sql = f"DELETE FROM '{module}' WHERE var=?" + sql = f"DELETE FROM '{module}' WHERE var=?" # noqa: S608 self._execute(module, sql, (variable,)) self._conn.commit() @@ -192,7 +192,7 @@ class SqliteDatabase(Database): if not re.match(pattern, module): raise ValueError(f'Invalid module name format: {module}') - sql = f"SELECT * FROM '{module}'" + sql = f"SELECT * FROM '{module}'" # noqa: S608 cur = self._execute(module, sql) collection = {} diff --git a/utils/rentry.py b/utils/rentry.py index 32c6aae..c46ceb5 100644 --- a/utils/rentry.py +++ b/utils/rentry.py @@ -138,14 +138,14 @@ async def paste( print(f'URL: {url} - Edit Code: {edit_code} - Time: {ftime}') - rallUrls = db.get('core.rentry', 'urls', default={'allUrls': {}}) + rall_urls = db.get('core.rentry', 'urls', default={'allUrls': {}}) entry_id = str(uuid4()) - rallUrls['allUrls'][entry_id] = { + rall_urls['allUrls'][entry_id] = { 'url': short_url, 'edit_code': edit_code, 'time': ftime, } - db.set('core.rentry', 'urls', rallUrls) + db.set('core.rentry', 'urls', rall_urls) if return_edit: return (url, edit_code) @@ -156,19 +156,19 @@ async def rentry_cleanup_job(): """Periodically checks and deletes rentry pastes older than 24 hours""" while True: try: - rallUrls = db.get('core.rentry', 'urls', default={'allUrls': {}}) + rall_urls = db.get('core.rentry', 'urls', default={'allUrls': {}}) now = datetime.now() deleted_count = 0 error_count = 0 - for entry_id, entry in list(rallUrls['allUrls'].items()): + for entry_id, entry in list(rall_urls['allUrls'].items()): url = entry['url'] entry_time = datetime.strptime(entry['time'], '%d %I:%M:%S %p %Y') if now - entry_time > timedelta(days=1): try: delete(url, entry['edit_code']) - del rallUrls['allUrls'][entry_id] + del rall_urls['allUrls'][entry_id] deleted_count += 1 print(f'[#] Deleted expired rentry paste: {url}') except Exception as e: @@ -179,7 +179,7 @@ async def rentry_cleanup_job(): print(f'[*] Cleanup summary: {deleted_count} deleted, {error_count} failed') if deleted_count: - db.set('core.rentry', 'urls', rallUrls) + db.set('core.rentry', 'urls', rall_urls) except Exception as e: print(f'[!] Error in rentry cleanup job: {str(e)}')