diff --git a/locales/en-US/nightmodev2.json b/locales/en-US/nightmodev2.json index d952bc8f..439d417b 100644 --- a/locales/en-US/nightmodev2.json +++ b/locales/en-US/nightmodev2.json @@ -5,7 +5,7 @@ "invalid_lockdur": "Invalid time duration. Use proper format.\nExample: 6h (for 6 hours), 10m for 10 minutes.", "schedule_already_on": "Already a schedule is running in this chat. Disable it using `-d` flag.", "nmd_enable_success": "Successfully enabled nightmode in this chat.\nGroup will be locked at {st} and will be opened after {lockdur} everyday.", - "nmd_cb": "πŸ”– Hai, Aku {bname} dibuat menggunakan Framework Pyrogram v{ver} dan Python 3.10.\n\nMau buat bot seperti ini? Yuuk belajar di @botindonesia\nOwner: @YasirArisM", + "nmd_cb": "πŸ”– Hai, Aku {bname} dibuat menggunakan Framework Pyrogram v{ver} dan Python v{pyver}.\n\nMau buat bot seperti ini? Yuuk belajar di @botindonesia\nOwner: @YasirArisM", "nmd_off_not_admin": "#NIGHTMODE_FAIL\nFailed to turn off nightmode at `{chat_id}`, since {bname} is not an admin in chat `{chat_id}`", "nmd_off_not_present": "#NIGHTMODE_FAIL\nFailed to turn off nightmode at `{chat_id}`, since {bname} is not present in chat `{chat_id}`. Removed group from list.", "nmd_off_err": "#NIGHTMODE_FAIL\nFailed to turn off nightmode at `{chat_id}`\nERROR: `{e}`", diff --git a/locales/id-ID/nightmodev2.json b/locales/id-ID/nightmodev2.json index f8cf223d..98f858dd 100644 --- a/locales/id-ID/nightmodev2.json +++ b/locales/id-ID/nightmodev2.json @@ -5,7 +5,7 @@ "invalid_lockdur": "Durasi waktu tidak valid. Gunakan format yang tepat.\nContoh: 6j (selama 6 jam), 10m selama 10 menit.", "schedule_already_on": "Sudah ada jadwal yang berjalan di obrolan ini. Nonaktifkan menggunakan tanda `-d`.", "nmd_enable_success": "Berhasil mengaktifkan mode malam dalam obrolan ini.\nGrup akan dikunci pada {st} dan akan dibuka setelah {lockdur} setiap hari.", - "nmd_cb": "πŸ”– Hai, Saya {bname} dibuat menggunakan Framework Pyrogram v{ver} dan Python 3.10.\n\nMau buat bot seperti ini? Yuuk belajar di @botindonesia\nOwner: @YasirArisM", + "nmd_cb": "πŸ”– Hai, Saya {bname} dibuat menggunakan Framework Pyrogram v{ver} dan Python v{pyver}.\n\nMau buat bot seperti ini? Yuuk belajar di @botindonesia\nOwner: @YasirArisM", "nmd_off_not_admin": "#NIGHTMODE_FAIL\nGagal mematikan mode malam di `{chat_id}`, karena {bname} bukan admin di obrolan `{chat_id}`", "nmd_off_not_present": "#NIGHTMODE_FAIL\nGagal mematikan mode malam di `{chat_id}`, karena {bname} tidak ada di obrolan `{chat_id}`. Menghapus grup dari daftar.", "nmd_off_err": "#NIGHTMODE_FAIL\nGagal mematikan mode malam di `{chat_id}`\nERROR: `{e}`", diff --git a/locales/id-JW/nightmodev2.json b/locales/id-JW/nightmodev2.json index 045218a7..273e1307 100644 --- a/locales/id-JW/nightmodev2.json +++ b/locales/id-JW/nightmodev2.json @@ -5,7 +5,7 @@ "invalid_lockdur": "Suwene wektu ora bener. Gunakake format sing bener.\nConto: 6h (6 jam), 10m kanggo 10 menit.", "schedule_already_on": "Wis ana jadwal ing obrolan iki. Pateni nganggo gendΓ©ra `-d`.", "nmd_enable_success": "Kasil ngaktifake mode wengi ing obrolan iki.\nGrup bakal dikunci ing {st} lan bakal dibukak sawise {lockdur} saben dina.", - "nmd_cb": "πŸ”– Hai, Aku {bname} digawe nganggo Framework Pyrogram v{ver} lan Python 3.10.\n\nMau gawe bot kaya iki? Yuuk belajar di @botindonesia\nOwner: @YasirArisM", + "nmd_cb": "πŸ”– Hai, Aku {bname} digawe nganggo Framework Pyrogram v{ver} lan Python v{pyver}.\n\nMau gawe bot kaya iki? Yuuk belajar di @botindonesia\nOwner: @YasirArisM", "nmd_off_not_admin": "#NIGHTMODE_FAIL\nGagal mateni nightmode ing `{chat_id}`, amarga {bname} dudu admin ing chat `{chat_id}`", "nmd_off_not_present": "#NIGHTMODE_FAIL\nGagal mateni nightmode ing `{chat_id}`, amarga {bname} ora ana ing chat `{chat_id}`. Dibusak grup saka dhaptar.", "nmd_off_err": "#NIGHTMODE_FAIL\nGagal mateni nightmode ing `{chat_id}`\nERROR: `{e}`", diff --git a/misskaty/core/decorator/ratelimiter.py b/misskaty/core/decorator/ratelimiter.py index 94527585..6be7630f 100644 --- a/misskaty/core/decorator/ratelimiter.py +++ b/misskaty/core/decorator/ratelimiter.py @@ -29,7 +29,11 @@ def ratelimiter(func: Callable) -> Callable: return elif isinstance(update, CallbackQuery): - await update.answer(warning_message, show_alert=True) + try: + await update.answer(warning_message, show_alert=True) + except QueryIdInvalid: + warned_users[userid] = 1 + return warned_users[userid] = 1 return diff --git a/misskaty/core/misskaty_patch/listen/listen.py b/misskaty/core/misskaty_patch/listen/listen.py index fc52eec7..e051118c 100644 --- a/misskaty/core/misskaty_patch/listen/listen.py +++ b/misskaty/core/misskaty_patch/listen/listen.py @@ -19,6 +19,7 @@ import pyrogram from inspect import iscoroutinefunction from typing import Optional, Callable, Union +from pyrogram.errors import QueryIdInvalid from enum import Enum from ..utils import patch, patchable, PyromodConfig @@ -268,7 +269,10 @@ class CallbackQueryHandler: if (permissive_listener and not listener) and permissive_listener["unallowed_click_alert"]: alert = permissive_listener["unallowed_click_alert"] if type(permissive_listener["unallowed_click_alert"]) == str else PyromodConfig.unallowed_click_alert_text - await query.answer(alert) + try: + await query.answer(alert) + except QueryIdInvalid: + return False return False filters = listener["filters"] if listener else self.filters diff --git a/misskaty/plugins/currency.py b/misskaty/plugins/currency.py index eb6201d4..eb292735 100644 --- a/misskaty/plugins/currency.py +++ b/misskaty/plugins/currency.py @@ -41,8 +41,8 @@ async def currency(self: Client, ctx: Message): last_update = data["time_last_update_utc"] except KeyError: return await ctx.reply_msg("Invalid response from api !") - await ctx.reply_msg(f"**CURRENCY EXCHANGE RATE RESULT:**\n\n`{amount}` **{base_code}** = `{round(conversion_result)}` **{target_code}**\nRate Today = `{round(conversion_rate)}`\nLast Update: {last_update}") - except: + await ctx.reply_msg(f"**CURRENCY EXCHANGE RATE RESULT:**\n\n`{format(amount, ",")}` **{base_code}** = `{format(conversion_result, ",")}` **{target_code}**\nRate Today = `{format(conversion_rate, ",")}`\nLast Update: {last_update}") + except Exception as err: await ctx.reply_msg("Failed convert currency, maybe you give wrong currency format or api down.") else: await ctx.reply_msg("This seems to be some alien currency, which I can't convert right now.. (βŠ™_βŠ™;)") diff --git a/misskaty/plugins/imdb_search.py b/misskaty/plugins/imdb_search.py index 23ea3d45..cf00a3f4 100644 --- a/misskaty/plugins/imdb_search.py +++ b/misskaty/plugins/imdb_search.py @@ -155,15 +155,14 @@ async def imdb_search_id(kueri, message): ) buttons.add(*BTN) msg = await k.edit_caption(msg, reply_markup=buttons) - try: - await msg.wait_for_click( - from_user_id=message.from_user.id, - timeout=30 - ) - except ListenerTimeout: - await msg.edit_caption("πŸ˜Άβ€πŸŒ«οΈ Waktu Habis. Task Telah Dibatalkan!") + await msg.wait_for_click( + from_user_id=message.from_user.id, + timeout=30 + ) + except ListenerTimeout: + await msg.edit_caption("πŸ˜Άβ€πŸŒ«οΈ Waktu Habis. Task Telah Dibatalkan!") except Exception as err: - await k.edit_caption(f"Ooppss, gagal mendapatkan daftar judul di IMDb. Mungkin terkena rate limit atau down.\n\nERROR: {err}") + await msg.edit_caption(f"Ooppss, gagal mendapatkan daftar judul di IMDb. Mungkin terkena rate limit atau down.\n\nERROR: {err}") async def imdb_search_en(kueri, message): @@ -212,15 +211,14 @@ async def imdb_search_en(kueri, message): ) buttons.add(*BTN) msg = await k.edit_caption(msg, reply_markup=buttons) - try: - await msg.wait_for_click( - from_user_id=message.from_user.id, - timeout=30 - ) - except ListenerTimeout: - await msg.edit_caption("πŸ˜Άβ€πŸŒ«οΈ Timeout. Task Has Been Cancelled!") + await msg.wait_for_click( + from_user_id=message.from_user.id, + timeout=30 + ) + except ListenerTimeout: + await msg.edit_caption("πŸ˜Άβ€πŸŒ«οΈ Timeout. Task Has Been Cancelled!") except Exception as err: - await k.edit_caption(f"Failed when requesting movies title. Maybe got rate limit or down.\n\nERROR: {err}") + await msg.edit_caption(f"Failed when requesting movies title. Maybe got rate limit or down.\n\nERROR: {err}") @app.on_callback_query(filters.regex("^imdbcari")) @@ -265,15 +263,14 @@ async def imdbcari(self: Client, query: CallbackQuery): ) buttons.add(*BTN) msg = await query.message.edit_caption(msg, reply_markup=buttons) - try: - await msg.wait_for_click( - from_user_id=int(uid), - timeout=30 - ) - except ListenerTimeout: - await msg.edit_caption("πŸ˜Άβ€πŸŒ«οΈ Waktu Habis. Task Telah Dibatalkan!") + await msg.wait_for_click( + from_user_id=int(uid), + timeout=30 + ) + except ListenerTimeout: + await msg.edit_caption("πŸ˜Άβ€πŸŒ«οΈ Waktu Habis. Task Telah Dibatalkan!") except Exception as err: - await query.message.edit_caption(f"Ooppss, gagal mendapatkan daftar judul di IMDb. Mungkin terkena rate limit atau down.\n\nERROR: {err}") + await msg.edit_caption(f"Ooppss, gagal mendapatkan daftar judul di IMDb. Mungkin terkena rate limit atau down.\n\nERROR: {err}") else: if query.from_user.id != int(uid): return await query.answer("⚠️ Access Denied!", True) @@ -311,15 +308,14 @@ async def imdbcari(self: Client, query: CallbackQuery): ) buttons.add(*BTN) msg = await query.message.edit_caption(msg, reply_markup=buttons) - try: - await msg.wait_for_click( - from_user_id=int(uid), - timeout=30 - ) - except ListenerTimeout: - await msg.edit_caption("πŸ˜Άβ€πŸŒ«οΈ Timeout. Task Has Been Cancelled!") + await msg.wait_for_click( + from_user_id=int(uid), + timeout=30 + ) + except ListenerTimeout: + await msg.edit_caption("πŸ˜Άβ€πŸŒ«οΈ Timeout. Task Has Been Cancelled!") except Exception as err: - await query.message.edit_caption(f"Failed when requesting movies title. Maybe got rate limit or down.\n\nERROR: {err}") + await msg.edit_caption(f"Failed when requesting movies title. Maybe got rate limit or down.\n\nERROR: {err}") @app.on_callback_query(filters.regex("^imdbres_id")) diff --git a/misskaty/plugins/karma.py b/misskaty/plugins/karma.py index 6e185313..96fe5671 100644 --- a/misskaty/plugins/karma.py +++ b/misskaty/plugins/karma.py @@ -151,7 +151,10 @@ async def command_karma(_, message): ) if not karma_dicc: return await m.edit("No karma in DB for this chat.") - userdb = await get_user_id_and_usernames(app) + try: + userdb = await get_user_id_and_usernames(app) + except AttributeError: + return karma = {} for user_idd, karma_count in karma_arranged.items(): if limit > 15: diff --git a/misskaty/plugins/nightmodev2.py b/misskaty/plugins/nightmodev2.py index ae06f97b..bd2aa7d6 100644 --- a/misskaty/plugins/nightmodev2.py +++ b/misskaty/plugins/nightmodev2.py @@ -1,4 +1,5 @@ import re +import platform from datetime import datetime, timedelta import pytz @@ -177,4 +178,4 @@ async def nightmode_handler(c, msg, strings): @ratelimiter @use_chat_lang() async def callbackanightmd(c, q, strings): - await q.answer(strings("nmd_cb").format(bname=c.me.first_name, ver=__version__), show_alert=True) + await q.answer(strings("nmd_cb").format(bname=c.me.first_name, ver=__version__, pyver=platform.python_version()), show_alert=True) diff --git a/misskaty/plugins/web_scraper.py b/misskaty/plugins/web_scraper.py index d858143f..5133bef2 100644 --- a/misskaty/plugins/web_scraper.py +++ b/misskaty/plugins/web_scraper.py @@ -348,7 +348,7 @@ async def getSame(msg, query, current_page, strings): sdata.append({"url": url, "title": title, "sta": sta, "rate": rate}) if not sdata: await msg.edit_msg(strings("no_result"), del_in=5) - return None, None, 0 + return None, None SCRAP_DICT[msg.id] = [split_arr(sdata, 10), query] try: index = int(current_page - 1) @@ -478,7 +478,10 @@ async def melong_s(client, message, strings): keyboard.row(InlineButton(strings("ex_data"), user_id=message.from_user.id)) keyboard.row(*btn) keyboard.row(InlineButton(strings("cl_btn"), f"close#{message.from_user.id}")) - await pesan.edit_msg(melongres, disable_web_page_preview=True, reply_markup=keyboard) + try: + await pesan.edit_msg(melongres, disable_web_page_preview=True, reply_markup=keyboard) + except Exception as err: + await pesan.edit_msg(f"ERROR: {err}", disable_web_page_preview=True, reply_markup=keyboard) # Savefilm21 CMD @@ -881,10 +884,9 @@ async def savefilm21_scrap(_, callback_query, strings): soup = BeautifulSoup(html.text, "lxml") res = soup.find_all(class_="button button-shadow") res = "".join(f"{i.text}\n{i['href']}\n\n" for i in res) + await callback_query.message.edit_msg(strings("res_scrape").format(link=link, kl=res), reply_markup=keyboard) except Exception as err: await callback_query.message.edit_msg(f"ERROR: {err}", reply_markup=keyboard) - return - await callback_query.message.edit_msg(strings("res_scrape").format(link=link, kl=res), reply_markup=keyboard) # Scrape Link Download Movieku.CC @@ -920,7 +922,7 @@ async def muviku_scrap(_, message, strings): @use_chat_lang() async def melong_scrap(_, callback_query, strings): if callback_query.from_user.id != int(callback_query.data.split("#")[3]): - return await callback_query.answer(strings("uauth"), True) + return await callback_query.answer(strings("unauth"), True) idlink = int(callback_query.data.split("#")[2]) message_id = int(callback_query.data.split("#")[4]) CurrentPage = int(callback_query.data.split("#")[1]) @@ -939,10 +941,9 @@ async def melong_scrap(_, callback_query, strings): hardsub = ep.findPrevious("div") softsub = ep.findNext("div") rep += f"{hardsub}\n{softsub}" + await callback_query.message.edit_msg(strings("res_scrape").format(link=link, kl=rep), reply_markup=keyboard) except Exception as err: await callback_query.message.edit_msg(f"ERROR: {err}", reply_markup=keyboard) - return - await callback_query.message.edit_msg(strings("res_scrape").format(link=link, kl=rep), reply_markup=keyboard) # Scrape DDL Link Gomov @@ -971,10 +972,9 @@ async def gomov_dl(_, callback_query, strings): title = i.find("a").text link = i.find("a")["href"] hasil += f"\n{title}\n{link}\n" + await callback_query.message.edit_msg(strings("res_scrape").format(link=link, kl=hasil), reply_markup=keyboard) except Exception as err: await callback_query.message.edit_msg(f"ERROR: {err}", reply_markup=keyboard) - return - await callback_query.message.edit_msg(strings("res_scrape").format(link=link, kl=hasil), reply_markup=keyboard) @app.on_callback_query(filters.create(lambda _, __, query: "lendriveextract#" in query.data))