From a7008c664e4a87a615a1cba353bd19d6317b8304 Mon Sep 17 00:00:00 2001 From: yasirarism <55983182+yasirarism@users.noreply.github.com> Date: Tue, 27 Jun 2023 04:07:42 +0000 Subject: [PATCH] Reformat using black (#120) * ci: Update .deepsource.toml * ci: Update .deepsource.toml * style: format code with black and isort Format code with black and isort This commit fixes the style issues introduced in 0fb651a according to the output from Black and isort. Details: https://app.deepsource.com/gh/yasirarism/MissKatyPyro/transform/d8f2f66e-b496-4686-aca6-9830236eda12/ --------- Co-authored-by: deepsource-io[bot] <42547082+deepsource-io[bot]@users.noreply.github.com> Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- .deepsource.toml | 10 +- database/__init__.py | 3 +- database/afk_db.py | 4 +- database/imdb_db.py | 4 +- database/karma_db.py | 4 +- database/notes_db.py | 4 +- database/users_chats_db.py | 1 + database/warn_db.py | 4 +- misskaty/core/decorator/misc.py | 8 +- misskaty/core/decorator/pyro_cooldown.py | 8 +- misskaty/core/keyboard.py | 7 +- misskaty/core/message_utils.py | 8 +- misskaty/core/misskaty_patch/bound/message.py | 34 ++++-- misskaty/helper/eval_helper.py | 26 ++++- misskaty/helper/ffmpeg_helper.py | 24 +++- misskaty/helper/files.py | 10 +- misskaty/helper/human_read.py | 6 +- misskaty/helper/localization.py | 8 +- misskaty/helper/media_helper.py | 8 +- misskaty/helper/mediainfo_paste.py | 28 +++-- misskaty/helper/misc.py | 12 +- misskaty/helper/pyro_progress.py | 15 ++- misskaty/helper/stickerset.py | 12 +- misskaty/helper/subscene_helper.py | 19 +++- misskaty/helper/tools.py | 11 +- misskaty/plugins/__init__.py | 20 +++- misskaty/plugins/anime.py | 26 ++++- misskaty/plugins/auto_approve.py | 24 +++- misskaty/plugins/broadcast.py | 8 +- misskaty/plugins/bypass.py | 13 ++- misskaty/plugins/chatbot_ai.py | 12 +- misskaty/plugins/code_tester.py | 8 +- misskaty/plugins/currency.py | 17 ++- misskaty/plugins/download_upload.py | 46 ++++++-- misskaty/plugins/filter_request.py | 85 +++++++++++--- misskaty/plugins/filters.py | 8 +- misskaty/plugins/fun.py | 16 ++- misskaty/plugins/genss.py | 20 +++- misskaty/plugins/inkick_user.py | 107 +++++++++++++----- misskaty/plugins/inline_search.py | 11 +- misskaty/plugins/karma.py | 34 +++++- misskaty/plugins/locks.py | 9 +- misskaty/plugins/media_extractor.py | 53 +++++++-- misskaty/plugins/mediainfo.py | 36 ++++-- misskaty/plugins/nightmodev2.py | 46 ++++++-- misskaty/plugins/notes.py | 4 +- misskaty/plugins/nulis.py | 8 +- misskaty/plugins/ocr.py | 15 ++- misskaty/plugins/ping.py | 4 +- misskaty/plugins/pypi_search.py | 42 +++++-- misskaty/plugins/quotly.py | 75 ++++++++++-- misskaty/plugins/sangmata.py | 31 ++++- misskaty/plugins/sed.py | 8 +- misskaty/plugins/session_generator.py | 41 +++++-- misskaty/plugins/stickers.py | 46 ++++++-- misskaty/plugins/subscene_dl.py | 60 +++++++--- misskaty/plugins/ubot_plugin.py | 37 ++++-- misskaty/plugins/webss.py | 6 +- 58 files changed, 977 insertions(+), 277 deletions(-) diff --git a/.deepsource.toml b/.deepsource.toml index f4bfc56c..75b76df3 100644 --- a/.deepsource.toml +++ b/.deepsource.toml @@ -2,12 +2,12 @@ version = 1 [[analyzers]] name = "python" -enabled = true -dependency_file_paths = ["requirements.txt"] [analyzers.meta] runtime_version = "3.x.x" - max_line_length = 100 - + [[transformers]] -name = "isort" \ No newline at end of file +name = "isort" + +[[transformers]] +name = "black" \ No newline at end of file diff --git a/database/__init__.py b/database/__init__.py index dcbdfa0a..0da3654d 100644 --- a/database/__init__.py +++ b/database/__init__.py @@ -5,7 +5,8 @@ * Copyright @YasirPedia All rights reserved """ from async_pymongo import AsyncClient -from misskaty.vars import DATABASE_URI, DATABASE_NAME + +from misskaty.vars import DATABASE_NAME, DATABASE_URI mongo = AsyncClient(DATABASE_URI) dbname = mongo[DATABASE_NAME] diff --git a/database/afk_db.py b/database/afk_db.py index 87644745..a60217cd 100644 --- a/database/afk_db.py +++ b/database/afk_db.py @@ -47,7 +47,9 @@ async def is_afk(user_id: int) -> bool: async def add_afk(user_id: int, mode): - await usersdb.update_one({"user_id": user_id}, {"$set": {"reason": mode}}, upsert=True) + await usersdb.update_one( + {"user_id": user_id}, {"$set": {"reason": mode}}, upsert=True + ) async def remove_afk(user_id: int): diff --git a/database/imdb_db.py b/database/imdb_db.py index f1ed2a78..5d3c16e5 100644 --- a/database/imdb_db.py +++ b/database/imdb_db.py @@ -9,7 +9,9 @@ async def is_imdbset(user_id: int) -> bool: async def add_imdbset(user_id: int, lang): - await imbd_db.update_one({"user_id": user_id}, {"$set": {"lang": lang}}, upsert=True) + await imbd_db.update_one( + {"user_id": user_id}, {"$set": {"lang": lang}}, upsert=True + ) async def remove_imdbset(user_id: int): diff --git a/database/karma_db.py b/database/karma_db.py index a3c8ab31..0ce0b9cb 100644 --- a/database/karma_db.py +++ b/database/karma_db.py @@ -43,7 +43,9 @@ async def update_karma(chat_id: int, name: str, karma: dict): name = name.lower().strip() karmas = await get_karmas(chat_id) karmas[name] = karma - await karmadb.update_one({"chat_id": chat_id}, {"$set": {"karma": karmas}}, upsert=True) + await karmadb.update_one( + {"chat_id": chat_id}, {"$set": {"karma": karmas}}, upsert=True + ) async def is_karma_on(chat_id: int) -> bool: diff --git a/database/notes_db.py b/database/notes_db.py index e21432be..f4a3d1a4 100644 --- a/database/notes_db.py +++ b/database/notes_db.py @@ -39,4 +39,6 @@ async def save_note(chat_id: int, name: str, note: dict): _notes = await _get_notes(chat_id) _notes[name] = note - await notesdb.update_one({"chat_id": chat_id}, {"$set": {"notes": _notes}}, upsert=True) + await notesdb.update_one( + {"chat_id": chat_id}, {"$set": {"notes": _notes}}, upsert=True + ) diff --git a/database/users_chats_db.py b/database/users_chats_db.py index 16ea6a3b..a0ac45e7 100644 --- a/database/users_chats_db.py +++ b/database/users_chats_db.py @@ -1,4 +1,5 @@ from async_pymongo import AsyncClient + from misskaty.vars import DATABASE_NAME, DATABASE_URI diff --git a/database/warn_db.py b/database/warn_db.py index 64ab6063..5ca68da8 100644 --- a/database/warn_db.py +++ b/database/warn_db.py @@ -32,7 +32,9 @@ async def add_warn(chat_id: int, name: str, warn: dict): warns = await get_warns(chat_id) warns[name] = warn - await warnsdb.update_one({"chat_id": chat_id}, {"$set": {"warns": warns}}, upsert=True) + await warnsdb.update_one( + {"chat_id": chat_id}, {"$set": {"warns": warns}}, upsert=True + ) async def remove_warns(chat_id: int, name: str) -> bool: diff --git a/misskaty/core/decorator/misc.py b/misskaty/core/decorator/misc.py index 73c2cf0a..653034d3 100644 --- a/misskaty/core/decorator/misc.py +++ b/misskaty/core/decorator/misc.py @@ -1,8 +1,10 @@ -import asyncio, logging +import asyncio +import logging from functools import wraps LOGGER = logging.getLogger(__name__) + def asyncify(func): async def inner(*args, **kwargs): loop = asyncio.get_running_loop() @@ -19,6 +21,8 @@ def new_task(func): loop = asyncio.get_running_loop() return loop.create_task(func(*args, **kwargs)) except Exception as e: - LOGGER.error(f"Failed to create task for {func.__name__} : {e}") # skipcq: PYL-E0602 + LOGGER.error( + f"Failed to create task for {func.__name__} : {e}" + ) # skipcq: PYL-E0602 return wrapper diff --git a/misskaty/core/decorator/pyro_cooldown.py b/misskaty/core/decorator/pyro_cooldown.py index 5b1ec2ad..2c0a9032 100644 --- a/misskaty/core/decorator/pyro_cooldown.py +++ b/misskaty/core/decorator/pyro_cooldown.py @@ -12,7 +12,9 @@ async def task(msg, warn=False, sec=None): pass if warn: user = msg.from_user - ids = await msg.reply_msg(f"Sorry {user.mention} [{user.id}], you must wait for {sec}s before using command again..") + ids = await msg.reply_msg( + f"Sorry {user.mention} [{user.id}], you must wait for {sec}s before using command again.." + ) await asyncio.sleep(sec) await ids.edit_msg( f"Alright {user.mention} [{user.id}], your cooldown is over you can command again.", @@ -30,7 +32,9 @@ def wait(sec): else: if not data[user_id]["warned"]: data[user_id]["warned"] = True - asyncio.ensure_future(task(msg, True, flt.data)) # for super accuracy use (future - time.time()) + asyncio.ensure_future( + task(msg, True, flt.data) + ) # for super accuracy use (future - time.time()) return False # cause we dont need delete again asyncio.ensure_future(task(msg)) diff --git a/misskaty/core/keyboard.py b/misskaty/core/keyboard.py index 1736ff66..e80a1cc6 100644 --- a/misskaty/core/keyboard.py +++ b/misskaty/core/keyboard.py @@ -12,7 +12,12 @@ def keyboard(buttons_list, row_width: int = 2): if theres, a url, it will make url button, else callback button """ buttons = InlineKeyboard(row_width=row_width) - data = [Ikb(text=str(i[0]), url=str(i[1])) if is_url(i[1]) else Ikb(text=str(i[0]), callback_data=str(i[1])) for i in buttons_list] + data = [ + Ikb(text=str(i[0]), url=str(i[1])) + if is_url(i[1]) + else Ikb(text=str(i[0]), callback_data=str(i[1])) + for i in buttons_list + ] buttons.add(*data) return buttons diff --git a/misskaty/core/message_utils.py b/misskaty/core/message_utils.py index 848b51cf..47f2484f 100644 --- a/misskaty/core/message_utils.py +++ b/misskaty/core/message_utils.py @@ -25,7 +25,9 @@ async def kirimPesan(msg, text, **kwargs): await asyncio.sleep(e.value) return await kirimPesan(msg, text, **kwargs) except (ChatWriteForbidden, ChatAdminRequired): - LOGGER.info(f"Leaving from {msg.chat.title} [{msg.chat.id}] because doesn't have admin permission.") + LOGGER.info( + f"Leaving from {msg.chat.title} [{msg.chat.id}] because doesn't have admin permission." + ) return await msg.chat.leave() except Exception as e: LOGGER.error(str(e)) @@ -43,7 +45,9 @@ async def editPesan(msg, text, **kwargs): except (MessageNotModified, MessageIdInvalid, MessageEmpty): return except (ChatWriteForbidden, ChatAdminRequired): - LOGGER.info(f"Leaving from {msg.chat.title} [{msg.chat.id}] because doesn't have admin permission.") + LOGGER.info( + f"Leaving from {msg.chat.title} [{msg.chat.id}] because doesn't have admin permission." + ) return await msg.chat.leave() except Exception as e: LOGGER.error(str(e)) diff --git a/misskaty/core/misskaty_patch/bound/message.py b/misskaty/core/misskaty_patch/bound/message.py index 44d5a698..7f8fbb0e 100644 --- a/misskaty/core/misskaty_patch/bound/message.py +++ b/misskaty/core/misskaty_patch/bound/message.py @@ -19,10 +19,16 @@ from pyrogram.types import Message LOGGER = getLogger(__name__) -Message.input = property(lambda m: m.text[m.text.find(m.command[0]) + len(m.command[0]) + 1 :] if len(m.command) > 1 else None) +Message.input = property( + lambda m: m.text[m.text.find(m.command[0]) + len(m.command[0]) + 1 :] + if len(m.command) > 1 + else None +) -async def reply_text(self: Message, text: str, as_raw: bool = False, del_in: int = 0, *args, **kwargs) -> Union["Message", bool]: +async def reply_text( + self: Message, text: str, as_raw: bool = False, del_in: int = 0, *args, **kwargs +) -> Union["Message", bool]: """\nExample: message.reply_msg("hello") Parameters: @@ -70,7 +76,9 @@ async def reply_text(self: Message, text: str, as_raw: bool = False, del_in: int """ try: if as_raw: - msg = await self.reply_text(text=f"{html.escape(text.html)}", *args, **kwargs) + msg = await self.reply_text( + text=f"{html.escape(text.html)}", *args, **kwargs + ) else: msg = await self.reply_text(text=text, *args, **kwargs) if del_in == 0: @@ -81,11 +89,15 @@ async def reply_text(self: Message, text: str, as_raw: bool = False, del_in: int await asleep(e.value) return await reply_text(self, text, *args, **kwargs) except (ChatWriteForbidden, ChatAdminRequired): - LOGGER.info(f"Leaving from {self.chat.title} [{self.chat.id}] because doesn't have admin permission.") + LOGGER.info( + f"Leaving from {self.chat.title} [{self.chat.id}] because doesn't have admin permission." + ) return await self.chat.leave() -async def edit_text(self, text: str, del_in: int = 0, *args, **kwargs) -> Union["Message", bool]: +async def edit_text( + self, text: str, del_in: int = 0, *args, **kwargs +) -> Union["Message", bool]: """\nExample: message.edit_msg("hello") Parameters: @@ -124,13 +136,17 @@ async def edit_text(self, text: str, del_in: int = 0, *args, **kwargs) -> Union[ except MessageNotModified: return False except (ChatWriteForbidden, ChatAdminRequired): - LOGGER.info(f"Leaving from {self.chat.title} [{self.chat.id}] because doesn't have admin permission.") + LOGGER.info( + f"Leaving from {self.chat.title} [{self.chat.id}] because doesn't have admin permission." + ) return await self.chat.leave() except (MessageAuthorRequired, MessageIdInvalid): return await reply_text(self, text=text, *args, **kwargs) -async def edit_or_send_as_file(self, text: str, del_in: int = 0, as_raw: bool = False, *args, **kwargs) -> Union["Message", bool]: +async def edit_or_send_as_file( + self, text: str, del_in: int = 0, as_raw: bool = False, *args, **kwargs +) -> Union["Message", bool]: """\nThis will first try to message.edit. If it raises MessageTooLong error, run message.send_as_file. @@ -180,7 +196,9 @@ async def edit_or_send_as_file(self, text: str, del_in: int = 0, as_raw: bool = return await reply_as_file(self, text=text, *args, **kwargs) -async def reply_or_send_as_file(self, text: str, as_raw: bool = False, del_in: int = 0, *args, **kwargs) -> Union["Message", bool]: +async def reply_or_send_as_file( + self, text: str, as_raw: bool = False, del_in: int = 0, *args, **kwargs +) -> Union["Message", bool]: """\nThis will first try to message.reply. If it raise MessageTooLong error, run message.send_as_file. diff --git a/misskaty/helper/eval_helper.py b/misskaty/helper/eval_helper.py index 988522f3..86f1c49c 100644 --- a/misskaty/helper/eval_helper.py +++ b/misskaty/helper/eval_helper.py @@ -45,7 +45,9 @@ async def meval(code, globs, **kwargs): if not any(isinstance(node, ast.Return) for node in code): for i in range(len(code)): - if isinstance(code[i], ast.Expr) and (i == len(code) - 1 or not isinstance(code[i].value, ast.Call)): + if isinstance(code[i], ast.Expr) and ( + i == len(code) - 1 or not isinstance(code[i].value, ast.Call) + ): code[i] = ast.copy_location( ast.Expr( ast.Call( @@ -65,18 +67,26 @@ async def meval(code, globs, **kwargs): if isinstance(node, ast.Return): node.value = ast.List(elts=[node.value], ctx=ast.Load()) - code.append(ast.copy_location(ast.Return(value=ast.Name(id=ret_name, ctx=ast.Load())), code[-1])) + code.append( + ast.copy_location( + ast.Return(value=ast.Name(id=ret_name, ctx=ast.Load())), code[-1] + ) + ) # globals().update(**) glob_copy = ast.Expr( ast.Call( func=ast.Attribute( - value=ast.Call(func=ast.Name(id="globals", ctx=ast.Load()), args=[], keywords=[]), + value=ast.Call( + func=ast.Name(id="globals", ctx=ast.Load()), args=[], keywords=[] + ), attr="update", ctx=ast.Load(), ), args=[], - keywords=[ast.keyword(arg=None, value=ast.Name(id=global_args, ctx=ast.Load()))], + keywords=[ + ast.keyword(arg=None, value=ast.Name(id=global_args, ctx=ast.Load())) + ], ) ) ast.fix_missing_locations(glob_copy) @@ -100,7 +110,9 @@ async def meval(code, globs, **kwargs): kw_defaults=[None for _ in range(len(args))], ) args.posonlyargs = [] - fun = ast.AsyncFunctionDef(name="tmp", args=args, body=code, decorator_list=[], returns=None) + fun = ast.AsyncFunctionDef( + name="tmp", args=args, body=code, decorator_list=[], returns=None + ) ast.fix_missing_locations(fun) mod = ast.parse("") mod.body = [fun] @@ -125,7 +137,9 @@ async def meval(code, globs, **kwargs): return r -def format_exception(exp: BaseException, tb: Optional[List[traceback.FrameSummary]] = None) -> str: +def format_exception( + exp: BaseException, tb: Optional[List[traceback.FrameSummary]] = None +) -> str: """Formats an exception traceback as a string, similar to the Python interpreter.""" if tb is None: diff --git a/misskaty/helper/ffmpeg_helper.py b/misskaty/helper/ffmpeg_helper.py index bd510e16..fa4a748f 100644 --- a/misskaty/helper/ffmpeg_helper.py +++ b/misskaty/helper/ffmpeg_helper.py @@ -33,7 +33,9 @@ async def ssgen_link(video, output_directory, ttl): "image2", out_put_file_name, ] - process = await asyncio.create_subprocess_exec(*cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE) + process = await asyncio.create_subprocess_exec( + *cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE + ) stdout, stderr = await process.communicate() stderr.decode().strip() @@ -42,7 +44,11 @@ async def ssgen_link(video, output_directory, ttl): async def genss_link(msg, video_link, output_directory, min_duration, no_of_photos): - metadata = (await shell_exec(f"ffprobe -i {video_link} -show_entries format=duration -v quiet -of csv='p=0'"))[0] + metadata = ( + await shell_exec( + f"ffprobe -i {video_link} -show_entries format=duration -v quiet -of csv='p=0'" + ) + )[0] duration = round(float(metadata)) if duration > min_duration: images = [] @@ -50,12 +56,20 @@ async def genss_link(msg, video_link, output_directory, min_duration, no_of_phot current_ttl = ttl_step for looper in range(no_of_photos): ss_img = await ssgen_link(video_link, output_directory, current_ttl) - images.append(InputMediaPhoto(media=ss_img, caption=f"Screenshot at {hhmmss(current_ttl)}")) + images.append( + InputMediaPhoto( + media=ss_img, caption=f"Screenshot at {hhmmss(current_ttl)}" + ) + ) try: - await msg.edit(f"๐Ÿ“ธ Take Screenshoot:\n{looper+1} of {no_of_photos} screenshot generated..") + await msg.edit( + f"๐Ÿ“ธ Take Screenshoot:\n{looper+1} of {no_of_photos} screenshot generated.." + ) except FloodWait as e: await asyncio.sleep(e.value) - await msg.edit(f"๐Ÿ“ธ Take Screenshoot:\n{looper+1} of {no_of_photos} screenshot generated..") + await msg.edit( + f"๐Ÿ“ธ Take Screenshoot:\n{looper+1} of {no_of_photos} screenshot generated.." + ) current_ttl = current_ttl + ttl_step await asyncio.sleep(2) return images diff --git a/misskaty/helper/files.py b/misskaty/helper/files.py index c5a91845..d8f8079f 100644 --- a/misskaty/helper/files.py +++ b/misskaty/helper/files.py @@ -53,14 +53,20 @@ async def resize_file_to_sticker_size(file_path: str) -> str: im.save(file_path) -async def upload_document(client: Client, file_path: str, chat_id: int) -> raw.base.InputDocument: +async def upload_document( + client: Client, file_path: str, chat_id: int +) -> raw.base.InputDocument: media = await client.send( raw.functions.messages.UploadMedia( peer=await client.resolve_peer(chat_id), media=raw.types.InputMediaUploadedDocument( mime_type=client.guess_mime_type(file_path) or "application/zip", file=await client.save_file(file_path), - attributes=[raw.types.DocumentAttributeFilename(file_name=os.path.basename(file_path))], + attributes=[ + raw.types.DocumentAttributeFilename( + file_name=os.path.basename(file_path) + ) + ], ), ) ) diff --git a/misskaty/helper/human_read.py b/misskaty/helper/human_read.py index 8208bb5d..93105efa 100644 --- a/misskaty/helper/human_read.py +++ b/misskaty/helper/human_read.py @@ -34,7 +34,11 @@ def get_readable_time(seconds: int) -> str: def get_readable_bitrate(bitrate_kbps): - return f"{str(round(bitrate_kbps / 1000, 2))} Mb/s" if bitrate_kbps > 10000 else f"{str(round(bitrate_kbps, 2))} kb/s" + return ( + f"{str(round(bitrate_kbps / 1000, 2))} Mb/s" + if bitrate_kbps > 10000 + else f"{str(round(bitrate_kbps, 2))} kb/s" + ) def get_readable_time2(seconds: int) -> str: diff --git a/misskaty/helper/localization.py b/misskaty/helper/localization.py index 94174beb..9168d35b 100644 --- a/misskaty/helper/localization.py +++ b/misskaty/helper/localization.py @@ -39,11 +39,15 @@ for locale in enabled_locales: langdict = cache_localizations(jsons) -def get_locale_string(dic: dict, language: str, default_context: str, key: str, context: str = None) -> str: +def get_locale_string( + dic: dict, language: str, default_context: str, key: str, context: str = None +) -> str: if context: default_context = context dic = langdict[language].get(context, langdict[default_language][context]) - res: str = dic.get(key) or langdict[default_language][default_context].get(key) or key + res: str = ( + dic.get(key) or langdict[default_language][default_context].get(key) or key + ) return res diff --git a/misskaty/helper/media_helper.py b/misskaty/helper/media_helper.py index b53d3c84..ab69fffb 100644 --- a/misskaty/helper/media_helper.py +++ b/misskaty/helper/media_helper.py @@ -27,7 +27,9 @@ async def post_to_telegraph(is_media: bool, title=None, content=None, media=None async def run_subprocess(cmd): - process = await asyncio.create_subprocess_exec(*cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE) + process = await asyncio.create_subprocess_exec( + *cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE + ) return await process.communicate() @@ -54,7 +56,9 @@ async def get_media_info(file_link): async def runcmd(cmd: str) -> Tuple[str, str, int, int]: """run command in terminal""" args = shlex.split(cmd) - process = await asyncio.create_subprocess_exec(*args, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE) + process = await asyncio.create_subprocess_exec( + *args, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE + ) stdout, stderr = await process.communicate() return ( stdout.decode("utf-8", "replace").strip(), diff --git a/misskaty/helper/mediainfo_paste.py b/misskaty/helper/mediainfo_paste.py index 69c9d69f..d65956ac 100644 --- a/misskaty/helper/mediainfo_paste.py +++ b/misskaty/helper/mediainfo_paste.py @@ -169,25 +169,37 @@ def html_builder(title: str, text: str) -> str: if "Text #" in line: if bool(re.search("Text #1$", line)): subtitle_count = len(re.findall("Text #", text)) - html_msg += icon.format(icon_url="https://te.legra.ph/file/9d4a676445544d0f2d6db.png") - html_msg += subheading.format(content=f"Subtitles ({subtitle_count} subtitle)") + html_msg += icon.format( + icon_url="https://te.legra.ph/file/9d4a676445544d0f2d6db.png" + ) + html_msg += subheading.format( + content=f"Subtitles ({subtitle_count} subtitle)" + ) html_msg += "" elif "General" in line: - html_msg += icon.format(icon_url="https://te.legra.ph/file/638fb0416f2600e7c5aa3.png") + html_msg += icon.format( + icon_url="https://te.legra.ph/file/638fb0416f2600e7c5aa3.png" + ) html_msg += subheading.format(content="General") elif "Video" in line: - html_msg += icon.format(icon_url="https://te.legra.ph/file/fbc30d71cf71c9a54e59d.png") + html_msg += icon.format( + icon_url="https://te.legra.ph/file/fbc30d71cf71c9a54e59d.png" + ) html_msg += subheading.format(content="Video") elif "Audio" in line: - html_msg += icon.format(icon_url="https://te.legra.ph/file/a3c431be457fedbae2286.png") + html_msg += icon.format( + icon_url="https://te.legra.ph/file/a3c431be457fedbae2286.png" + ) html_msg += subheading.format(content=f"{line.strip()}") elif "Menu" in line: html_msg += "" - html_msg += icon.format(icon_url="https://te.legra.ph/file/3023b0c2bc202ec9d6d0d.png") + html_msg += icon.format( + icon_url="https://te.legra.ph/file/3023b0c2bc202ec9d6d0d.png" + ) html_msg += subheading.format(content="Chapters") else: @@ -209,4 +221,6 @@ async def mediainfo_paste(text: str, title: str) -> str: html_content = html_builder(title, text) URL = "https://mediainfo-1-y5870653.deta.app/api" response = await http.post(URL, json={"content": html_content}) - return f"https://mediainfo-1-y5870653.deta.app/{json.loads(response.content)['key']}" + return ( + f"https://mediainfo-1-y5870653.deta.app/{json.loads(response.content)['key']}" + ) diff --git a/misskaty/helper/misc.py b/misskaty/helper/misc.py index d80a94d4..3c0919f5 100644 --- a/misskaty/helper/misc.py +++ b/misskaty/helper/misc.py @@ -64,9 +64,15 @@ def paginate_modules(page_n, module_dict, prefix, chat=None): if len(pairs) > COLUMN_SIZE: pairs = pairs[modulo_page * COLUMN_SIZE : COLUMN_SIZE * (modulo_page + 1)] + [ ( - EqInlineKeyboardButton("โฎ", callback_data=f"{prefix}_prev({modulo_page})"), - EqInlineKeyboardButton("Back", callback_data=f"{prefix}_home({modulo_page})"), - EqInlineKeyboardButton("โฏ", callback_data=f"{prefix}_next({modulo_page})"), + EqInlineKeyboardButton( + "โฎ", callback_data=f"{prefix}_prev({modulo_page})" + ), + EqInlineKeyboardButton( + "Back", callback_data=f"{prefix}_home({modulo_page})" + ), + EqInlineKeyboardButton( + "โฏ", callback_data=f"{prefix}_next({modulo_page})" + ), ) ] diff --git a/misskaty/helper/pyro_progress.py b/misskaty/helper/pyro_progress.py index 8347cbdf..a67fd72b 100644 --- a/misskaty/helper/pyro_progress.py +++ b/misskaty/helper/pyro_progress.py @@ -32,12 +32,15 @@ async def progress_for_pyrogram(current, total, ud_type, message, start, dc_id): round(percentage, 2), ) - tmp = progress + "{0} of {1}\nSpeed: {2}/s\nDC ID: {3}\nETA: {4}\n".format( - humanbytes(current), - humanbytes(total), - humanbytes(speed), - dc_id, - estimated_total_time if estimated_total_time != "" else "0 s", + tmp = ( + progress + + "{0} of {1}\nSpeed: {2}/s\nDC ID: {3}\nETA: {4}\n".format( + humanbytes(current), + humanbytes(total), + humanbytes(speed), + dc_id, + estimated_total_time if estimated_total_time != "" else "0 s", + ) ) try: await message.edit(f"{ud_type}\n {tmp}") diff --git a/misskaty/helper/stickerset.py b/misskaty/helper/stickerset.py index a1e8bca7..7b42f3d3 100644 --- a/misskaty/helper/stickerset.py +++ b/misskaty/helper/stickerset.py @@ -22,7 +22,9 @@ from typing import List from pyrogram import Client, errors, raw -async def get_sticker_set_by_name(client: Client, name: str) -> raw.base.messages.StickerSet: +async def get_sticker_set_by_name( + client: Client, name: str +) -> raw.base.messages.StickerSet: try: return await client.invoke( raw.functions.messages.GetStickerSet( @@ -63,11 +65,15 @@ async def add_sticker_to_set( ) -> raw.base.messages.StickerSet: return await client.invoke( raw.functions.stickers.AddStickerToSet( - stickerset=raw.types.InputStickerSetShortName(short_name=stickerset.set.short_name), + stickerset=raw.types.InputStickerSetShortName( + short_name=stickerset.set.short_name + ), sticker=sticker, ) ) -async def create_sticker(sticker: raw.base.InputDocument, emoji: str) -> raw.base.InputStickerSetItem: +async def create_sticker( + sticker: raw.base.InputDocument, emoji: str +) -> raw.base.InputStickerSetItem: return raw.types.InputStickerSetItem(document=sticker, emoji=emoji) diff --git a/misskaty/helper/subscene_helper.py b/misskaty/helper/subscene_helper.py index d438b2a2..c6266084 100644 --- a/misskaty/helper/subscene_helper.py +++ b/misskaty/helper/subscene_helper.py @@ -17,7 +17,11 @@ async def down_page(url): except: poster = "" try: - author_name = maindiv.find("div", class_="header").ul.find("li", class_="author").a.text.strip() + author_name = ( + maindiv.find("div", class_="header") + .ul.find("li", class_="author") + .a.text.strip() + ) author_link = f"https://subscene.com{maindiv.find('div', class_='header').ul.find('li', class_='author').a['href']}" except: author_link = "" @@ -26,11 +30,20 @@ async def down_page(url): download_url = f"https://subscene.com{maindiv.find('div', class_='header').ul.find('li', class_='clearfix').find('div', class_='download').a['href']}" try: - comments = maindiv.find("div", class_="header").ul.find("li", class_="comment-wrapper").find("div", class_="comment").text + comments = ( + maindiv.find("div", class_="header") + .ul.find("li", class_="comment-wrapper") + .find("div", class_="comment") + .text + ) except: comments = "" try: - release = maindiv.find("div", class_="header").ul.find("li", class_="release").find_all("div") + release = ( + maindiv.find("div", class_="header") + .ul.find("li", class_="release") + .find_all("div") + ) releases = "" for i in range(2): r = release[i].text.strip() diff --git a/misskaty/helper/tools.py b/misskaty/helper/tools.py index a5dd2aae..03545f5b 100644 --- a/misskaty/helper/tools.py +++ b/misskaty/helper/tools.py @@ -77,7 +77,10 @@ def remove_N(seq): def get_random_string(length: int = 5): - text_str = "".join(random.SystemRandom().choice(string.ascii_letters + string.digits) for _ in range(length)) + text_str = "".join( + random.SystemRandom().choice(string.ascii_letters + string.digits) + for _ in range(length) + ) return text_str.upper() @@ -124,7 +127,11 @@ def get_provider(url): async def search_jw(movie_name: str, locale: str): m_t_ = "" try: - response = (await http.get(f"https://yasirapi.eu.org/justwatch?q={movie_name}&locale={locale}")).json() + response = ( + await http.get( + f"https://yasirapi.eu.org/justwatch?q={movie_name}&locale={locale}" + ) + ).json() except: return m_t_ if not response.get("results"): diff --git a/misskaty/plugins/__init__.py b/misskaty/plugins/__init__.py index 385a555b..a7f96b07 100644 --- a/misskaty/plugins/__init__.py +++ b/misskaty/plugins/__init__.py @@ -20,18 +20,32 @@ def __list_all_modules(): # This generates a list of modules in this # folder for the * in __main__ to work. mod_paths = glob.glob(f"{dirname(__file__)}/*.py") - all_modules = [basename(f)[:-3] for f in mod_paths if isfile(f) and f.endswith(".py") and not f.endswith("__init__.py") and not f.endswith("__main__.py")] + all_modules = [ + basename(f)[:-3] + for f in mod_paths + if isfile(f) + and f.endswith(".py") + and not f.endswith("__init__.py") + and not f.endswith("__main__.py") + ] if MOD_LOAD or MOD_NOLOAD: to_load = MOD_LOAD if to_load: - if not all(any(mod == module_name for module_name in all_modules) for mod in to_load): + if not all( + any(mod == module_name for module_name in all_modules) + for mod in to_load + ): sys.exit() else: to_load = all_modules - return [item for item in to_load if item not in MOD_NOLOAD] if MOD_NOLOAD else to_load + return ( + [item for item in to_load if item not in MOD_NOLOAD] + if MOD_NOLOAD + else to_load + ) return all_modules diff --git a/misskaty/plugins/anime.py b/misskaty/plugins/anime.py index 9996853e..cad67015 100644 --- a/misskaty/plugins/anime.py +++ b/misskaty/plugins/anime.py @@ -157,7 +157,12 @@ def shorten(description, info="anilist.co"): ms_g += f'\nDescription: {description}More info' else: ms_g += f"\nDescription: {description}" - return ms_g.replace("
", "").replace("
", "").replace("", "").replace("", "") + return ( + ms_g.replace("
", "") + .replace("
", "") + .replace("", "") + .replace("", "") + ) @app.on_message(filters.command("anime", COMMAND_HANDLER)) @@ -171,7 +176,11 @@ async def anime_search(_, mesg): variables = {"search": search} if not (res := json.loads(await get_anime(variables))["data"].get("Media", None)): return await reply.edit("๐Ÿ’ข No Resource Anime found! [404]") - durasi = get_readable_time(int(res.get("duration") * 60)) if res.get("duration") is not None else "0" + durasi = ( + get_readable_time(int(res.get("duration") * 60)) + if res.get("duration") is not None + else "0" + ) msg = f"{res['title']['romaji']} ({res['title']['native']})\nType: {res['format']}\nStatus: {res['status']}\nEpisodes: {res.get('episodes', 'N/A')}\nDuration : {durasi} Per Eps.\nScore: {res['averageScore']}%\nCategory: " for x in res["genres"]: msg += f"{x}, " @@ -199,7 +208,14 @@ async def anime_search(_, mesg): site = trailer.get("site", None) if site == "youtube": trailer = f"https://youtu.be/{trailer_id}" - description = res.get("description").replace("", "").replace("", "").replace("
", "") if res.get("description") is not None else "N/A" + description = ( + res.get("description") + .replace("", "") + .replace("", "") + .replace("
", "") + if res.get("description") is not None + else "N/A" + ) msg += shorten(description, info) image = info.replace("anilist.co/anime/", "img.anili.st/media/") btn = ( @@ -215,7 +231,9 @@ async def anime_search(_, mesg): if image: try: - await mesg.reply_photo(image, caption=msg, reply_markup=InlineKeyboardMarkup(btn)) + await mesg.reply_photo( + image, caption=msg, reply_markup=InlineKeyboardMarkup(btn) + ) except: msg += f" [ใ€ฝ๏ธ]({image})" await reply.edit(msg) diff --git a/misskaty/plugins/auto_approve.py b/misskaty/plugins/auto_approve.py index c2ba8971..20a419bc 100644 --- a/misskaty/plugins/auto_approve.py +++ b/misskaty/plugins/auto_approve.py @@ -21,8 +21,12 @@ async def approve_join_chat(c, m): markup = InlineKeyboardMarkup( [ [ - InlineKeyboardButton(text="Sudah", callback_data=f"approve_{m.chat.id}"), - InlineKeyboardButton(text="Belum", callback_data=f"declined_{m.chat.id}"), + InlineKeyboardButton( + text="Sudah", callback_data=f"approve_{m.chat.id}" + ), + InlineKeyboardButton( + text="Belum", callback_data=f"declined_{m.chat.id}" + ), ] ] ) @@ -41,10 +45,14 @@ async def approve_join_chat(c, m): async def approve_chat(c, q): i, chat = q.data.split("_") try: - await q.message.edit("Yeayy, selamat kamu bisa bergabung di Channel YMovieZ Reborn...") + await q.message.edit( + "Yeayy, selamat kamu bisa bergabung di Channel YMovieZ Reborn..." + ) await c.approve_chat_join_request(chat, q.from_user.id) except UserAlreadyParticipant: - await q.message.edit("Kamu sudah di acc join grup, jadi ga perlu menekan button.") + await q.message.edit( + "Kamu sudah di acc join grup, jadi ga perlu menekan button." + ) except Exception as err: await q.message.edit(err) @@ -54,9 +62,13 @@ async def approve_chat(c, q): async def decline_chat(c, q): i, chat = q.data.split("_") try: - await q.message.edit("Yahh, kamu ditolak join channel. Biasakan rajin membaca yahhh..") + await q.message.edit( + "Yahh, kamu ditolak join channel. Biasakan rajin membaca yahhh.." + ) await c.decline_chat_join_request(chat, q.from_user.id) except UserAlreadyParticipant: - await q.message.edit("Kamu sudah di acc join grup, jadi ga perlu menekan button.") + await q.message.edit( + "Kamu sudah di acc join grup, jadi ga perlu menekan button." + ) except Exception as err: await q.message.edit(err) diff --git a/misskaty/plugins/broadcast.py b/misskaty/plugins/broadcast.py index fa2c0e6a..1abc5e3f 100644 --- a/misskaty/plugins/broadcast.py +++ b/misskaty/plugins/broadcast.py @@ -38,6 +38,10 @@ async def broadcast(self: Client, ctx: Message): done += 1 await asyncio.sleep(2) if not done % 20: - await sts.edit_msg(f"Broadcast in progress:\n\nTotal Users {total_users}\nCompleted: {done} / {total_users}\nSuccess: {success}\nBlocked: {blocked}\nDeleted: {deleted}") + await sts.edit_msg( + f"Broadcast in progress:\n\nTotal Users {total_users}\nCompleted: {done} / {total_users}\nSuccess: {success}\nBlocked: {blocked}\nDeleted: {deleted}" + ) time_taken = datetime.timedelta(seconds=int(time.time() - start_time)) - await sts.edit_msg(f"Broadcast Completed:\nCompleted in {time_taken} seconds.\n\nTotal Users {total_users}\nCompleted: {done} / {total_users}\nSuccess: {success}\nBlocked: {blocked}\nDeleted: {deleted}") + await sts.edit_msg( + f"Broadcast Completed:\nCompleted in {time_taken} seconds.\n\nTotal Users {total_users}\nCompleted: {done} / {total_users}\nSuccess: {success}\nBlocked: {blocked}\nDeleted: {deleted}" + ) diff --git a/misskaty/plugins/bypass.py b/misskaty/plugins/bypass.py index e53a29c8..e47f64f1 100644 --- a/misskaty/plugins/bypass.py +++ b/misskaty/plugins/bypass.py @@ -46,7 +46,10 @@ async def pling_bypass(url): res = await http.get(link) json_dic_files = res.json().pop("files") msg = f"\n**Source Link** :\n`{url}`\n**Direct Link :**\n" - msg += "\n".join(f'**โ†’ [{i["name"]}]({unquote(i["url"])}) ({get_readable_file_size(int(i["size"]))})**' for i in json_dic_files) + msg += "\n".join( + f'**โ†’ [{i["name"]}]({unquote(i["url"])}) ({get_readable_file_size(int(i["size"]))})**' + for i in json_dic_files + ) return msg except Exception as e: return e @@ -78,7 +81,9 @@ def wetransfer_bypass(url: str) -> str: r = s.get("https://wetransfer.com/") m = re.search('name="csrf-token" content="([^"]+)"', r.text) s.headers.update({"x-csrf-token": m[1], "x-requested-with": "XMLHttpRequest"}) - r = s.post(f"https://wetransfer.com/api/v4/transfers/{transfer_id}/download", json=j) + r = s.post( + f"https://wetransfer.com/api/v4/transfers/{transfer_id}/download", json=j + ) j = r.json() dl_url = j["direct_link"] @@ -92,7 +97,9 @@ def wetransfer_bypass(url: str) -> str: @ratelimiter async def bypass(self: Client, ctx: Message): if len(ctx.command) == 1: - return await ctx.reply_msg(f"Gunakan perintah /{ctx.command[0]} untuk bypass url", del_in=6) + return await ctx.reply_msg( + f"Gunakan perintah /{ctx.command[0]} untuk bypass url", del_in=6 + ) url = ctx.command[1] msg = await ctx.reply_msg("Bypassing URL..", quote=True) mention = f"**Bypasser:** {ctx.from_user.mention} ({ctx.from_user.id})" diff --git a/misskaty/plugins/chatbot_ai.py b/misskaty/plugins/chatbot_ai.py index a933b24a..c34ae3aa 100644 --- a/misskaty/plugins/chatbot_ai.py +++ b/misskaty/plugins/chatbot_ai.py @@ -26,7 +26,9 @@ openai.api_key = OPENAI_API @use_chat_lang() async def bard_chatbot(self: Client, ctx: Message, strings): if len(ctx.command) == 1: - return await ctx.reply_msg(strings("no_question").format(cmd=ctx.command[0]), quote=True, del_in=5) + return await ctx.reply_msg( + strings("no_question").format(cmd=ctx.command[0]), quote=True, del_in=5 + ) msg = await ctx.reply_msg(strings("find_answers_str"), quote=True) data = { "message": ctx.input, @@ -44,7 +46,9 @@ async def bard_chatbot(self: Client, ctx: Message, strings): @use_chat_lang() async def openai_chatbot(self: Client, ctx: Message, strings): if len(ctx.command) == 1: - return await ctx.reply_msg(strings("no_question").format(cmd=ctx.command[0]), quote=True, del_in=5) + return await ctx.reply_msg( + strings("no_question").format(cmd=ctx.command[0]), quote=True, del_in=5 + ) uid = ctx.from_user.id if ctx.from_user else ctx.sender_chat.id is_in_gap, sleep_time = await check_time_gap(uid) if is_in_gap and (uid not in SUDO): @@ -72,7 +76,9 @@ async def openai_chatbot(self: Client, ctx: Message, strings): num = 0 await msg.edit_msg(answer) except MessageTooLong: - answerlink = await post_to_telegraph(False, "MissKaty ChatBot ", html.escape(answer)) + answerlink = await post_to_telegraph( + False, "MissKaty ChatBot ", html.escape(answer) + ) await msg.edit_msg( strings("answers_too_long").format(answerlink=answerlink), disable_web_page_preview=True, diff --git a/misskaty/plugins/code_tester.py b/misskaty/plugins/code_tester.py index 7f55753d..665f7f22 100644 --- a/misskaty/plugins/code_tester.py +++ b/misskaty/plugins/code_tester.py @@ -68,7 +68,9 @@ async def glot(lang, langcode, code): "content-type": "application/json", "Authorization": "Token b8a2b75a-a078-4089-869c-e53d448b1ebb", } - r = await session.post(f"https://glot.io/api/run/{lang}/latest", headers=headers, json=data) + r = await session.post( + f"https://glot.io/api/run/{lang}/latest", headers=headers, json=data + ) return await r.json() @@ -77,7 +79,9 @@ async def glot(lang, langcode, code): async def list_lang(client, message): daftarlang = await listcode() list_ = "".join(f"~> {i['name']}\n" for i in daftarlang) - return await message.reply(f"List of Supported Programming Languages:\n{list_}") + return await message.reply( + f"List of Supported Programming Languages:\n{list_}" + ) @app.on_message(filters.command(["assembly"], "!")) diff --git a/misskaty/plugins/currency.py b/misskaty/plugins/currency.py index 619b1314..0b196867 100644 --- a/misskaty/plugins/currency.py +++ b/misskaty/plugins/currency.py @@ -36,8 +36,13 @@ async def currency(self: Client, ctx: Message): amount = teks[1] currency_from = teks[2] currency_to = teks[3] - if amount.isdigit() or (amount.replace(".", "", 1).isdigit() and amount.count(".") < 2): - url = f"https://v6.exchangerate-api.com/v6/{CURRENCY_API}/" f"pair/{currency_from}/{currency_to}/{amount}" + if amount.isdigit() or ( + amount.replace(".", "", 1).isdigit() and amount.count(".") < 2 + ): + url = ( + f"https://v6.exchangerate-api.com/v6/{CURRENCY_API}/" + f"pair/{currency_from}/{currency_to}/{amount}" + ) try: res = await http.get(url) data = res.json() @@ -53,6 +58,10 @@ async def currency(self: Client, ctx: Message): f"**CURRENCY EXCHANGE RATE RESULT:**\n\n`{format(float(amount), ',')}` **{base_code}** = `{format(float(conversion_result), ',')}` **{target_code}**\nRate Today = `{format(float(conversion_rate), ',')}`\nLast Update: {last_update}" ) except Exception as err: - await ctx.reply_msg(f"Failed convert currency, maybe you give wrong currency format or api down.\n\nERROR: {err}") + await ctx.reply_msg( + f"Failed convert currency, maybe you give wrong currency format or api down.\n\nERROR: {err}" + ) else: - await ctx.reply_msg("This seems to be some alien currency, which I can't convert right now.. (โŠ™_โŠ™;)") + await ctx.reply_msg( + "This seems to be some alien currency, which I can't convert right now.. (โŠ™_โŠ™;)" + ) diff --git a/misskaty/plugins/download_upload.py b/misskaty/plugins/download_upload.py index 08a8baa1..b89d2ff9 100644 --- a/misskaty/plugins/download_upload.py +++ b/misskaty/plugins/download_upload.py @@ -64,7 +64,15 @@ async def upload(bot, message): text = callapi.json() output = f'File Uploaded to Anonfile\n\n๐Ÿ“‚ File Name: {text["data"]["file"]["metadata"]["name"]}\n\n๐Ÿ“ฆ File Size: {text["data"]["file"]["metadata"]["size"]["readable"]}\n\n๐Ÿ“ฅ Download Link: {text["data"]["file"]["url"]["full"]}' - btn = InlineKeyboardMarkup([[InlineKeyboardButton("๐Ÿ“ฅ Download ๐Ÿ“ฅ", url=f"{text['data']['file']['url']['full']}")]]) + btn = InlineKeyboardMarkup( + [ + [ + InlineKeyboardButton( + "๐Ÿ“ฅ Download ๐Ÿ“ฅ", url=f"{text['data']['file']['url']['full']}" + ) + ] + ] + ) await m.edit(output, reply_markup=btn) except Exception as e: await bot.send_message(message.chat.id, text=f"Something Went Wrong!\n\n{e}") @@ -96,7 +104,9 @@ async def download(client, message): ) end_t = datetime.now() ms = (end_t - start_t).seconds - await pesan.edit(f"Downloaded to {the_real_download_location} in {ms} seconds.") + await pesan.edit( + f"Downloaded to {the_real_download_location} in {ms} seconds." + ) elif len(message.command) > 1: start_t = datetime.now() the_url_parts = " ".join(message.command[1:]) @@ -131,13 +141,17 @@ async def download(client, message): try: current_message = "Trying to download...\n" current_message += f"URL: {url}\n" - current_message += f"File Name: {unquote(custom_file_name)}\n" + current_message += ( + f"File Name: {unquote(custom_file_name)}\n" + ) current_message += f"Speed: {speed}\n" current_message += f"{progress_str}\n" current_message += f"{downloaded} of {humanbytes(total_length)}\n" current_message += f"ETA: {estimated_total_time}" if round(diff % 10.00) == 0 and current_message != display_message: - await pesan.edit(disable_web_page_preview=True, text=current_message) + await pesan.edit( + disable_web_page_preview=True, text=current_message + ) display_message = current_message await asyncio.sleep(10) except Exception as e: @@ -145,9 +159,13 @@ async def download(client, message): if os.path.exists(download_file_path): end_t = datetime.now() ms = (end_t - start_t).seconds - await pesan.edit(f"Downloaded to {download_file_path} in {ms} seconds") + await pesan.edit( + f"Downloaded to {download_file_path} in {ms} seconds" + ) else: - await pesan.edit("Reply to a Telegram Media, to download it to my local server.") + await pesan.edit( + "Reply to a Telegram Media, to download it to my local server." + ) @app.on_message(filters.command(["tiktokdl"], COMMAND_HANDLER)) @@ -155,11 +173,15 @@ async def download(client, message): @ratelimiter async def tiktokdl(client, message): if len(message.command) == 1: - return await message.reply(f"Use command /{message.command[0]} [link] to download tiktok video.") + return await message.reply( + f"Use command /{message.command[0]} [link] to download tiktok video." + ) link = message.command[1] msg = await message.reply("Trying download...") try: - r = (await http.get(f"https://apimu.my.id/downloader/tiktok3?link={link}")).json() + r = ( + await http.get(f"https://apimu.my.id/downloader/tiktok3?link={link}") + ).json() await message.reply_video( r["hasil"]["download_mp4_hd"], caption=f"Title: {r['hasil']['video_title']}\nUploader: {r['hasil']['name']}\n๐Ÿ‘: {r['hasil']['like']} ๐Ÿ”: {r['hasil']['share']} ๐Ÿ’ฌ: {r['hasil']['comment']}\n\nUploaded for {message.from_user.mention} [{message.from_user.id}]", @@ -174,7 +196,9 @@ async def tiktokdl(client, message): @capture_err async def fbdl(client, message): if len(message.command) == 1: - return await message.reply(f"Use command /{message.command[0]} [link] to download Facebook video.") + return await message.reply( + f"Use command /{message.command[0]} [link] to download Facebook video." + ) link = message.command[1] msg = await message.reply("Trying download...") try: @@ -197,5 +221,7 @@ async def fbdl(client, message): except: pass except Exception as e: - await message.reply(f"Failed to download Facebook video..\n\nReason: {e}") + await message.reply( + f"Failed to download Facebook video..\n\nReason: {e}" + ) await msg.delete() diff --git a/misskaty/plugins/filter_request.py b/misskaty/plugins/filter_request.py index 45bdc396..bcc65784 100644 --- a/misskaty/plugins/filter_request.py +++ b/misskaty/plugins/filter_request.py @@ -31,17 +31,28 @@ async def salamregex(_, message): await message.reply_text(text=f"Wa'alaikumsalam {message.from_user.mention} ๐Ÿ˜‡") -@app.on_message(filters.regex(r"#request|#req", re.I) & (filters.text | filters.photo) & filters.chat(-1001255283935) & ~filters.channel) +@app.on_message( + filters.regex(r"#request|#req", re.I) + & (filters.text | filters.photo) + & filters.chat(-1001255283935) + & ~filters.channel +) @capture_err async def request_user(client, message): if message.sender_chat: - return await message.reply(f"{message.from_user.mention} mohon gunakan akun asli saat request.") + return await message.reply( + f"{message.from_user.mention} mohon gunakan akun asli saat request." + ) is_in_gap, sleep_time = await check_time_gap(message.from_user.id) if is_in_gap: return await message.reply("Sabar dikit napa.. ๐Ÿ™„") markup = InlineKeyboardMarkup( [ - [InlineKeyboardButton(text="๐Ÿ’ฌ Lihat Pesan", url=f"https://t.me/c/1255283935/{message.id}")], + [ + InlineKeyboardButton( + text="๐Ÿ’ฌ Lihat Pesan", url=f"https://t.me/c/1255283935/{message.id}" + ) + ], [ InlineKeyboardButton( text="๐Ÿšซ Tolak", @@ -73,7 +84,9 @@ async def request_user(client, message): else: REQUEST_DB[user_id] = 1 if REQUEST_DB[user_id] > 3: - return await message.reply(f"Mohon maaf {message.from_user.mention}, maksimal request hanya 3x perhari. Kalo mau tambah 5k per request ๐Ÿ˜๐Ÿ˜.") + return await message.reply( + f"Mohon maaf {message.from_user.mention}, maksimal request hanya 3x perhari. Kalo mau tambah 5k per request ๐Ÿ˜๐Ÿ˜." + ) if message.text: forward = await client.send_message( -1001575525902, @@ -164,18 +177,36 @@ async def callbackreq(c, q): if q.message.caption: await q.message.edit_text( f"COMPLETED\n\n{q.message.caption}", - reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="โœ… Request Completed", callback_data="reqcompl")]]), + reply_markup=InlineKeyboardMarkup( + [ + [ + InlineKeyboardButton( + text="โœ… Request Completed", callback_data="reqcompl" + ) + ] + ] + ), ) else: await q.message.edit_text( f"COMPLETED\n\n{q.message.text}", - reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="โœ… Request Completed", callback_data="reqcompl")]]), + reply_markup=InlineKeyboardMarkup( + [ + [ + InlineKeyboardButton( + text="โœ… Request Completed", callback_data="reqcompl" + ) + ] + ] + ), ) await q.answer("Request berhasil diselesaikan โœ…") else: await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True) except UserNotParticipant: - return await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10) + return await q.answer( + "Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10 + ) except PeerIdInvalid: return await q.answer( "Silahkan kirim pesan digrup supaya bot bisa merespon.", @@ -232,7 +263,9 @@ async def callbackreqada(c, q): else: await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True) except UserNotParticipant: - return await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10) + return await q.answer( + "Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10 + ) except PeerIdInvalid: return await q.answer( "Silahkan kirim pesan digrup supaya bot bisa merespon.", @@ -260,18 +293,36 @@ async def callbackreject(c, q): if q.message.caption: await q.message.edit_text( f"REJECTED\n\n{q.message.caption}", - reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="๐Ÿšซ Request Rejected", callback_data="reqreject")]]), + reply_markup=InlineKeyboardMarkup( + [ + [ + InlineKeyboardButton( + text="๐Ÿšซ Request Rejected", callback_data="reqreject" + ) + ] + ] + ), ) else: await q.message.edit_text( f"REJECTED\n\n{q.message.text}", - reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(text="๐Ÿšซ Request Rejected", callback_data="reqreject")]]), + reply_markup=InlineKeyboardMarkup( + [ + [ + InlineKeyboardButton( + text="๐Ÿšซ Request Rejected", callback_data="reqreject" + ) + ] + ] + ), ) await q.answer("Request berhasil ditolak ๐Ÿšซ") else: await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True) except UserNotParticipant: - await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10) + await q.answer( + "Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10 + ) except PeerIdInvalid: return await q.answer( "Silahkan kirim pesan digrup supaya bot bisa merespon.", @@ -324,7 +375,9 @@ async def callbackunav(c, q): ] ), ) - await q.answer("Request tidak tersedia, mungkin belum rilis atau memang tidak tersedia versi digital.") + await q.answer( + "Request tidak tersedia, mungkin belum rilis atau memang tidak tersedia versi digital." + ) else: await q.answer( "Apa motivasi kamu menekan tombol ini?", @@ -332,7 +385,9 @@ async def callbackunav(c, q): cache_time=1000, ) except UserNotParticipant: - await q.answer("Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10) + await q.answer( + "Apa motivasi kamu menekan tombol ini?", show_alert=True, cache_time=10 + ) except PeerIdInvalid: return await q.answer( "Silahkan kirim pesan digrup supaya bot bisa merespon.", @@ -374,7 +429,9 @@ async def callbackaft_unav(c, q): @app.on_callback_query(filters.regex(r"^reqavailable$")) @ratelimiter async def callbackaft_dahada(c, q): - await q.answer("Request ini sudah ada, silahkan cari ๐Ÿ” di channelnya yaa ๐Ÿ˜‰..", show_alert=True) + await q.answer( + "Request ini sudah ada, silahkan cari ๐Ÿ” di channelnya yaa ๐Ÿ˜‰..", show_alert=True + ) scheduler = AsyncIOScheduler(timezone="Asia/Jakarta") diff --git a/misskaty/plugins/filters.py b/misskaty/plugins/filters.py index a5543d0f..f5965cb7 100644 --- a/misskaty/plugins/filters.py +++ b/misskaty/plugins/filters.py @@ -57,7 +57,9 @@ async def save_filters(_, m): del_in=6, ) if not m.reply_to_message.text and not m.reply_to_message.sticker: - return await m.reply_msg("__**You can only save text or stickers in filters for now.**__") + return await m.reply_msg( + "__**You can only save text or stickers in filters for now.**__" + ) name = m.text.split(None, 1)[1].strip() if not name: return await m.reply_msg("**Usage:**\n__/addfilter [FILTER_NAME]__", del_in=6) @@ -65,7 +67,9 @@ async def save_filters(_, m): _type = "text" if m.reply_to_message.text else "sticker" _filter = { "type": _type, - "data": m.reply_to_message.text.markdown if _type == "text" else m.reply_to_message.sticker.file_id, + "data": m.reply_to_message.text.markdown + if _type == "text" + else m.reply_to_message.sticker.file_id, } await save_filter(chat_id, name, _filter) await m.reply_msg(f"__**Saved filter {name}.**__") diff --git a/misskaty/plugins/fun.py b/misskaty/plugins/fun.py index ba54e365..2c3322b8 100644 --- a/misskaty/plugins/fun.py +++ b/misskaty/plugins/fun.py @@ -16,7 +16,9 @@ async def draw_meme_text(image_path, text): img = Image.open(image_path) hapus(image_path) i_width, i_height = img.size - m_font = ImageFont.truetype("assets/MutantAcademyStyle.ttf", int((70 / 640) * i_width)) + m_font = ImageFont.truetype( + "assets/MutantAcademyStyle.ttf", int((70 / 640) * i_width) + ) if ";" in text: upper_text, lower_text = text.split(";") else: @@ -144,10 +146,14 @@ async def draw_meme_text(image_path, text): @capture_err @ratelimiter async def memify(client, message): - if message.reply_to_message and (message.reply_to_message.sticker or message.reply_to_message.photo): + if message.reply_to_message and ( + message.reply_to_message.sticker or message.reply_to_message.photo + ): try: file = await message.reply_to_message.download() - webp, png = await draw_meme_text(file, message.text.split(None, 1)[1].strip()) + webp, png = await draw_meme_text( + file, message.text.split(None, 1)[1].strip() + ) await gather(*[message.reply_document(png), message.reply_sticker(webp)]) try: hapus(webp) @@ -162,7 +168,9 @@ async def memify(client, message): pass await message.reply_msg(f"ERROR: {err}") else: - await message.reply_msg("Gunakan command /mmf dengan reply ke sticker, pisahkan dengan ; untuk membuat posisi text dibawah.") + await message.reply_msg( + "Gunakan command /mmf dengan reply ke sticker, pisahkan dengan ; untuk membuat posisi text dibawah." + ) @app.on_message(filters.command(["dice"], COMMAND_HANDLER)) diff --git a/misskaty/plugins/genss.py b/misskaty/plugins/genss.py index ee0f8efe..7167b364 100644 --- a/misskaty/plugins/genss.py +++ b/misskaty/plugins/genss.py @@ -79,7 +79,9 @@ async def genss(self: Client, ctx: Message, strings): current_message += f"{downloaded} of {humanbytes(total_length)}\n" current_message += f"ETA: {estimated_total_time}" if round(diff % 10.00) == 0 and current_message != display_message: - await pesan.edit(disable_web_page_preview=True, text=current_message) + await pesan.edit( + disable_web_page_preview=True, text=current_message + ) display_message = current_message await sleep(10) except Exception as e: @@ -87,11 +89,15 @@ async def genss(self: Client, ctx: Message, strings): if os.path.exists(download_file_path): end_t = datetime.now() ms = (end_t - start_t).seconds - await pesan.edit(f"Downloaded to {download_file_path} in {ms} seconds") + await pesan.edit( + f"Downloaded to {download_file_path} in {ms} seconds" + ) try: images = await take_ss(download_file_path) await pesan.edit_msg(strings("up_progress")) - await self.send_chat_action(chat_id=ctx.chat.id, action=enums.ChatAction.UPLOAD_PHOTO) + await self.send_chat_action( + chat_id=ctx.chat.id, action=enums.ChatAction.UPLOAD_PHOTO + ) try: await gather( *[ @@ -146,11 +152,15 @@ async def genss(self: Client, ctx: Message, strings): the_real_download_location = os.path.join("/downloads/", os.path.basename(dl)) if the_real_download_location is not None: try: - await process.edit_msg(strings("success_dl_msg").format(path=the_real_download_location)) + await process.edit_msg( + strings("success_dl_msg").format(path=the_real_download_location) + ) await sleep(2) images = await take_ss(the_real_download_location) await process.edit_msg(strings("up_progress")) - await self.send_chat_action(chat_id=ctx.chat.id, action=enums.ChatAction.UPLOAD_PHOTO) + await self.send_chat_action( + chat_id=ctx.chat.id, action=enums.ChatAction.UPLOAD_PHOTO + ) try: await gather( diff --git a/misskaty/plugins/inkick_user.py b/misskaty/plugins/inkick_user.py index 5f012665..e819d799 100644 --- a/misskaty/plugins/inkick_user.py +++ b/misskaty/plugins/inkick_user.py @@ -20,54 +20,77 @@ __HELP__ = """" """ -@app.on_message(filters.incoming & ~filters.private & filters.command(["inkick"], COMMAND_HANDLER)) +@app.on_message( + filters.incoming & ~filters.private & filters.command(["inkick"], COMMAND_HANDLER) +) @ratelimiter async def inkick(_, message): if message.sender_chat: - return await message.reply_msg("This feature not available for channel.", del_in=4) + return await message.reply_msg( + "This feature not available for channel.", del_in=4 + ) user = await app.get_chat_member(message.chat.id, message.from_user.id) if user.status.value in ("administrator", "owner"): if len(message.command) > 1: input_str = message.command - sent_message = await message.reply_text("๐Ÿšฎ**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**") + sent_message = await message.reply_text( + "๐Ÿšฎ**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**" + ) count = 0 async for member in app.get_chat_members(message.chat.id): if member.user.is_bot: continue - if member.user.status.value in input_str and member.status.value not in ("administrator", "owner"): + if ( + member.user.status.value in input_str + and member.status.value not in ("administrator", "owner") + ): try: await message.chat.ban_member(member.user.id) count += 1 await sleep(1) await message.chat.unban_member(member.user.id) except (ChatAdminRequired, UserAdminInvalid): - await sent_message.edit("โ—**Oh tidaakk, saya bukan admin disini**\n__Saya pergi dari sini, tambahkan aku kembali dengan perijinan banned pengguna.__") + await sent_message.edit( + "โ—**Oh tidaakk, saya bukan admin disini**\n__Saya pergi dari sini, tambahkan aku kembali dengan perijinan banned pengguna.__" + ) await app.leave_chat(message.chat.id) break except FloodWait as e: await sleep(e.value) try: - await sent_message.edit(f"โœ”๏ธ **Berhasil menendang {count} pengguna berdasarkan argumen.**") + await sent_message.edit( + f"โœ”๏ธ **Berhasil menendang {count} pengguna berdasarkan argumen.**" + ) except ChatWriteForbidden: await app.leave_chat(message.chat.id) else: - await message.reply_text("โ— **Arguments Required**\n__See /help in personal message for more information.__") + await message.reply_text( + "โ— **Arguments Required**\n__See /help in personal message for more information.__" + ) else: - sent_message = await message.reply_text("โ— **You have to be the group creator to do that.**") + sent_message = await message.reply_text( + "โ— **You have to be the group creator to do that.**" + ) await sleep(5) await sent_message.delete() # Kick User Without Username -@app.on_message(filters.incoming & ~filters.private & filters.command(["uname"], COMMAND_HANDLER)) +@app.on_message( + filters.incoming & ~filters.private & filters.command(["uname"], COMMAND_HANDLER) +) @ratelimiter async def uname(_, message): if message.sender_chat: - return await message.reply_msg("This feature not available for channel.", del_in=4) + return await message.reply_msg( + "This feature not available for channel.", del_in=4 + ) user = await app.get_chat_member(message.chat.id, message.from_user.id) if user.status.value in ("administrator", "owner"): - sent_message = await message.reply_text("๐Ÿšฎ**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**") + sent_message = await message.reply_text( + "๐Ÿšฎ**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**" + ) count = 0 async for member in app.get_chat_members(message.chat.id): if not member.user.username and member.status.value not in ( @@ -80,30 +103,44 @@ async def uname(_, message): await sleep(1) await message.chat.unban_member(member.user.id) except (ChatAdminRequired, UserAdminInvalid): - await sent_message.edit("โ—**Oh tidaakk, saya bukan admin disini**\n__Saya pergi dari sini, tambahkan aku kembali dengan perijinan banned pengguna.__") + await sent_message.edit( + "โ—**Oh tidaakk, saya bukan admin disini**\n__Saya pergi dari sini, tambahkan aku kembali dengan perijinan banned pengguna.__" + ) await app.leave_chat(message.chat.id) break except FloodWait as e: await sleep(e.value) try: - await sent_message.edit(f"โœ”๏ธ **Berhasil menendang {count} pengguna berdasarkan argumen.**") + await sent_message.edit( + f"โœ”๏ธ **Berhasil menendang {count} pengguna berdasarkan argumen.**" + ) except ChatWriteForbidden: await app.leave_chat(message.chat.id) else: - sent_message = await message.reply_text("โ— **You have to be the group creator to do that.**") + sent_message = await message.reply_text( + "โ— **You have to be the group creator to do that.**" + ) await sleep(5) await sent_message.delete() -@app.on_message(filters.incoming & ~filters.private & filters.command(["ban_ghosts"], COMMAND_HANDLER)) +@app.on_message( + filters.incoming + & ~filters.private + & filters.command(["ban_ghosts"], COMMAND_HANDLER) +) @ratelimiter async def rm_delacc(client, message): if message.sender_chat: - return await message.reply_msg("This feature not available for channel.", del_in=4) + return await message.reply_msg( + "This feature not available for channel.", del_in=4 + ) user = await app.get_chat_member(message.chat.id, message.from_user.id) if user.status.value in ("administrator", "owner"): - sent_message = await message.reply_text("๐Ÿšฎ**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**") + sent_message = await message.reply_text( + "๐Ÿšฎ**Sedang membersihkan user, mungkin butuh waktu beberapa saat...**" + ) count = 0 async for member in app.get_chat_members(message.chat.id): if member.user.is_deleted and member.status.value not in ( @@ -116,27 +153,37 @@ async def rm_delacc(client, message): await sleep(1) await message.chat.unban_member(member.user.id) except (ChatAdminRequired, UserAdminInvalid): - await sent_message.edit("โ—**Oh Nooo, i'm doesn't have admin permission in this group. Make sure i'm have admin permission to ban users.") + await sent_message.edit( + "โ—**Oh Nooo, i'm doesn't have admin permission in this group. Make sure i'm have admin permission to ban users." + ) break except FloodWait as e: await sleep(e.value) if count == 0: - return await sent_message.edit_msg("There are no deleted accounts in this chat.") + return await sent_message.edit_msg( + "There are no deleted accounts in this chat." + ) await sent_message.edit_msg(f"โœ”๏ธ **Berhasil menendang {count} akun terhapus.**") else: - sent_message = await message.reply_text("โ— **Kamu harus jadi admin atau owner grup untuk melakukan tindakan ini.**") + sent_message = await message.reply_text( + "โ— **Kamu harus jadi admin atau owner grup untuk melakukan tindakan ini.**" + ) await sleep(5) await sent_message.delete() -@app.on_message(filters.incoming & ~filters.private & filters.command(["instatus"], COMMAND_HANDLER)) +@app.on_message( + filters.incoming & ~filters.private & filters.command(["instatus"], COMMAND_HANDLER) +) @ratelimiter async def instatus(client, message): if message.sender_chat: return await message.reply_msg("Not supported channel.", del_in=4) bstat = await app.get_chat_member(message.chat.id, client.me.id) if bstat.status.value != "administrator": - return await message.reply_msg("Please give me all basic admin permission, to run this command.") + return await message.reply_msg( + "Please give me all basic admin permission, to run this command." + ) start_time = time.perf_counter() user = await app.get_chat_member(message.chat.id, message.from_user.id) count = await app.get_chat_members_count(message.chat.id) @@ -144,7 +191,9 @@ async def instatus(client, message): enums.ChatMemberStatus.ADMINISTRATOR, enums.ChatMemberStatus.OWNER, ): - sent_message = await message.reply_text("**Sedang mengumpulkan informasi pengguna...**") + sent_message = await message.reply_text( + "**Sedang mengumpulkan informasi pengguna...**" + ) recently = 0 within_week = 0 within_month = 0 @@ -156,9 +205,13 @@ async def instatus(client, message): banned = 0 uncached = 0 bot = 0 - async for ban in app.get_chat_members(message.chat.id, filter=enums.ChatMembersFilter.BANNED): + async for ban in app.get_chat_members( + message.chat.id, filter=enums.ChatMembersFilter.BANNED + ): banned += 1 - async for restr in app.get_chat_members(message.chat.id, filter=enums.ChatMembersFilter.RESTRICTED): + async for restr in app.get_chat_members( + message.chat.id, filter=enums.ChatMembersFilter.RESTRICTED + ): restricted += 1 async for member in app.get_chat_members(message.chat.id): user = member.user @@ -201,6 +254,8 @@ async def instatus(client, message): ) ) else: - sent_message = await message.reply_text("โ— **Kamu harus jadi admin atau owner grup untuk melakukan tindakan ini.**") + sent_message = await message.reply_text( + "โ— **Kamu harus jadi admin atau owner grup untuk melakukan tindakan ini.**" + ) await sleep(5) await sent_message.delete() diff --git a/misskaty/plugins/inline_search.py b/misskaty/plugins/inline_search.py index 33e715e0..62ed8e46 100644 --- a/misskaty/plugins/inline_search.py +++ b/misskaty/plugins/inline_search.py @@ -15,9 +15,14 @@ from pykeyboard import InlineButton, InlineKeyboard from pyrogram import __version__ as pyrover from pyrogram import enums, filters from pyrogram.errors import MessageIdInvalid, MessageNotModified -from pyrogram.types import (InlineKeyboardButton, InlineKeyboardMarkup, - InlineQuery, InlineQueryResultArticle, - InlineQueryResultPhoto, InputTextMessageContent) +from pyrogram.types import ( + InlineKeyboardButton, + InlineKeyboardMarkup, + InlineQuery, + InlineQueryResultArticle, + InlineQueryResultPhoto, + InputTextMessageContent, +) from misskaty import BOT_USERNAME, app, user from misskaty.core.decorator.ratelimiter import ratelimiter diff --git a/misskaty/plugins/karma.py b/misskaty/plugins/karma.py index 96fe5671..eeab15de 100644 --- a/misskaty/plugins/karma.py +++ b/misskaty/plugins/karma.py @@ -46,18 +46,30 @@ def section( text = (bold_ul(title) + n) if underline else bold(title) + n for key, value in body.items(): - text += indent * w + bold(key) + ((value[0] + n) if isinstance(value, list) else mono(value)) + text += ( + indent * w + + bold(key) + + ((value[0] + n) if isinstance(value, list) else mono(value)) + ) return text async def get_user_id_and_usernames(client) -> dict: with client.storage.lock, client.storage.conn: - users = client.storage.conn.execute('SELECT * FROM peers WHERE type in ("user", "bot") AND username NOT null').fetchall() + users = client.storage.conn.execute( + 'SELECT * FROM peers WHERE type in ("user", "bot") AND username NOT null' + ).fetchall() return {user[0]: user[3] for user in users} @app.on_message( - filters.text & filters.group & filters.incoming & filters.reply & filters.regex(regex_upvote, re.IGNORECASE) & ~filters.via_bot & ~filters.bot, + filters.text + & filters.group + & filters.incoming + & filters.reply + & filters.regex(regex_upvote, re.IGNORECASE) + & ~filters.via_bot + & ~filters.bot, group=karma_positive_group, ) @capture_err @@ -83,11 +95,19 @@ async def upvote(_, message): karma = 1 new_karma = {"karma": karma} await update_karma(chat_id, await int_to_alpha(user_id), new_karma) - await message.reply_text(f"Incremented Karma of {user_mention} By 1 \nTotal Points: {karma}") + await message.reply_text( + f"Incremented Karma of {user_mention} By 1 \nTotal Points: {karma}" + ) @app.on_message( - filters.text & filters.group & filters.incoming & filters.reply & filters.regex(regex_downvote, re.IGNORECASE) & ~filters.via_bot & ~filters.bot, + filters.text + & filters.group + & filters.incoming + & filters.reply + & filters.regex(regex_downvote, re.IGNORECASE) + & ~filters.via_bot + & ~filters.bot, group=karma_negative_group, ) @capture_err @@ -123,7 +143,9 @@ async def downvote(_, message): karma = 1 new_karma = {"karma": karma} await update_karma(chat_id, await int_to_alpha(user_id), new_karma) - await message.reply_text(f"Decremented Karma of {user_mention} By 1 \nTotal Points: {karma}") + await message.reply_text( + f"Decremented Karma of {user_mention} By 1 \nTotal Points: {karma}" + ) @app.on_message(filters.command("karma") & filters.group) diff --git a/misskaty/plugins/locks.py b/misskaty/plugins/locks.py index 0e0e0ce0..58312ce7 100644 --- a/misskaty/plugins/locks.py +++ b/misskaty/plugins/locks.py @@ -103,7 +103,9 @@ async def tg_lock(message, permissions: list, perm: str, lock: bool): try: await app.set_chat_permissions(message.chat.id, ChatPermissions(**permissions)) except ChatNotModified: - return await message.reply_text("To unlock this, you have to unlock 'messages' first.") + return await message.reply_text( + "To unlock this, you have to unlock 'messages' first." + ) await message.reply_text(("Locked." if lock else "Unlocked.")) @@ -176,4 +178,7 @@ async def url_detector(_, message): try: await message.delete_msg() except Exception: - await message.reply_msg("This message contains a URL, " + "but i don't have enough permissions to delete it") + await message.reply_msg( + "This message contains a URL, " + + "but i don't have enough permissions to delete it" + ) diff --git a/misskaty/plugins/media_extractor.py b/misskaty/plugins/media_extractor.py index 33e00f29..74723a4d 100644 --- a/misskaty/plugins/media_extractor.py +++ b/misskaty/plugins/media_extractor.py @@ -13,8 +13,12 @@ from time import time from urllib.parse import unquote from pyrogram import Client, filters -from pyrogram.types import (CallbackQuery, InlineKeyboardButton, - InlineKeyboardMarkup, Message) +from pyrogram.types import ( + CallbackQuery, + InlineKeyboardButton, + InlineKeyboardMarkup, + Message, +) from misskaty import app from misskaty.core.decorator.errors import capture_err @@ -60,7 +64,9 @@ def get_subname(lang, url, ext): fragment_removed = url.split("#")[0] # keep to left of first # query_string_removed = fragment_removed.split("?")[0] scheme_removed = query_string_removed.split("://")[-1].split(":")[-1] - if scheme_removed.find("/") == -1 or not get_base_name(os.path.basename(unquote(scheme_removed))): + if scheme_removed.find("/") == -1 or not get_base_name( + os.path.basename(unquote(scheme_removed)) + ): return f"[{lang.upper()}] MissKatySub{get_random_string(4)}.{ext}" return f"[{lang.upper()}] {get_base_name(os.path.basename(unquote(scheme_removed)))}{get_random_string(3)}.{ext}" @@ -70,12 +76,18 @@ def get_subname(lang, url, ext): @use_chat_lang() async def ceksub(self: Client, ctx: Message, strings): if len(ctx.command) == 1: - return await ctx.reply_msg(strings("sub_extr_help").format(cmd=ctx.command[0]), quote=True, del_in=5) + return await ctx.reply_msg( + strings("sub_extr_help").format(cmd=ctx.command[0]), quote=True, del_in=5 + ) link = ctx.command[1] start_time = time() pesan = await ctx.reply_msg(strings("progress_str"), quote=True) try: - res = (await shell_exec(f"ffprobe -loglevel 0 -print_format json -show_format -show_streams {link}"))[0] + res = ( + await shell_exec( + f"ffprobe -loglevel 0 -print_format json -show_format -show_streams {link}" + ) + )[0] details = json.loads(res) buttons = [] for stream in details["streams"]: @@ -100,7 +112,9 @@ async def ceksub(self: Client, ctx: Message, strings): ] ) timelog = time() - start_time - buttons.append([InlineKeyboardButton(strings("cancel_btn"), f"close#{ctx.from_user.id}")]) + buttons.append( + [InlineKeyboardButton(strings("cancel_btn"), f"close#{ctx.from_user.id}")] + ) msg = await pesan.edit_msg( strings("press_btn_msg").format(timelog=get_readable_time(timelog)), reply_markup=InlineKeyboardMarkup(buttons), @@ -118,16 +132,27 @@ async def ceksub(self: Client, ctx: Message, strings): @use_chat_lang() async def convertsrt(self: Client, ctx: Message, strings): reply = ctx.reply_to_message - if not reply or not reply.document or not reply.document.file_name or not reply.document.file_name.endswith((".vtt", ".ass", ".srt")): - return await ctx.reply_msg(strings("conv_sub_help").format(cmd=ctx.command[0]), del_in=6) + if ( + not reply + or not reply.document + or not reply.document.file_name + or not reply.document.file_name.endswith((".vtt", ".ass", ".srt")) + ): + return await ctx.reply_msg( + strings("conv_sub_help").format(cmd=ctx.command[0]), del_in=6 + ) msg = await ctx.reply_msg(strings("convert_str"), quote=True) if not os.path.exists("downloads"): os.makedirs("downloads") dl = await reply.download(file_name="downloads/") filename = dl.split("/", 3)[3] - LOGGER.info(f"ConvertSub: {filename} by {ctx.from_user.first_name if ctx.from_user else ctx.sender_chat.title} [{ctx.from_user.id if ctx.from_user else ctx.sender_chat.id}]") + LOGGER.info( + f"ConvertSub: {filename} by {ctx.from_user.first_name if ctx.from_user else ctx.sender_chat.title} [{ctx.from_user.id if ctx.from_user else ctx.sender_chat.id}]" + ) suffix = "srt" if ctx.command[0] == "converttosrt" else "ass" - (await shell_exec(f"ffmpeg -i '{dl}' 'downloads/{filename}.{suffix}'"))[0] # skipcq: PYL-W0106 + (await shell_exec(f"ffmpeg -i '{dl}' 'downloads/{filename}.{suffix}'"))[ + 0 + ] # skipcq: PYL-W0106 c_time = time() await ctx.reply_document( f"downloads/{filename}.{suffix}", @@ -169,13 +194,17 @@ async def stream_extract(self: Client, update: CallbackQuery, strings): start_time = time() namafile = get_subname(lang, link, ext) try: - LOGGER.info(f"ExtractSub: {namafile} by {update.from_user.first_name} [{update.from_user.id}]") + LOGGER.info( + f"ExtractSub: {namafile} by {update.from_user.first_name} [{update.from_user.id}]" + ) (await shell_exec(f"ffmpeg -i {link} -map {map_code} '{namafile}'"))[0] timelog = time() - start_time c_time = time() await update.message.reply_document( namafile, - caption=strings("capt_extr_sub").format(nf=namafile, bot=self.me.username, timelog=get_readable_time(timelog)), + caption=strings("capt_extr_sub").format( + nf=namafile, bot=self.me.username, timelog=get_readable_time(timelog) + ), reply_to_message_id=usr.id, thumb="assets/thumb.jpg", progress=progress_for_pyrogram, diff --git a/misskaty/plugins/mediainfo.py b/misskaty/plugins/mediainfo.py index c22a1efa..a3c2d1b5 100644 --- a/misskaty/plugins/mediainfo.py +++ b/misskaty/plugins/mediainfo.py @@ -34,7 +34,13 @@ async def mediainfo(self: Client, ctx: Message, strings): file_info = get_file_id(ctx.reply_to_message) if file_info is None: return await process.edit_msg(strings("media_invalid")) - if (ctx.reply_to_message.video and ctx.reply_to_message.video.file_size > 2097152000) or (ctx.reply_to_message.document and ctx.reply_to_message.document.file_size > 2097152000): + if ( + ctx.reply_to_message.video + and ctx.reply_to_message.video.file_size > 2097152000 + ) or ( + ctx.reply_to_message.document + and ctx.reply_to_message.document.file_size > 2097152000 + ): return await process.edit_msg(strings("dl_limit_exceeded"), del_in=6) c_time = time.time() dc_id = FileId.decode(file_info.file_id).dc_id @@ -56,11 +62,15 @@ DETAILS """ try: link = await mediainfo_paste(out, "MissKaty Mediainfo") - markup = InlineKeyboardMarkup([[InlineKeyboardButton(text=strings("viweb"), url=link)]]) + markup = InlineKeyboardMarkup( + [[InlineKeyboardButton(text=strings("viweb"), url=link)]] + ) except: try: link = await post_to_telegraph(False, "MissKaty MediaInfo", body_text) - markup = InlineKeyboardMarkup([[InlineKeyboardButton(text=strings("viweb"), url=link)]]) + markup = InlineKeyboardMarkup( + [[InlineKeyboardButton(text=strings("viweb"), url=link)]] + ) except: markup = None with io.BytesIO(str.encode(body_text)) as out_file: @@ -81,7 +91,9 @@ DETAILS link = ctx.input process = await ctx.reply_msg(strings("wait_msg")) try: - output = subprocess.check_output(["mediainfo", f"{link}"]).decode("utf-8") + output = subprocess.check_output(["mediainfo", f"{link}"]).decode( + "utf-8" + ) except Exception: return await process.edit_msg(strings("err_link")) body_text = f""" @@ -91,11 +103,17 @@ DETAILS # link = await post_to_telegraph(False, title, body_text) try: link = await mediainfo_paste(out, "MissKaty Mediainfo") - markup = InlineKeyboardMarkup([[InlineKeyboardButton(text=strings("viweb"), url=link)]]) + markup = InlineKeyboardMarkup( + [[InlineKeyboardButton(text=strings("viweb"), url=link)]] + ) except: try: - link = await post_to_telegraph(False, "MissKaty MediaInfo", body_text) - markup = InlineKeyboardMarkup([[InlineKeyboardButton(text=strings("viweb"), url=link)]]) + link = await post_to_telegraph( + False, "MissKaty MediaInfo", body_text + ) + markup = InlineKeyboardMarkup( + [[InlineKeyboardButton(text=strings("viweb"), url=link)]] + ) except: markup = None with io.BytesIO(str.encode(output)) as out_file: @@ -108,4 +126,6 @@ DETAILS ) await process.delete() except IndexError: - return await ctx.reply_msg(strings("mediainfo_help").format(cmd=ctx.command[0]), del_in=6) + return await ctx.reply_msg( + strings("mediainfo_help").format(cmd=ctx.command[0]), del_in=6 + ) diff --git a/misskaty/plugins/nightmodev2.py b/misskaty/plugins/nightmodev2.py index c329e41b..b18423fa 100644 --- a/misskaty/plugins/nightmodev2.py +++ b/misskaty/plugins/nightmodev2.py @@ -38,7 +38,9 @@ __HELP__ = """Enable or disable nightmode (locks the chat at specified interv """ TIME_ZONE = pytz.timezone(TZ) -reply_markup = InlineKeyboardMarkup([[InlineKeyboardButton(text="โค๏ธ", callback_data="nightmd")]]) +reply_markup = InlineKeyboardMarkup( + [[InlineKeyboardButton(text="โค๏ธ", callback_data="nightmd")]] +) # Check calculate how long it will take to Ramadhan @@ -103,28 +105,36 @@ async def un_mute_chat(chat_id: int, perm: ChatPermissions): except ChatAdminRequired: await app.send_message( LOG_CHANNEL, - langdict[getlang]["nightmodev2"]["nmd_off_not_admin"].format(chat_id=chat_id, bname=BOT_NAME), + langdict[getlang]["nightmodev2"]["nmd_off_not_admin"].format( + chat_id=chat_id, bname=BOT_NAME + ), ) except (ChannelInvalid, ChannelPrivate): scheduler.remove_job(f"enable_nightmode_{chat_id}") scheduler.remove_job(f"disable_nightmode_{chat_id}") await app.send_message( LOG_CHANNEL, - langdict[getlang]["nightmodev2"]["nmd_off_not_present"].format(chat_id=chat_id, bname=BOT_NAME), + langdict[getlang]["nightmodev2"]["nmd_off_not_present"].format( + chat_id=chat_id, bname=BOT_NAME + ), ) except ChatNotModified: pass except Exception as e: await app.send_message( LOG_CHANNEL, - langdict[getlang]["nightmodev2"]["nmd_off_err"].format(chat_id=chat_id, e=e), + langdict[getlang]["nightmodev2"]["nmd_off_err"].format( + chat_id=chat_id, e=e + ), ) else: job = scheduler.get_job(f"enable_nightmode_{chat_id}") close_at = job.next_run_time await app.send_message( chat_id, - langdict[getlang]["nightmodev2"]["nmd_off_success"].format(dt=tglsekarang(), close_at=close_at), + langdict[getlang]["nightmodev2"]["nmd_off_success"].format( + dt=tglsekarang(), close_at=close_at + ), reply_markup=reply_markup, ) @@ -137,14 +147,18 @@ async def mute_chat(chat_id: int): except ChatAdminRequired: await app.send_message( LOG_CHANNEL, - langdict[getlang]["nightmodev2"]["nmd_on_not_admin"].format(chat_id=chat_id, bname=BOT_NAME), + langdict[getlang]["nightmodev2"]["nmd_on_not_admin"].format( + chat_id=chat_id, bname=BOT_NAME + ), ) except (ChannelInvalid, ChannelPrivate): scheduler.remove_job(f"enable_nightmode_{chat_id}") scheduler.remove_job(f"disable_nightmode_{chat_id}") await app.send_message( LOG_CHANNEL, - langdict[getlang]["nightmodev2"]["nmd_on_not_present"].format(chat_id=chat_id, bname=BOT_NAME), + langdict[getlang]["nightmodev2"]["nmd_on_not_present"].format( + chat_id=chat_id, bname=BOT_NAME + ), ) except ChatNotModified: pass @@ -158,7 +172,9 @@ async def mute_chat(chat_id: int): open_at = job.next_run_time await app.send_message( chat_id, - langdict[getlang]["nightmodev2"]["nmd_on_success"].format(dt=tglsekarang(), open_at=open_at), + langdict[getlang]["nightmodev2"]["nmd_on_success"].format( + dt=tglsekarang(), open_at=open_at + ), reply_markup=reply_markup, ) @@ -183,7 +199,9 @@ async def nightmode_handler(c, msg, strings): now = datetime.now(TIME_ZONE) try: - start_timestamp = TIME_ZONE.localize(datetime.strptime((now.strftime("%m:%d:%Y - ") + start), "%m:%d:%Y - %H:%M")) + start_timestamp = TIME_ZONE.localize( + datetime.strptime((now.strftime("%m:%d:%Y - ") + start), "%m:%d:%Y - %H:%M") + ) except ValueError: return await msg.reply_msg(strings("invalid_time_format"), del_in=6) lockdur = re.findall(r"-e=(\w+)", msg.text) @@ -222,7 +240,11 @@ async def nightmode_handler(c, msg, strings): ) except ConflictingIdError: return await msg.reply_msg(strings("schedule_already_on")) - await msg.reply_msg(strings("nmd_enable_success").format(st=start_timestamp.strftime("%H:%M:%S"), lockdur=lockdur)) + await msg.reply_msg( + strings("nmd_enable_success").format( + st=start_timestamp.strftime("%H:%M:%S"), lockdur=lockdur + ) + ) if not bool(scheduler.state): scheduler.start() @@ -232,6 +254,8 @@ async def nightmode_handler(c, msg, strings): @use_chat_lang() async def callbackanightmd(c, q, strings): await q.answer( - strings("nmd_cb").format(bname=c.me.first_name, ver=__version__, pyver=platform.python_version()), + strings("nmd_cb").format( + bname=c.me.first_name, ver=__version__, pyver=platform.python_version() + ), show_alert=True, ) diff --git a/misskaty/plugins/notes.py b/misskaty/plugins/notes.py index 9585cd56..ca6d119e 100644 --- a/misskaty/plugins/notes.py +++ b/misskaty/plugins/notes.py @@ -62,7 +62,9 @@ async def save_notee(_, message): _type = "text" if message.reply_to_message.text else "sticker" note = { "type": _type, - "data": message.reply_to_message.text.markdown if _type == "text" else message.reply_to_message.sticker.file_id, + "data": message.reply_to_message.text.markdown + if _type == "text" + else message.reply_to_message.sticker.file_id, } chat_id = message.chat.id await save_note(chat_id, name, note) diff --git a/misskaty/plugins/nulis.py b/misskaty/plugins/nulis.py index bf2c9d44..eb7faf38 100644 --- a/misskaty/plugins/nulis.py +++ b/misskaty/plugins/nulis.py @@ -39,7 +39,9 @@ async def handwrite(client, message): elif len(message.command) > 1: txt = message.text.split(None, 1)[1] else: - return await message.reply("Please reply to message or write after command to use Nulis CMD.") + return await message.reply( + "Please reply to message or write after command to use Nulis CMD." + ) nan = await message.reply_msg("Processing...") try: img = Image.open("assets/kertas.jpg") @@ -54,7 +56,9 @@ async def handwrite(client, message): file = f"nulis_{message.from_user.id}.jpg" img.save(file) if os.path.exists(file): - await message.reply_photo(photo=file, caption=f"Written By : {client.me.mention}") + await message.reply_photo( + photo=file, caption=f"Written By : {client.me.mention}" + ) os.remove(file) await nan.delete() except Exception as e: diff --git a/misskaty/plugins/ocr.py b/misskaty/plugins/ocr.py index e2da466a..f90d5f82 100644 --- a/misskaty/plugins/ocr.py +++ b/misskaty/plugins/ocr.py @@ -29,13 +29,22 @@ __HELP__ = "/ocr [reply to photo] - Read Text From Image" @use_chat_lang() async def ocr(self: Client, ctx: Message, strings): reply = ctx.reply_to_message - if not reply or not reply.sticker and not reply.photo and (not reply.document or not reply.document.mime_type.startswith("image")): - return await ctx.reply_msg(strings("no_photo").format(cmd=ctx.command[0]), quote=True) + if ( + not reply + or not reply.sticker + and not reply.photo + and (not reply.document or not reply.document.mime_type.startswith("image")) + ): + return await ctx.reply_msg( + strings("no_photo").format(cmd=ctx.command[0]), quote=True + ) msg = await ctx.reply_msg(strings("read_ocr"), quote=True) try: file_path = await reply.download() if reply.sticker: - file_path = await reply.download(f"ocr_{ctx.from_user.id if ctx.from_user else ctx.sender_chat.id}.jpg") + file_path = await reply.download( + f"ocr_{ctx.from_user.id if ctx.from_user else ctx.sender_chat.id}.jpg" + ) response = await Telegraph().upload_file(file_path) url = f"https://telegra.ph{response[0]['src']}" req = ( diff --git a/misskaty/plugins/ping.py b/misskaty/plugins/ping.py index 207556ff..27ea34cd 100644 --- a/misskaty/plugins/ping.py +++ b/misskaty/plugins/ping.py @@ -56,7 +56,9 @@ async def ping_handler(self: Client, ctx: Message): check=True, capture_output=True, ) - resp_time = findall(r"time=.+m?s", shell.stdout, MULTILINE)[0].replace("time=", "") + resp_time = findall(r"time=.+m?s", shell.stdout, MULTILINE)[0].replace( + "time=", "" + ) text += f" **{dc.upper()}:** {resp_time} โœ…\n" except Exception: diff --git a/misskaty/plugins/pypi_search.py b/misskaty/plugins/pypi_search.py index 3b63473a..2cc6377d 100644 --- a/misskaty/plugins/pypi_search.py +++ b/misskaty/plugins/pypi_search.py @@ -31,7 +31,9 @@ async def getDataPypi(msg, kueri, CurrentPage, user): pypiResult = f"#Pypi Results For: {kueri}\n\n" for c, i in enumerate(PYPI_DICT[msg.id][0][index], start=1): pypiResult += f"{c}. {i['name']} {i['version']}\nCreated: {i['created']}\nDesc: {i['description']}\n\n" - extractbtn.append(InlineButton(c, f"pypidata#{CurrentPage}#{c}#{user}#{msg.id}")) + extractbtn.append( + InlineButton(c, f"pypidata#{CurrentPage}#{c}#{user}#{msg.id}") + ) pypiResult = "".join(i for i in pypiResult if i not in "[]") return pypiResult, PageLen, extractbtn except (IndexError, KeyError): @@ -44,14 +46,20 @@ async def getDataPypi(msg, kueri, CurrentPage, user): async def pypi_s(self: Client, ctx: Message): kueri = " ".join(ctx.command[1:]) if not kueri: - return await ctx.reply_msg("Please add query after command. Ex: /pypi pyrogram", del_in=6) + return await ctx.reply_msg( + "Please add query after command. Ex: /pypi pyrogram", del_in=6 + ) pesan = await ctx.reply_msg("โณ Please wait, getting data from pypi..", quote=True) CurrentPage = 1 - pypires, PageLen, btn = await getDataPypi(pesan, kueri, CurrentPage, ctx.from_user.id) + pypires, PageLen, btn = await getDataPypi( + pesan, kueri, CurrentPage, ctx.from_user.id + ) if not pypires: return keyboard = InlineKeyboard() - keyboard.paginate(PageLen, CurrentPage, "page_pypi#{number}" + f"#{pesan.id}#{ctx.from_user.id}") + keyboard.paginate( + PageLen, CurrentPage, "page_pypi#{number}" + f"#{pesan.id}#{ctx.from_user.id}" + ) keyboard.row(InlineButton("๐Ÿ‘‡ Get Info ", "Hmmm")) keyboard.row(*btn) keyboard.row(InlineButton("โŒ Close", f"close#{ctx.from_user.id}")) @@ -68,10 +76,14 @@ async def pypipage_callback(self: Client, callback_query: CallbackQuery): try: kueri = PYPI_DICT[message_id][1] except KeyError: - return await callback_query.answer("Invalid callback data, please send CMD again..") + return await callback_query.answer( + "Invalid callback data, please send CMD again.." + ) try: - pypires, PageLen, btn = await getDataPypi(callback_query.message, kueri, CurrentPage, callback_query.from_user.id) + pypires, PageLen, btn = await getDataPypi( + callback_query.message, kueri, CurrentPage, callback_query.from_user.id + ) except TypeError: return @@ -98,7 +110,9 @@ async def pypi_getdata(self: Client, callback_query: CallbackQuery): try: pkgname = PYPI_DICT[message_id][0][CurrentPage - 1][idlink - 1].get("name") except KeyError: - return await callback_query.answer("Invalid callback data, please send CMD again..") + return await callback_query.answer( + "Invalid callback data, please send CMD again.." + ) keyboard = InlineKeyboard() keyboard.row( @@ -111,7 +125,11 @@ async def pypi_getdata(self: Client, callback_query: CallbackQuery): try: html = await http.get(f"https://pypi.org/pypi/{pkgname}/json", headers=headers) res = html.json() - requirement = "".join(f"{i}, " for i in res["info"].get("requires_dist")) if res["info"].get("requires_dist") else "Unknown" + requirement = ( + "".join(f"{i}, " for i in res["info"].get("requires_dist")) + if res["info"].get("requires_dist") + else "Unknown" + ) msg = "" msg += f"Package Name: {res['info'].get('name', 'Unknown')}\n" msg += f"Version: {res['info'].get('version', 'Unknown')}\n" @@ -119,13 +137,17 @@ async def pypi_getdata(self: Client, callback_query: CallbackQuery): msg += f"Author: {res['info'].get('author', 'Unknown')}\n" msg += f"Author Email: {res['info'].get('author_email', 'Unknown')}\n" msg += f"Requirements: {requirement}\n" - msg += f"Requires Python: {res['info'].get('requires_python', 'Unknown')}\n" + msg += ( + f"Requires Python: {res['info'].get('requires_python', 'Unknown')}\n" + ) msg += f"HomePage: {res['info'].get('home_page', 'Unknown')}\n" msg += f"Bug Track: {res['info'].get('vulnerabilities', 'Unknown')}\n" if res["info"].get("project_urls"): msg += f"Docs Url: {res['info']['project_urls'].get('Documentation', 'Unknown')}\n" msg += f"Description: {res['info'].get('summary', 'Unknown')}\n" - msg += f"Pip Command: pip3 install {res['info'].get('name', 'Unknown')}\n" + msg += ( + f"Pip Command: pip3 install {res['info'].get('name', 'Unknown')}\n" + ) msg += f"Keywords: {res['info'].get('keywords', 'Unknown')}\n" except Exception as err: await callback_query.message.edit_msg(f"ERROR: {err}", reply_markup=keyboard) diff --git a/misskaty/plugins/quotly.py b/misskaty/plugins/quotly.py index 11852b57..7a8d5a06 100644 --- a/misskaty/plugins/quotly.py +++ b/misskaty/plugins/quotly.py @@ -45,7 +45,11 @@ async def get_message_sender_name(ctx: Message): if ctx.forward_sender_name: return ctx.forward_sender_name elif ctx.forward_from: - return f"{ctx.forward_from.first_name} {ctx.forward_from.last_name}" if ctx.forward_from.last_name else ctx.forward_from.first_name + return ( + f"{ctx.forward_from.first_name} {ctx.forward_from.last_name}" + if ctx.forward_from.last_name + else ctx.forward_from.first_name + ) elif ctx.forward_from_chat: return ctx.forward_from_chat.title @@ -64,22 +68,45 @@ async def get_message_sender_name(ctx: Message): async def get_custom_emoji(ctx: Message): if ctx.forward_date: - return "" if ctx.forward_sender_name or not ctx.forward_from and ctx.forward_from_chat or not ctx.forward_from else ctx.forward_from.emoji_status.custom_emoji_id + return ( + "" + if ctx.forward_sender_name + or not ctx.forward_from + and ctx.forward_from_chat + or not ctx.forward_from + else ctx.forward_from.emoji_status.custom_emoji_id + ) return ctx.from_user.emoji_status.custom_emoji_id if ctx.from_user else "" async def get_message_sender_username(ctx: Message): if ctx.forward_date: - if not ctx.forward_sender_name and not ctx.forward_from and ctx.forward_from_chat and ctx.forward_from_chat.username: + if ( + not ctx.forward_sender_name + and not ctx.forward_from + and ctx.forward_from_chat + and ctx.forward_from_chat.username + ): return ctx.forward_from_chat.username - elif not ctx.forward_sender_name and not ctx.forward_from and ctx.forward_from_chat or ctx.forward_sender_name or not ctx.forward_from: + elif ( + not ctx.forward_sender_name + and not ctx.forward_from + and ctx.forward_from_chat + or ctx.forward_sender_name + or not ctx.forward_from + ): return "" else: return ctx.forward_from.username or "" elif ctx.from_user and ctx.from_user.username: return ctx.from_user.username - elif ctx.from_user or ctx.sender_chat and not ctx.sender_chat.username or not ctx.sender_chat: + elif ( + ctx.from_user + or ctx.sender_chat + and not ctx.sender_chat.username + or not ctx.sender_chat + ): return "" else: return ctx.sender_chat.username @@ -87,14 +114,25 @@ async def get_message_sender_username(ctx: Message): async def get_message_sender_photo(ctx: Message): if ctx.forward_date: - if not ctx.forward_sender_name and not ctx.forward_from and ctx.forward_from_chat and ctx.forward_from_chat.photo: + if ( + not ctx.forward_sender_name + and not ctx.forward_from + and ctx.forward_from_chat + and ctx.forward_from_chat.photo + ): return { "small_file_id": ctx.forward_from_chat.photo.small_file_id, "small_photo_unique_id": ctx.forward_from_chat.photo.small_photo_unique_id, "big_file_id": ctx.forward_from_chat.photo.big_file_id, "big_photo_unique_id": ctx.forward_from_chat.photo.big_photo_unique_id, } - elif not ctx.forward_sender_name and not ctx.forward_from and ctx.forward_from_chat or ctx.forward_sender_name or not ctx.forward_from: + elif ( + not ctx.forward_sender_name + and not ctx.forward_from + and ctx.forward_from_chat + or ctx.forward_sender_name + or not ctx.forward_from + ): return "" else: return ( @@ -115,7 +153,12 @@ async def get_message_sender_photo(ctx: Message): "big_file_id": ctx.from_user.photo.big_file_id, "big_photo_unique_id": ctx.from_user.photo.big_photo_unique_id, } - elif ctx.from_user or ctx.sender_chat and not ctx.sender_chat.photo or not ctx.sender_chat: + elif ( + ctx.from_user + or ctx.sender_chat + and not ctx.sender_chat.photo + or not ctx.sender_chat + ): return "" else: return { @@ -172,10 +215,16 @@ async def pyrogram_to_quotly(messages): the_message_dict_to_append["avatar"] = True the_message_dict_to_append["from"] = {} the_message_dict_to_append["from"]["id"] = await get_message_sender_id(message) - the_message_dict_to_append["from"]["name"] = await get_message_sender_name(message) - the_message_dict_to_append["from"]["username"] = await get_message_sender_username(message) + the_message_dict_to_append["from"]["name"] = await get_message_sender_name( + message + ) + the_message_dict_to_append["from"][ + "username" + ] = await get_message_sender_username(message) the_message_dict_to_append["from"]["type"] = message.chat.type.name.lower() - the_message_dict_to_append["from"]["photo"] = await get_message_sender_photo(message) + the_message_dict_to_append["from"]["photo"] = await get_message_sender_photo( + message + ) if message.reply_to_message: the_message_dict_to_append["replyMessage"] = { "name": await get_message_sender_name(message.reply_to_message), @@ -232,7 +281,9 @@ async def msg_quotly_cmd(self: Client, ctx: Message): except Exception: return await ctx.reply_msg("๐Ÿคท๐Ÿปโ€โ™‚๏ธ") try: - messages_one = await self.get_messages(chat_id=ctx.chat.id, message_ids=ctx.reply_to_message.id, replies=-1) + messages_one = await self.get_messages( + chat_id=ctx.chat.id, message_ids=ctx.reply_to_message.id, replies=-1 + ) messages = [messages_one] except Exception: return await ctx.reply_msg("๐Ÿคท๐Ÿปโ€โ™‚๏ธ") diff --git a/misskaty/plugins/sangmata.py b/misskaty/plugins/sangmata.py index b915413e..f74ee9ae 100644 --- a/misskaty/plugins/sangmata.py +++ b/misskaty/plugins/sangmata.py @@ -37,11 +37,19 @@ async def cek_mataa(self: Client, ctx: Message, strings): ) usernamebefore, first_name, lastname_before = await get_userdata(ctx.from_user.id) msg = "" - if usernamebefore != ctx.from_user.username or first_name != ctx.from_user.first_name or lastname_before != ctx.from_user.last_name: + if ( + usernamebefore != ctx.from_user.username + or first_name != ctx.from_user.first_name + or lastname_before != ctx.from_user.last_name + ): msg += f"๐Ÿ‘€ Mata MissKaty\n\n๐ŸŒž User: {ctx.from_user.mention} [{ctx.from_user.id}]\n" if usernamebefore != ctx.from_user.username: usernamebefore = f"@{usernamebefore}" if usernamebefore else strings("no_uname") - usernameafter = f"@{ctx.from_user.username}" if ctx.from_user.username else strings("no_uname") + usernameafter = ( + f"@{ctx.from_user.username}" + if ctx.from_user.username + else strings("no_uname") + ) msg += strings("uname_change_msg").format(bef=usernamebefore, aft=usernameafter) await add_userdata( ctx.from_user.id, @@ -50,7 +58,9 @@ async def cek_mataa(self: Client, ctx: Message, strings): ctx.from_user.last_name, ) if first_name != ctx.from_user.first_name: - msg += strings("firstname_change_msg").format(bef=first_name, aft=ctx.from_user.first_name) + msg += strings("firstname_change_msg").format( + bef=first_name, aft=ctx.from_user.first_name + ) await add_userdata( ctx.from_user.id, ctx.from_user.username, @@ -60,7 +70,9 @@ async def cek_mataa(self: Client, ctx: Message, strings): if lastname_before != ctx.from_user.last_name: lastname_before = lastname_before or strings("no_last_name") lastname_after = ctx.from_user.last_name or strings("no_last_name") - msg += strings("lastname_change_msg").format(bef=lastname_before, aft=lastname_after) + msg += strings("lastname_change_msg").format( + bef=lastname_before, aft=lastname_after + ) await add_userdata( ctx.from_user.id, ctx.from_user.username, @@ -71,13 +83,20 @@ async def cek_mataa(self: Client, ctx: Message, strings): await ctx.reply_msg(msg, quote=True) -@app.on_message(filters.group & filters.command("sangmata_set", COMMAND_HANDLER) & ~filters.bot & ~filters.via_bot) +@app.on_message( + filters.group + & filters.command("sangmata_set", COMMAND_HANDLER) + & ~filters.bot + & ~filters.via_bot +) @adminsOnly("can_change_info") @ratelimiter @use_chat_lang() async def set_mataa(self: Client, ctx: Message, strings): if len(ctx.command) == 1: - return await ctx.reply_msg(strings("set_sangmata_help").format(cmd=ctx.command[0]), del_in=6) + return await ctx.reply_msg( + strings("set_sangmata_help").format(cmd=ctx.command[0]), del_in=6 + ) if ctx.command[1] == "on": cekset = await is_sangmata_on(ctx.chat.id) if cekset: diff --git a/misskaty/plugins/sed.py b/misskaty/plugins/sed.py index 24043770..e4d86ca9 100644 --- a/misskaty/plugins/sed.py +++ b/misskaty/plugins/sed.py @@ -36,7 +36,9 @@ async def sed(self: Client, ctx: Message): return try: - res = regex.sub(pattern, replace_with, text, count=count, flags=rflags, timeout=1) + res = regex.sub( + pattern, replace_with, text, count=count, flags=rflags, timeout=1 + ) except TimeoutError: return await ctx.reply_msg("Oops, your regex pattern has run for too long.") except regex.error as e: @@ -49,6 +51,8 @@ async def sed(self: Client, ctx: Message): reply_to_message_id=ctx.reply_to_message.id, ) except MessageEmpty: - return await ctx.reply_msg("Please reply message to use this feature.", del_in=5) + return await ctx.reply_msg( + "Please reply message to use this feature.", del_in=5 + ) except Exception as e: return await ctx.reply_msg(f"ERROR: {str(e)}") diff --git a/misskaty/plugins/session_generator.py b/misskaty/plugins/session_generator.py index cf9e3b55..aa71de97 100644 --- a/misskaty/plugins/session_generator.py +++ b/misskaty/plugins/session_generator.py @@ -47,7 +47,9 @@ buttons_ques = [ ], ] -gen_button = [[InlineKeyboardButton(text="๐Ÿ™„ Generate Session ๐Ÿ™„", callback_data="genstring")]] +gen_button = [ + [InlineKeyboardButton(text="๐Ÿ™„ Generate Session ๐Ÿ™„", callback_data="genstring")] +] async def is_batal(msg): @@ -70,34 +72,49 @@ async def is_batal(msg): return False -@app.on_callback_query(filters.regex(pattern=r"^(genstring|pyrogram|pyrogram_bot|telethon_bot|telethon)$")) +@app.on_callback_query( + filters.regex(pattern=r"^(genstring|pyrogram|pyrogram_bot|telethon_bot|telethon)$") +) @ratelimiter async def callbackgenstring(bot, callback_query): query = callback_query.matches[0].group(1) if query == "genstring": await callback_query.answer() - await callback_query.message.reply(ask_ques, reply_markup=InlineKeyboardMarkup(buttons_ques)) + await callback_query.message.reply( + ask_ques, reply_markup=InlineKeyboardMarkup(buttons_ques) + ) elif query.startswith("pyrogram") or query.startswith("telethon"): try: if query == "pyrogram": await callback_query.answer() await generate_session(bot, callback_query.message) elif query == "pyrogram_bot": - await callback_query.answer("ยป The session generator will be of Pyrogram v2.", show_alert=True) + await callback_query.answer( + "ยป The session generator will be of Pyrogram v2.", show_alert=True + ) await generate_session(bot, callback_query.message, is_bot=True) elif query == "telethon_bot": await callback_query.answer() - await generate_session(bot, callback_query.message, telethon=True, is_bot=True) + await generate_session( + bot, callback_query.message, telethon=True, is_bot=True + ) elif query == "telethon": await callback_query.answer() await generate_session(bot, callback_query.message, telethon=True) except Exception as e: LOGGER.error(traceback.format_exc()) - ERROR_MESSAGE = "Something went wrong. \n\n**ERROR** : {} " "\n\n**Please forward this message to my Owner**, if this message " "doesn't contain any sensitive data " "because this error is **not logged by bot.** !" + ERROR_MESSAGE = ( + "Something went wrong. \n\n**ERROR** : {} " + "\n\n**Please forward this message to my Owner**, if this message " + "doesn't contain any sensitive data " + "because this error is **not logged by bot.** !" + ) await callback_query.message.reply(ERROR_MESSAGE.format(str(e))) -@app.on_message(filters.private & ~filters.forwarded & filters.command("genstring", COMMAND_HANDLER)) +@app.on_message( + filters.private & ~filters.forwarded & filters.command("genstring", COMMAND_HANDLER) +) @ratelimiter async def genstringg(_, msg): await msg.reply(ask_ques, reply_markup=InlineKeyboardMarkup(buttons_ques)) @@ -127,12 +144,18 @@ async def generate_session(bot, msg, telethon=False, is_bot: bool = False): quote=True, reply_markup=InlineKeyboardMarkup(gen_button), ) - api_hash_msg = await msg.chat.ask("ยป Now please send your **API_HASH** to continue.", filters=filters.text) + api_hash_msg = await msg.chat.ask( + "ยป Now please send your **API_HASH** to continue.", filters=filters.text + ) if await is_batal(api_hash_msg): return api_hash = api_hash_msg.text await api_hash_msg.delete() - t = "Please send your **BOT_TOKEN** to continue.\nExample : `5432198765:abcdanonymousterabaaplol`'" if is_bot else "ยป Please send your **PHONE_NUMBER** with country code for which you want generate session. \nแด‡xแด€แดแดฉสŸแด‡ : `+6286356837789`'" + t = ( + "Please send your **BOT_TOKEN** to continue.\nExample : `5432198765:abcdanonymousterabaaplol`'" + if is_bot + else "ยป Please send your **PHONE_NUMBER** with country code for which you want generate session. \nแด‡xแด€แดแดฉสŸแด‡ : `+6286356837789`'" + ) phone_number_msg = await msg.chat.ask(t, filters=filters.text) if await is_batal(phone_number_msg): return diff --git a/misskaty/plugins/stickers.py b/misskaty/plugins/stickers.py index 0ad9b32a..d00cd7a3 100644 --- a/misskaty/plugins/stickers.py +++ b/misskaty/plugins/stickers.py @@ -43,7 +43,11 @@ __HELP__ = """ def get_emoji_regex(): - e_list = [getattr(emoji, e).encode("unicode-escape").decode("ASCII") for e in dir(emoji) if not e.startswith("_")] + e_list = [ + getattr(emoji, e).encode("unicode-escape").decode("ASCII") + for e in dir(emoji) + if not e.startswith("_") + ] # to avoid re.error excluding char that start with '*' e_sort = sorted([x for x in e_list if not x.startswith("*")], reverse=True) # Sort emojis by length to make sure multi-character emojis are @@ -75,7 +79,9 @@ async def getsticker_(self: Client, ctx: Message, strings): ) await ctx.reply_to_message.reply_document( document=sticker_file, - caption=f"Emoji: {sticker.emoji}\n" f"Sticker ID: {sticker.file_id}\n\n" f"Send by: @{BOT_USERNAME}", + caption=f"Emoji: {sticker.emoji}\n" + f"Sticker ID: {sticker.file_id}\n\n" + f"Send by: @{BOT_USERNAME}", ) shutil.rmtree(tempdir, ignore_errors=True) @@ -84,7 +90,11 @@ async def getsticker_(self: Client, ctx: Message, strings): @ratelimiter async def getstickerid(self: Client, ctx: Message): if ctx.reply_to_message.sticker: - await ctx.reply_msg("The ID of this sticker is: {stickerid}".format(stickerid=ctx.reply_to_message.sticker.file_id)) + await ctx.reply_msg( + "The ID of this sticker is: {stickerid}".format( + stickerid=ctx.reply_to_message.sticker.file_id + ) + ) @app.on_message(filters.command("unkang", COMMAND_HANDLER) & filters.reply) @@ -169,13 +179,22 @@ async def kang_sticker(self: Client, ctx: Message, strings): pack_prefix = "anim" if animated else "vid" if videos else "a" packname = f"{pack_prefix}_{ctx.from_user.id}_by_{self.me.username}" - if len(ctx.command) > 1 and ctx.command[1].isdigit() and int(ctx.command[1]) > 0: + if ( + len(ctx.command) > 1 + and ctx.command[1].isdigit() + and int(ctx.command[1]) > 0 + ): # provide pack number to kang in desired pack packnum = ctx.command.pop(1) - packname = f"{pack_prefix}{packnum}_{ctx.from_user.id}_by_{self.me.username}" + packname = ( + f"{pack_prefix}{packnum}_{ctx.from_user.id}_by_{self.me.username}" + ) if len(ctx.command) > 1: # matches all valid emojis in input - sticker_emoji = "".join(set(EMOJI_PATTERN.findall("".join(ctx.command[1:])))) or sticker_emoji + sticker_emoji = ( + "".join(set(EMOJI_PATTERN.findall("".join(ctx.command[1:])))) + or sticker_emoji + ) filename = await self.download_media(ctx.reply_to_message) if not filename: # Failed to download @@ -186,7 +205,11 @@ async def kang_sticker(self: Client, ctx: Message, strings): filename = "sticker.png" packname = f"c{ctx.from_user.id}_by_{self.me.username}" img_url = next( - (ctx.text[y.offset : (y.offset + y.length)] for y in ctx.entities if y.type == "url"), + ( + ctx.text[y.offset : (y.offset + y.length)] + for y in ctx.entities + if y.type == "url" + ), None, ) @@ -206,7 +229,10 @@ async def kang_sticker(self: Client, ctx: Message, strings): packnum = ctx.command.pop(2) packname = f"a{packnum}_{ctx.from_user.id}_by_{self.me.username}" if len(ctx.command) > 2: - sticker_emoji = "".join(set(EMOJI_PATTERN.findall("".join(ctx.command[2:])))) or sticker_emoji + sticker_emoji = ( + "".join(set(EMOJI_PATTERN.findall("".join(ctx.command[2:])))) + or sticker_emoji + ) resize = True else: return await prog_msg.edit_msg(strings("kang_help")) @@ -327,7 +353,9 @@ async def kang_sticker(self: Client, ctx: Message, strings): reply_markup=markup, ) # Cleanup - await self.delete_messages(chat_id=LOG_CHANNEL, message_ids=msg_.id, revoke=True) + await self.delete_messages( + chat_id=LOG_CHANNEL, message_ids=msg_.id, revoke=True + ) try: os.remove(filename) except OSError: diff --git a/misskaty/plugins/subscene_dl.py b/misskaty/plugins/subscene_dl.py index de9916c3..7dc14a37 100644 --- a/misskaty/plugins/subscene_dl.py +++ b/misskaty/plugins/subscene_dl.py @@ -30,7 +30,9 @@ async def getTitleSub(msg, kueri, CurrentPage, user): sdata = [] scraper = cloudscraper.create_scraper() param = {"query": kueri} - r = scraper.post("https://subscene.com/subtitles/searchbytitle", data=param).text + r = scraper.post( + "https://subscene.com/subtitles/searchbytitle", data=param + ).text soup = BeautifulSoup(r, "lxml") lists = soup.find("div", {"class": "search-result"}) entry = lists.find_all("div", {"class": "title"}) @@ -51,9 +53,13 @@ async def getTitleSub(msg, kueri, CurrentPage, user): for c, i in enumerate(SUB_TITLE_DICT[msg.id][0][index], start=1): subResult += f"{c}. {i['title']}\n" if c < 6: - extractbtn1.append(InlineButton(c, f"sublist#{CurrentPage}#{c}#{msg.id}#{user}")) + extractbtn1.append( + InlineButton(c, f"sublist#{CurrentPage}#{c}#{msg.id}#{user}") + ) else: - extractbtn2.append(InlineButton(c, f"sublist#{CurrentPage}#{c}#{msg.id}#{user}")) + extractbtn2.append( + InlineButton(c, f"sublist#{CurrentPage}#{c}#{msg.id}#{user}") + ) subResult = "".join(i for i in subResult if i not in "[]") return subResult, PageLen, extractbtn1, extractbtn2 except (IndexError, KeyError): @@ -66,7 +72,9 @@ async def getListSub(msg, link, CurrentPage, user): if not SUB_DL_DICT.get(msg.id): sdata = [] scraper = cloudscraper.create_scraper() - kuki = {"LanguageFilter": "13,44,50"} # Only filter language English, Malay, Indonesian + kuki = { + "LanguageFilter": "13,44,50" + } # Only filter language English, Malay, Indonesian r = scraper.get(link, cookies=kuki).text soup = BeautifulSoup(r, "lxml") for i in soup.findAll(class_="a1"): @@ -90,9 +98,13 @@ async def getListSub(msg, link, CurrentPage, user): for c, i in enumerate(SUB_DL_DICT[msg.id][0][index], start=1): subResult += f"{c}. {i['title']} [{i['rate']}]\n{i['lang']}\n" if c < 6: - extractbtn1.append(InlineButton(c, f"extractsubs#{CurrentPage}#{c}#{msg.id}#{user}")) + extractbtn1.append( + InlineButton(c, f"extractsubs#{CurrentPage}#{c}#{msg.id}#{user}") + ) else: - extractbtn2.append(InlineButton(c, f"extractsubs#{CurrentPage}#{c}#{msg.id}#{user}")) + extractbtn2.append( + InlineButton(c, f"extractsubs#{CurrentPage}#{c}#{msg.id}#{user}") + ) subResult = "".join(i for i in subResult if i not in "[]") return subResult, PageLen, extractbtn1, extractbtn2 except (IndexError, KeyError): @@ -105,10 +117,16 @@ async def getListSub(msg, link, CurrentPage, user): @ratelimiter async def subsceneCMD(self: Client, ctx: Message): if not ctx.input: - return await ctx.reply_msg(f"โ„น๏ธ Please add query after CMD!\nEx: /{ctx.command[0]} Jurassic World") - pesan = await ctx.reply_msg("โณ Please wait, getting data from subscene..", quote=True) + return await ctx.reply_msg( + f"โ„น๏ธ Please add query after CMD!\nEx: /{ctx.command[0]} Jurassic World" + ) + pesan = await ctx.reply_msg( + "โณ Please wait, getting data from subscene..", quote=True + ) CurrentPage = 1 - subres, PageLen, btn1, btn2 = await getTitleSub(pesan, ctx.input, CurrentPage, ctx.from_user.id) + subres, PageLen, btn1, btn2 = await getTitleSub( + pesan, ctx.input, CurrentPage, ctx.from_user.id + ) if not subres: return keyboard = InlineKeyboard() @@ -126,7 +144,9 @@ async def subsceneCMD(self: Client, ctx: Message): # Callback list title -@app.on_callback_query(filters.create(lambda _, __, query: "subscenepage#" in query.data)) +@app.on_callback_query( + filters.create(lambda _, __, query: "subscenepage#" in query.data) +) @ratelimiter async def subpage_callback(self: Client, callback_query: CallbackQuery): if callback_query.from_user.id != int(callback_query.data.split("#")[3]): @@ -141,7 +161,9 @@ async def subpage_callback(self: Client, callback_query: CallbackQuery): return await callback_query.message.delete_msg() try: - subres, PageLen, btn1, btn2 = await getTitleSub(callback_query.message, kueri, CurrentPage, callback_query.from_user.id) + subres, PageLen, btn1, btn2 = await getTitleSub( + callback_query.message, kueri, CurrentPage, callback_query.from_user.id + ) except TypeError: return @@ -156,7 +178,9 @@ async def subpage_callback(self: Client, callback_query: CallbackQuery): if btn2: keyboard.row(*btn2) keyboard.row(InlineButton("โŒ Close", f"close#{callback_query.from_user.id}")) - await callback_query.message.edit_msg(subres, disable_web_page_preview=True, reply_markup=keyboard) + await callback_query.message.edit_msg( + subres, disable_web_page_preview=True, reply_markup=keyboard + ) # Callback list title @@ -176,7 +200,9 @@ async def subdlpage_callback(self: Client, callback_query: CallbackQuery): return await callback_query.message.delete_msg() try: - subres, PageLen, btn1, btn2 = await getListSub(callback_query.message, link, CurrentPage, callback_query.from_user.id) + subres, PageLen, btn1, btn2 = await getListSub( + callback_query.message, link, CurrentPage, callback_query.from_user.id + ) except TypeError: return @@ -191,11 +217,15 @@ async def subdlpage_callback(self: Client, callback_query: CallbackQuery): if btn2: keyboard.row(*btn2) keyboard.row(InlineButton("โŒ Close", f"close#{callback_query.from_user.id}")) - await callback_query.message.edit_msg(subres, disable_web_page_preview=True, reply_markup=keyboard) + await callback_query.message.edit_msg( + subres, disable_web_page_preview=True, reply_markup=keyboard + ) # Callback dl subtitle -@app.on_callback_query(filters.create(lambda _, __, query: "extractsubs#" in query.data)) +@app.on_callback_query( + filters.create(lambda _, __, query: "extractsubs#" in query.data) +) @ratelimiter async def dlsub_callback(self: Client, callback_query: CallbackQuery): if callback_query.from_user.id != int(callback_query.data.split("#")[4]): diff --git a/misskaty/plugins/ubot_plugin.py b/misskaty/plugins/ubot_plugin.py index 51741532..633e6429 100644 --- a/misskaty/plugins/ubot_plugin.py +++ b/misskaty/plugins/ubot_plugin.py @@ -40,12 +40,22 @@ async def add_keep(_, message: Message): # @user.on_deleted_messages(filters.chat([-1001455886928, -1001255283935])) async def del_msg(client, message): - async for a in user.get_chat_event_log(message[0].chat.id, limit=1, filters=ChatEventFilter(deleted_messages=True)): + async for a in user.get_chat_event_log( + message[0].chat.id, limit=1, filters=ChatEventFilter(deleted_messages=True) + ): try: - ustat = (await user.get_chat_member(message[0].chat.id, a.deleted_message.from_user.id)).status + ustat = ( + await user.get_chat_member( + message[0].chat.id, a.deleted_message.from_user.id + ) + ).status except: ustat = enums.ChatMemberStatus.MEMBER - if ustat in [enums.ChatMemberStatus.ADMINISTRATOR, enums.ChatMemberStatus.OWNER] or a.deleted_message.from_user.is_bot: + if ( + ustat + in [enums.ChatMemberStatus.ADMINISTRATOR, enums.ChatMemberStatus.OWNER] + or a.deleted_message.from_user.is_bot + ): return if a.user.id == a.deleted_message.from_user.id: if a.deleted_message.text: @@ -63,7 +73,9 @@ async def del_msg(client, message): # @user.on_edited_message(filters.text & filters.chat(-1001455886928)) async def edit_msg(client, message): try: - ustat = (await user.get_chat_member(message.chat.id, message.from_user.id)).status + ustat = ( + await user.get_chat_member(message.chat.id, message.from_user.id) + ).status except: ustat = enums.ChatMemberStatus.MEMBER if message.from_user.is_bot or ustat in [ @@ -71,8 +83,12 @@ async def edit_msg(client, message): enums.ChatMemberStatus.OWNER, ]: return - async for a in user.get_chat_event_log(message.chat.id, limit=1, filters=ChatEventFilter(edited_messages=True)): - if a.old_message.text.startswith(("/mirror", "/leech", "/unzipmirror", "/unzipleech")): + async for a in user.get_chat_event_log( + message.chat.id, limit=1, filters=ChatEventFilter(edited_messages=True) + ): + if a.old_message.text.startswith( + ("/mirror", "/leech", "/unzipmirror", "/unzipleech") + ): await app.send_message( message.chat.id, f"#EDITED_MESSAGE\n\n{a.user.first_name} mengedit pesannya ๐Ÿง.\nPesan: {a.old_message.text}", @@ -124,7 +140,10 @@ async def join_date(app, message: Message): with open("joined_date.txt", "w", encoding="utf8") as f: f.write("Join Date First Name\n") for member in members: - f.write(str(datetime.fromtimestamp(member[1]).strftime("%y-%m-%d %H:%M")) + f" {member[0]}\n") + f.write( + str(datetime.fromtimestamp(member[1]).strftime("%y-%m-%d %H:%M")) + + f" {member[0]}\n" + ) await user.send_document(message.chat.id, "joined_date.txt") os.remove("joined_date.txt") @@ -151,7 +170,9 @@ async def recent_act(client, message): limit=0, ) ) - with open(f"recent_actions_{message.chat.id}.txt", "w", encoding="utf8") as log_file: + with open( + f"recent_actions_{message.chat.id}.txt", "w", encoding="utf8" + ) as log_file: log_file.write(str(full_log)) await message.reply_document(f"recent_actions_{message.chat.id}.txt") diff --git a/misskaty/plugins/webss.py b/misskaty/plugins/webss.py index a91ddba2..3fd9e824 100644 --- a/misskaty/plugins/webss.py +++ b/misskaty/plugins/webss.py @@ -28,7 +28,11 @@ __HELP__ = """ async def take_ss(self: Client, ctx: Message, strings): if len(ctx.command) == 1: return await ctx.reply_msg(strings("no_url"), del_in=6) - url = ctx.command[1] if ctx.command[1].startswith("http") else f"https://{ctx.command[1]}" + url = ( + ctx.command[1] + if ctx.command[1].startswith("http") + else f"https://{ctx.command[1]}" + ) download_file_path = os.path.join("downloads/", f"webSS_{ctx.from_user.id}.png") msg = await ctx.reply_msg(strings("wait_str")) try: