From f468909f3e52d375457dc13525c6c24509d8e7e9 Mon Sep 17 00:00:00 2001 From: Yasir Aris M Date: Fri, 10 Jan 2025 18:05:28 +0700 Subject: [PATCH 01/16] Add Error Handler Saatnya back fix bugs Signed-off-by: Yasir Aris M --- misskaty/plugins/dev.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/misskaty/plugins/dev.py b/misskaty/plugins/dev.py index aada9fd43c..8990c0bcb1 100644 --- a/misskaty/plugins/dev.py +++ b/misskaty/plugins/dev.py @@ -38,6 +38,8 @@ FloodWait, MessageTooLong, PeerIdInvalid, + RPCError, + SlowmodeWait, ) from pyrogram.raw.types import UpdateBotStopped from pyrogram.types import ( @@ -659,6 +661,17 @@ async def update_restart(_, ctx: Message, strings): os.execvp(sys.executable, [sys.executable, "-m", "misskaty"]) +@app.on_error(errors=(Exception, FloodWait, RPCError, SlowmodeWait)) +async def error_handlers(_: "Client", __: "Update", error: "Exception") -> None: +    if isinstance(error, (FloodWait, SlowmodeWait)): +        await asyncio.sleep(error.value) +    # else: +        # if config.DEBUG_MODE: +        #   LOGGER.error(repr(error)) +        # else: +        #    return None + + @app.on_raw_update(group=-99) async def updtebot(client, update, users, _): if isinstance(update, UpdateBotStopped): From 5bf1c04a9afcec79d78112fa4477ae78f50ab431 Mon Sep 17 00:00:00 2001 From: Yasir Aris M Date: Sun, 12 Jan 2025 11:32:24 +0700 Subject: [PATCH 02/16] Fix google search snippet Signed-off-by: Yasir Aris M --- misskaty/plugins/misc_tools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misskaty/plugins/misc_tools.py b/misskaty/plugins/misc_tools.py index c1d5909f10..8df59ff4ec 100644 --- a/misskaty/plugins/misc_tools.py +++ b/misskaty/plugins/misc_tools.py @@ -340,7 +340,7 @@ def shorten_text(text): for result in soup.select(".tF2Cxc"): link = result.select_one(".yuRUbf a")["href"] title = result.select_one(".DKV0Md").text - if snippet := result.find(class_="VwiC3b yXK7lf lVm3ye r025kc hJNv6b"): + if snippet := result.find(class_="VwiC3b yXK7lf p4wth r025kc hJNv6b"): snippet = snippet.get_text() elif snippet := result.find(class_="VwiC3b yXK7lf lVm3ye r025kc hJNv6b Hdw6tb"): snippet = snippet.get_text() From 1de02727c950861139db8032d4c138e6f12f2aef Mon Sep 17 00:00:00 2001 From: Yasir Aris M Date: Sun, 12 Jan 2025 11:36:29 +0700 Subject: [PATCH 03/16] Update dev.py Signed-off-by: Yasir Aris M --- misskaty/plugins/dev.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/misskaty/plugins/dev.py b/misskaty/plugins/dev.py index 8990c0bcb1..54425a192f 100644 --- a/misskaty/plugins/dev.py +++ b/misskaty/plugins/dev.py @@ -663,8 +663,8 @@ async def update_restart(_, ctx: Message, strings): @app.on_error(errors=(Exception, FloodWait, RPCError, SlowmodeWait)) async def error_handlers(_: "Client", __: "Update", error: "Exception") -> None: -    if isinstance(error, (FloodWait, SlowmodeWait)): -        await asyncio.sleep(error.value) + if isinstance(error, (FloodWait, SlowmodeWait)): + await asyncio.sleep(error.value)     # else:         # if config.DEBUG_MODE:         #   LOGGER.error(repr(error)) From c21d809fd78f0ce0af177aeacd404122fd76cd86 Mon Sep 17 00:00:00 2001 From: Yasir Aris M Date: Sun, 12 Jan 2025 11:38:33 +0700 Subject: [PATCH 04/16] Update dev.py Signed-off-by: Yasir Aris M --- misskaty/plugins/dev.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/misskaty/plugins/dev.py b/misskaty/plugins/dev.py index 54425a192f..aefbafd3a9 100644 --- a/misskaty/plugins/dev.py +++ b/misskaty/plugins/dev.py @@ -665,11 +665,11 @@ async def update_restart(_, ctx: Message, strings): async def error_handlers(_: "Client", __: "Update", error: "Exception") -> None: if isinstance(error, (FloodWait, SlowmodeWait)): await asyncio.sleep(error.value) -    # else: -        # if config.DEBUG_MODE: -        #   LOGGER.error(repr(error)) -        # else: -        #    return None + # else: + # if config.DEBUG_MODE: + #   LOGGER.error(repr(error)) + # else: +  #     return None @app.on_raw_update(group=-99) From 6f29813f06b71ff90841bb29161767f9c8a5500c Mon Sep 17 00:00:00 2001 From: Yasir Aris M Date: Sun, 12 Jan 2025 11:40:58 +0700 Subject: [PATCH 05/16] Update dev.py Signed-off-by: Yasir Aris M --- misskaty/plugins/dev.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/misskaty/plugins/dev.py b/misskaty/plugins/dev.py index aefbafd3a9..1b89e7d7b4 100644 --- a/misskaty/plugins/dev.py +++ b/misskaty/plugins/dev.py @@ -665,11 +665,11 @@ async def update_restart(_, ctx: Message, strings): async def error_handlers(_: "Client", __: "Update", error: "Exception") -> None: if isinstance(error, (FloodWait, SlowmodeWait)): await asyncio.sleep(error.value) - # else: - # if config.DEBUG_MODE: - #   LOGGER.error(repr(error)) - # else: -  #     return None + # else: + # if config.DEBUG_MODE: + # LOGGER.error(repr(error)) + # else: + # return None @app.on_raw_update(group=-99) From 2fec8d5772a8f1c8267be9116c05f81651c72aaa Mon Sep 17 00:00:00 2001 From: Yasir Aris M Date: Sun, 12 Jan 2025 11:47:31 +0700 Subject: [PATCH 06/16] Update misc_tools.py Signed-off-by: Yasir Aris M --- misskaty/plugins/misc_tools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misskaty/plugins/misc_tools.py b/misskaty/plugins/misc_tools.py index 8df59ff4ec..da10431ad7 100644 --- a/misskaty/plugins/misc_tools.py +++ b/misskaty/plugins/misc_tools.py @@ -342,7 +342,7 @@ def shorten_text(text): title = result.select_one(".DKV0Md").text if snippet := result.find(class_="VwiC3b yXK7lf p4wth r025kc hJNv6b"): snippet = snippet.get_text() - elif snippet := result.find(class_="VwiC3b yXK7lf lVm3ye r025kc hJNv6b Hdw6tb"): + elif snippet := result.find(class_="VwiC3b yXK7lf p4wth r025kc hJNv6b Hdw6tb"): snippet = snippet.get_text() else: snippet = "-" From b374614cce4ad36794ed8698030551cda3cacb7e Mon Sep 17 00:00:00 2001 From: Yasir Aris M Date: Sun, 12 Jan 2025 11:57:46 +0700 Subject: [PATCH 07/16] Update pypi_search.py Signed-off-by: Yasir Aris M --- misskaty/plugins/pypi_search.py | 43 ++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/misskaty/plugins/pypi_search.py b/misskaty/plugins/pypi_search.py index 9cf776f904..650f13b292 100644 --- a/misskaty/plugins/pypi_search.py +++ b/misskaty/plugins/pypi_search.py @@ -50,20 +50,41 @@ async def pypi_s(_, ctx: Message): "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 + html = await fetch.get(f"https://pypi.org/pypi/{pkgname}/json") + if html.status_code != 200: + return await pesan.edit_msg("Failed connect fo pypi server") + res = html.json() + requirement = ( + "".join(f"{i}, " for i in res["info"].get("requires_dist")) + if res["info"].get("requires_dist") + else "Unknown" ) - if not pypires: - return - keyboard = InlineKeyboard() - keyboard.paginate( - PageLen, CurrentPage, "page_pypi#{number}" + f"#{pesan.id}#{ctx.from_user.id}" + msg = "" + msg += f"Package Name: {res['info'].get('name', 'Unknown')}\n" + msg += f"Version: {res['info'].get('version', 'Unknown')}\n" + msg += f"License: {res['info'].get('license', 'Unknown')}\n" + 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" ) - keyboard.row(InlineButton("👇 Get Info ", "Hmmm")) - keyboard.row(*btn) + 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"Keywords: {res['info'].get('keywords', 'Unknown')}\n" + keyboard = InlineKeyboard() keyboard.row(InlineButton("❌ Close", f"close#{ctx.from_user.id}")) - await pesan.edit_msg(pypires, reply_markup=keyboard) + try: + await pesan.edit_msg(pypires, reply_markup=keyboard) + except MessageTooLong: + url = await post_to_telegraph(False, f"{pkgname}-detail", msg) + await pesan.edit_msg(f"Result is too long:\n{url}", reply_markup=keyboard) @app.on_callback_query(filters.create(lambda _, __, query: "page_pypi#" in query.data)) From fbed06d82b4a61a899ef5fe676db3a5c5ce01ae3 Mon Sep 17 00:00:00 2001 From: Yasir Aris M Date: Sun, 12 Jan 2025 11:59:32 +0700 Subject: [PATCH 08/16] Update pypi_search.py Signed-off-by: Yasir Aris M --- misskaty/plugins/pypi_search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misskaty/plugins/pypi_search.py b/misskaty/plugins/pypi_search.py index 650f13b292..89d4d1c641 100644 --- a/misskaty/plugins/pypi_search.py +++ b/misskaty/plugins/pypi_search.py @@ -81,7 +81,7 @@ async def pypi_s(_, ctx: Message): keyboard = InlineKeyboard() keyboard.row(InlineButton("❌ Close", f"close#{ctx.from_user.id}")) try: - await pesan.edit_msg(pypires, reply_markup=keyboard) + await pesan.edit_msg(msg, reply_markup=keyboard) except MessageTooLong: url = await post_to_telegraph(False, f"{pkgname}-detail", msg) await pesan.edit_msg(f"Result is too long:\n{url}", reply_markup=keyboard) From 340fa29896b14e1a99859bce084d4e95b6dd5e08 Mon Sep 17 00:00:00 2001 From: Yasir Aris M Date: Sun, 12 Jan 2025 12:03:23 +0700 Subject: [PATCH 09/16] Update dev.py Signed-off-by: Yasir Aris M --- misskaty/plugins/dev.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/misskaty/plugins/dev.py b/misskaty/plugins/dev.py index 1b89e7d7b4..7531450ab8 100644 --- a/misskaty/plugins/dev.py +++ b/misskaty/plugins/dev.py @@ -665,11 +665,8 @@ async def update_restart(_, ctx: Message, strings): async def error_handlers(_: "Client", __: "Update", error: "Exception") -> None: if isinstance(error, (FloodWait, SlowmodeWait)): await asyncio.sleep(error.value) - # else: - # if config.DEBUG_MODE: - # LOGGER.error(repr(error)) - # else: - # return None + else: + LOGGER.error(repr(error)) @app.on_raw_update(group=-99) From 41cfc85bc137ffee2870bb0a38cb7b9eb3cef548 Mon Sep 17 00:00:00 2001 From: Yasir Aris M Date: Sun, 12 Jan 2025 12:06:54 +0700 Subject: [PATCH 10/16] Update pypi_search.py Signed-off-by: Yasir Aris M --- misskaty/plugins/pypi_search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misskaty/plugins/pypi_search.py b/misskaty/plugins/pypi_search.py index 89d4d1c641..21fcdee6ce 100644 --- a/misskaty/plugins/pypi_search.py +++ b/misskaty/plugins/pypi_search.py @@ -83,7 +83,7 @@ async def pypi_s(_, ctx: Message): try: await pesan.edit_msg(msg, reply_markup=keyboard) except MessageTooLong: - url = await post_to_telegraph(False, f"{pkgname}-detail", msg) + url = await post_to_telegraph(False, f"{res['info'].get('name')} {res['info'].get('version', None)}-detail", msg) await pesan.edit_msg(f"Result is too long:\n{url}", reply_markup=keyboard) From 284395d4f543e60cf2e88b1efc12ab594d360d1d Mon Sep 17 00:00:00 2001 From: Yasir Aris M Date: Sun, 12 Jan 2025 12:08:26 +0700 Subject: [PATCH 11/16] Update pypi_search.py Signed-off-by: Yasir Aris M --- misskaty/plugins/pypi_search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misskaty/plugins/pypi_search.py b/misskaty/plugins/pypi_search.py index 21fcdee6ce..9fa4f8789b 100644 --- a/misskaty/plugins/pypi_search.py +++ b/misskaty/plugins/pypi_search.py @@ -50,7 +50,7 @@ async def pypi_s(_, ctx: Message): "Please add query after command. Ex: /pypi pyrogram", del_in=6 ) pesan = await ctx.reply_msg("⏳ Please wait, getting data from pypi..", quote=True) - html = await fetch.get(f"https://pypi.org/pypi/{pkgname}/json") + html = await fetch.get(f"https://pypi.org/pypi/{kueri}/json") if html.status_code != 200: return await pesan.edit_msg("Failed connect fo pypi server") res = html.json() From 1c8571b87ac35603cbc0634c6312cda836de0b23 Mon Sep 17 00:00:00 2001 From: Yasir Aris M Date: Mon, 13 Jan 2025 21:14:52 +0700 Subject: [PATCH 12/16] Remove global exception Signed-off-by: Yasir Aris M --- misskaty/plugins/dev.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misskaty/plugins/dev.py b/misskaty/plugins/dev.py index 7531450ab8..1a242f3a14 100644 --- a/misskaty/plugins/dev.py +++ b/misskaty/plugins/dev.py @@ -661,7 +661,7 @@ async def update_restart(_, ctx: Message, strings): os.execvp(sys.executable, [sys.executable, "-m", "misskaty"]) -@app.on_error(errors=(Exception, FloodWait, RPCError, SlowmodeWait)) +@app.on_error(errors=(FloodWait, RPCError, SlowmodeWait)) async def error_handlers(_: "Client", __: "Update", error: "Exception") -> None: if isinstance(error, (FloodWait, SlowmodeWait)): await asyncio.sleep(error.value) From ff988a9cc496e364fe7e71d5d0cfbea9967455aa Mon Sep 17 00:00:00 2001 From: Yasir Aris M Date: Mon, 13 Jan 2025 21:17:29 +0700 Subject: [PATCH 13/16] Fix bahasa in chatbot maybe :b Signed-off-by: Yasir Aris M --- misskaty/plugins/chatbot_ai.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/misskaty/plugins/chatbot_ai.py b/misskaty/plugins/chatbot_ai.py index 8cfef0a8c4..c11f86e3f0 100644 --- a/misskaty/plugins/chatbot_ai.py +++ b/misskaty/plugins/chatbot_ai.py @@ -101,7 +101,7 @@ async def gemini_chatbot(_, ctx: Message, strings): uid = ctx.from_user.id if ctx.from_user else ctx.sender_chat.id msg = await ctx.reply_msg(strings("find_answers_str"), quote=True) if uid not in gemini_conversations: - gemini_conversations[uid] = [{"role": "system", "content": "Kamu adalah AI dengan karakter mirip kucing bernama MissKaty AI yang diciptakan oleh Yasir untuk membantu manusia mencari informasi."}, {"role": "user", "content": ctx.input}] + gemini_conversations[uid] = [{"role": "system", "content": "Kamu adalah AI dengan karakter mirip kucing bernama MissKaty AI yang diciptakan oleh Yasir untuk membantu manusia mencari informasi dan gunakan bahasa sesuai yang saya katakan."}, {"role": "user", "content": ctx.input}] else: gemini_conversations[uid].append({"role": "user", "content": ctx.input}) ai_response = await get_openai_stream_response(False, GOOGLEAI_KEY, "https://gemini.yasirapi.eu.org/v1", "gemini-1.5-flash", gemini_conversations[uid], msg, strings) @@ -128,7 +128,7 @@ async def openai_chatbot(self, ctx: Message, strings): pertanyaan = ctx.input msg = await ctx.reply_msg(strings("find_answers_str"), quote=True) if uid not in gptai_conversations: - gptai_conversations[uid] = [{"role": "system", "content": "Kamu adalah AI dengan karakter mirip kucing bernama MissKaty AI yang diciptakan oleh Yasir untuk membantu manusia mencari informasi."}, {"role": "user", "content": pertanyaan}] + gptai_conversations[uid] = [{"role": "system", "content": "Kamu adalah AI dengan karakter mirip kucing bernama MissKaty AI yang diciptakan oleh Yasir untuk membantu manusia mencari informasi dan gunakan bahasa sesuai yang saya katakan."}, {"role": "user", "content": pertanyaan}] else: gptai_conversations[uid].append({"role": "user", "content": pertanyaan}) ai_response = await get_openai_stream_response(True, OPENAI_KEY, "https://models.inference.ai.azure.com" if uid == OWNER_ID else "https://duckai.yasirapi.eu.org/v1", "gpt-4o" if uid == OWNER_ID else "gpt-4o-mini", gptai_conversations[uid], msg, strings) From 4a49a32c448834b49b23b3c7a75ad199ccb23a67 Mon Sep 17 00:00:00 2001 From: Yasir Aris M Date: Wed, 15 Jan 2025 11:36:23 +0700 Subject: [PATCH 14/16] Catch error admin permission in warn CMD Will add another in another time Signed-off-by: Yasir Aris M --- misskaty/plugins/admin.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/misskaty/plugins/admin.py b/misskaty/plugins/admin.py index 89611db9de..085d575a44 100644 --- a/misskaty/plugins/admin.py +++ b/misskaty/plugins/admin.py @@ -620,9 +620,12 @@ async def warn_user(client, message, strings): if message.command[0][0] == "d": await message.reply_to_message.delete() if warns >= 2: - await message.chat.ban_member(user_id) - await message.reply_text(strings("exceed_warn_msg").format(mention=mention)) - await remove_warns(chat_id, await int_to_alpha(user_id)) + try: + await message.chat.ban_member(user_id) + await message.reply_msg(strings("exceed_warn_msg").format(mention=mention)) + await remove_warns(chat_id, await int_to_alpha(user_id)) + except ChatAdminRequired: + await message.reply_msg(strings("no_ban_permission")) else: warn = {"warns": warns + 1} msg = strings("warn_msg").format( @@ -631,7 +634,7 @@ async def warn_user(client, message, strings): reas=reason or "No Reason Provided.", twarn=warns + 1, ) - await message.reply_text(msg, reply_markup=keyboard) + await message.reply_msg(msg, reply_markup=keyboard) await add_warn(chat_id, await int_to_alpha(user_id), warn) From 25b301e79ed0265274baa396d28c679ad3553a2e Mon Sep 17 00:00:00 2001 From: Yasir Aris M Date: Wed, 29 Jan 2025 11:12:10 +0700 Subject: [PATCH 15/16] Update ke github models, duckduckgo ai api is broken Signed-off-by: Yasir Aris M --- misskaty/plugins/chatbot_ai.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/misskaty/plugins/chatbot_ai.py b/misskaty/plugins/chatbot_ai.py index c11f86e3f0..a72d2e4b58 100644 --- a/misskaty/plugins/chatbot_ai.py +++ b/misskaty/plugins/chatbot_ai.py @@ -113,6 +113,9 @@ async def gemini_chatbot(_, ctx: Message, strings): gemini_conversations[uid].append({"role": "assistant", "content": ai_response}) @app.on_message(filters.command("ask", COMMAND_HANDLER) & pyro_cooldown.wait(10)) +@app.on_bot_business_message( + filters.command("ask", COMMAND_HANDLER) & pyro_cooldown.wait(10) +) @use_chat_lang() async def openai_chatbot(self, ctx: Message, strings): if len(ctx.command) == 1: @@ -131,7 +134,7 @@ async def openai_chatbot(self, ctx: Message, strings): gptai_conversations[uid] = [{"role": "system", "content": "Kamu adalah AI dengan karakter mirip kucing bernama MissKaty AI yang diciptakan oleh Yasir untuk membantu manusia mencari informasi dan gunakan bahasa sesuai yang saya katakan."}, {"role": "user", "content": pertanyaan}] else: gptai_conversations[uid].append({"role": "user", "content": pertanyaan}) - ai_response = await get_openai_stream_response(True, OPENAI_KEY, "https://models.inference.ai.azure.com" if uid == OWNER_ID else "https://duckai.yasirapi.eu.org/v1", "gpt-4o" if uid == OWNER_ID else "gpt-4o-mini", gptai_conversations[uid], msg, strings) + ai_response = await get_openai_stream_response(True, OPENAI_KEY, "https://models.inference.ai.azure.com", "gpt-4o-mini", gptai_conversations[uid], msg, strings) if not ai_response: gptai_conversations[uid].pop() if len(gptai_conversations[uid]) == 1: From 1df8797c1cc37d82dee41422094d4166e25c6511 Mon Sep 17 00:00:00 2001 From: Yasir Aris M Date: Wed, 29 Jan 2025 11:29:15 +0700 Subject: [PATCH 16/16] Update utils.py Signed-off-by: Yasir Aris M --- utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.py b/utils.py index 09aeb0b68e..d66c34b251 100644 --- a/utils.py +++ b/utils.py @@ -72,7 +72,7 @@ async def broadcast_messages(user_id, message): await message.copy(chat_id=user_id) return True, "Succes" except FloodWait as e: - await asyncio.sleep(e.x) + await asyncio.sleep(e.value) return await broadcast_messages(user_id, message) except InputUserDeactivated: await db.delete_user(int(user_id))