Fix Update

This commit is contained in:
yasirarism 2023-05-16 04:32:50 +00:00 committed by GitHub
parent c4930d0985
commit c5aab68eef
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 54 additions and 46 deletions

View file

@ -28,7 +28,7 @@ MOD_NOLOAD = ["subscene_dl"]
HELPABLE = {} HELPABLE = {}
cleanmode = {} cleanmode = {}
botStartTime = time.time() botStartTime = time.time()
misskaty_version = "v2.023.5.9 - Stable" misskaty_version = "v2.023.5.16 - Stable"
pymonclient = MongoClient(DATABASE_URI) pymonclient = MongoClient(DATABASE_URI)
mongo = AsyncIOMotorClient(DATABASE_URI) mongo = AsyncIOMotorClient(DATABASE_URI)

View file

@ -22,6 +22,7 @@ from psutil import virtual_memory
from pyrogram import enums, filters, Client, __version__ as pyrover from pyrogram import enums, filters, Client, __version__ as pyrover
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message
from pyrogram.raw.types import UpdateBotStopped from pyrogram.raw.types import UpdateBotStopped
from pykeyboard import InlineKeyboard
from misskaty import app, user, botStartTime, misskaty_version, BOT_NAME from misskaty import app, user, botStartTime, misskaty_version, BOT_NAME
from misskaty.helper.http import http from misskaty.helper.http import http
@ -81,10 +82,18 @@ async def log_file(self: Client, ctx: Message, strings) -> "Message":
@app.on_message(filters.command(["donate"], COMMAND_HANDLER)) @app.on_message(filters.command(["donate"], COMMAND_HANDLER))
async def donate(_, message): async def donate(client, ctx):
await message.reply_photo( keyboard = InlineKeyboard(row_width=3)
"https://telegra.ph/file/2acf7698f300ef3d9138f.jpg", keyboard.add(
caption=f"Hai {message.from_user.mention}, jika kamu merasa bot ini berguna bisa melakukan donasi dengan scan kode QRIS diatas yaa. Terimakasih..", InlineButton('QR QRIS [Yasir Store]', url='https://telegra.ph/file/2acf7698f300ef3d9138f.jpg'),
InlineButton('Bank Jago [Yasir Aris M]', '109641845083'),
InlineButton('Saweria', url='https://saweria.co/yasirarism'),
InlineButton('Trakteer', url='https://trakteer.id/yasir-aris-sp7cn'),
InlineButton('Ko-Fi', url='https://ko-fi.com/yasirarism'),
InlineButton('PayPal', url='https://paypal.me/yasirarism'),
)
await ctx.reply(
f"Hai {message.from_user.mention}, jika kamu merasa bot ini besrguna bisa melakukan donasi dengan ke rekening diatas yaa. Karena server bot ini tidaklah gratis. Terimakasih..\n\n"Hi {message.from_user.mention}, if you feel this bot is useful, you can make a donation to the account above. Because this bot server is not free. Thank you..",
) )

View file

@ -10,6 +10,7 @@ from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from misskaty import app from misskaty import app
from .web_scraper import SCRAP_DICT, data_kuso from .web_scraper import SCRAP_DICT, data_kuso
from .pypi_search import PYPI_DICT from .pypi_search import PYPI_DICT
from .ytdl_plugins import YT_DB
from misskaty.core.decorator.permissions import admins_in_chat from misskaty.core.decorator.permissions import admins_in_chat
from misskaty.core.decorator.ratelimiter import ratelimiter from misskaty.core.decorator.ratelimiter import ratelimiter
from misskaty.core.decorator.errors import capture_err from misskaty.core.decorator.errors import capture_err
@ -115,6 +116,7 @@ async def clear_reqdict():
data_kuso.clear() data_kuso.clear()
REQUEST_DB.clear() REQUEST_DB.clear()
PYPI_DICT.clear() PYPI_DICT.clear()
YT_DB.clear()
admins_in_chat.clear() admins_in_chat.clear()
try: try:
os.rmdir("downloads") os.rmdir("downloads")

View file

@ -54,13 +54,13 @@ def get_base_name(orig_path: str):
return ngesplit(f"{ext}$", orig_path, maxsplit=1, flags=I)[0] return ngesplit(f"{ext}$", orig_path, maxsplit=1, flags=I)[0]
def get_subname(lang, url, format): def get_subname(lang, url, ext):
fragment_removed = url.split("#")[0] # keep to left of first # fragment_removed = url.split("#")[0] # keep to left of first #
query_string_removed = fragment_removed.split("?")[0] query_string_removed = fragment_removed.split("?")[0]
scheme_removed = query_string_removed.split("://")[-1].split(":")[-1] 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)}.{format}" return f"[{lang.upper()}] MissKatySub{get_random_string(4)}.{ext}"
return f"[{lang.upper()}] {get_base_name(os.path.basename(unquote(scheme_removed)))}.{format}" return f"[{lang.upper()}] {get_base_name(os.path.basename(unquote(scheme_removed)))}.{ext}"
@app.on_message(filters.command(["ceksub", "extractmedia"], COMMAND_HANDLER)) @app.on_message(filters.command(["ceksub", "extractmedia"], COMMAND_HANDLER))
@ -159,15 +159,15 @@ async def stream_extract(self: Client, update: CallbackQuery, strings):
return await update.answer(strings("invalid_cb"), True) return await update.answer(strings("invalid_cb"), True)
await update.message.edit_msg(strings("progress_str")) await update.message.edit_msg(strings("progress_str"))
if codec == "aac": if codec == "aac":
format = "aac" ext = "aac"
elif codec == "mp3": elif codec == "mp3":
format = "mp3" ext = "mp3"
elif codec == "eac3": elif codec == "eac3":
format = "eac3" ext = "eac3"
else: else:
format = "srt" ext = "srt"
start_time = time() start_time = time()
namafile = get_subname(lang, link, format) namafile = get_subname(lang, link, ext)
try: 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"mediaextract -i {link} -map {map} '{namafile}'"))[0] (await shell_exec(f"mediaextract -i {link} -map {map} '{namafile}'"))[0]

View file

@ -349,8 +349,11 @@ async def close_callback(bot: Client, query: CallbackQuery):
return await query.answer("⚠️ Access Denied!", True) return await query.answer("⚠️ Access Denied!", True)
await query.answer("Deleting this message in 5 seconds.") await query.answer("Deleting this message in 5 seconds.")
await asyncio.sleep(5) await asyncio.sleep(5)
await query.message.delete_msg() try:
await query.message.reply_to_message.delete_msg() await query.message.delete()
await query.message.reply_to_message.delete()
except:
pass
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.1.17 (KHTML, like Gecko) Version/7.1 Safari/537.85.10"} headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.1.17 (KHTML, like Gecko) Version/7.1 Safari/537.85.10"}

View file

@ -30,7 +30,7 @@ __HELP__ = "/ocr [reply to photo] - Read Text From Image"
@use_chat_lang() @use_chat_lang()
async def ocr(self: Client, ctx: Message, strings): async def ocr(self: Client, ctx: Message, strings):
reply = ctx.reply_to_message reply = ctx.reply_to_message
if not reply and not reply.photo or not (reply.document and reply.document.mime_type.startswith("image")) or not reply.sticker: if not reply or not reply.photo or not (reply.document and reply.document.mime_type.startswith("image")) or not reply.sticker:
return await ctx.reply_msg(strings("no_photo").format(cmd=ctx.command[0]), quote=True, del_in=6) return await ctx.reply_msg(strings("no_photo").format(cmd=ctx.command[0]), quote=True, del_in=6)
msg = await ctx.reply_msg(strings("read_ocr"), quote=True) msg = await ctx.reply_msg(strings("read_ocr"), quote=True)
try: try:
@ -46,13 +46,9 @@ async def ocr(self: Client, ctx: Message, strings):
) )
).json() ).json()
await msg.edit_msg(strings("result_ocr").format(result=req["text"])) await msg.edit_msg(strings("result_ocr").format(result=req["text"]))
try: if os.path.exists(file_path):
os.remove(file_path) os.remove(file_path)
except:
pass
except Exception as e: except Exception as e:
await msg.edit_msg(str(e)) await msg.edit_msg(str(e))
try: if os.path.exists(file_path):
os.remove(file_path) os.remove(file_path)
except:
pass

View file

@ -5,6 +5,7 @@ from pyrogram import Client, filters
from pyrogram.errors import ApiIdInvalid, PasswordHashInvalid, PhoneCodeExpired, PhoneCodeInvalid, PhoneNumberInvalid, SessionPasswordNeeded from pyrogram.errors import ApiIdInvalid, PasswordHashInvalid, PhoneCodeExpired, PhoneCodeInvalid, PhoneNumberInvalid, SessionPasswordNeeded
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from telethon import TelegramClient from telethon import TelegramClient
from misskaty.core.misskaty_patch.listen.listen import ListenerTimeout
from telethon.errors import ApiIdInvalidError, PasswordHashInvalidError, PhoneCodeExpiredError, PhoneCodeInvalidError, PhoneNumberInvalidError, SessionPasswordNeededError from telethon.errors import ApiIdInvalidError, PasswordHashInvalidError, PhoneCodeExpiredError, PhoneCodeInvalidError, PhoneNumberInvalidError, SessionPasswordNeededError
from telethon.sessions import StringSession from telethon.sessions import StringSession
@ -98,8 +99,7 @@ async def generate_session(bot, msg, telethon=False, is_bot: bool = False):
api_id = int(api_id_msg.text) api_id = int(api_id_msg.text)
await api_id_msg.delete() await api_id_msg.delete()
except ValueError: except ValueError:
await api_id_msg.reply("**API_ID** must be integer, start generating your session again.", quote=True, reply_markup=InlineKeyboardMarkup(gen_button)) return await api_id_msg.reply("**API_ID** must be integer, start generating your session again.", quote=True, reply_markup=InlineKeyboardMarkup(gen_button))
return
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): if await is_batal(api_hash_msg):
return return
@ -130,20 +130,17 @@ async def generate_session(bot, msg, telethon=False, is_bot: bool = False):
else: else:
code = await client.send_code(phone_number) code = await client.send_code(phone_number)
except (ApiIdInvalid, ApiIdInvalidError): except (ApiIdInvalid, ApiIdInvalidError):
await msg.reply("» Your **API_ID** and **API_HASH** combination doesn't match. \n\nPlease start generating your session again.", reply_markup=InlineKeyboardMarkup(gen_button)) return await msg.reply("» Your **API_ID** and **API_HASH** combination doesn't match. \n\nPlease start generating your session again.", reply_markup=InlineKeyboardMarkup(gen_button))
return
except (PhoneNumberInvalid, PhoneNumberInvalidError): except (PhoneNumberInvalid, PhoneNumberInvalidError):
await msg.reply("» The **PHONE_NUMBER** you've doesn't belong to any account in Telegram.\n\nPlease start generating your session again.", reply_markup=InlineKeyboardMarkup(gen_button)) return await msg.reply("» The **PHONE_NUMBER** you've doesn't belong to any account in Telegram.\n\nPlease start generating your session again.", reply_markup=InlineKeyboardMarkup(gen_button))
return
try: try:
phone_code_msg = None phone_code_msg = None
if not is_bot: if not is_bot:
phone_code_msg = await msg.chat.ask("» Please send the **OTP** That you've received from Telegram on your account.\nIf OTP is `12345`, **please send it as** `1 2 3 4 5`.", filters=filters.text, timeout=600) phone_code_msg = await msg.chat.ask("» Please send the **OTP** That you've received from Telegram on your account.\nIf OTP is `12345`, **please send it as** `1 2 3 4 5`.", filters=filters.text, timeout=600)
if await is_batal(phone_code_msg): if await is_batal(phone_code_msg):
return return
except TimeoutError: except ListenerTimeout:
await msg.reply("» Time limit reached of 10 minutes.\n\nPlease start generating your session again.", reply_markup=InlineKeyboardMarkup(gen_button)) return await msg.reply("» Time limit reached of 10 minutes.\n\nPlease start generating your session again.", reply_markup=InlineKeyboardMarkup(gen_button))
return
if not is_bot: if not is_bot:
phone_code = phone_code_msg.text.replace(" ", "") phone_code = phone_code_msg.text.replace(" ", "")
await phone_code_msg.delete() await phone_code_msg.delete()
@ -153,17 +150,14 @@ async def generate_session(bot, msg, telethon=False, is_bot: bool = False):
else: else:
await client.sign_in(phone_number, code.phone_code_hash, phone_code) await client.sign_in(phone_number, code.phone_code_hash, phone_code)
except (PhoneCodeInvalid, PhoneCodeInvalidError): except (PhoneCodeInvalid, PhoneCodeInvalidError):
await msg.reply("» The OTP you've sent is **wrong.**\n\nPlease start generating your session again.", reply_markup=InlineKeyboardMarkup(gen_button)) return await msg.reply("» The OTP you've sent is **wrong.**\n\nPlease start generating your session again.", reply_markup=InlineKeyboardMarkup(gen_button))
return
except (PhoneCodeExpired, PhoneCodeExpiredError): except (PhoneCodeExpired, PhoneCodeExpiredError):
await msg.reply("» The OTP you've sent is **expired.**\n\nPlease start generating your session again.", reply_markup=InlineKeyboardMarkup(gen_button)) return await msg.reply("» The OTP you've sent is **expired.**\n\nPlease start generating your session again.", reply_markup=InlineKeyboardMarkup(gen_button))
return
except (SessionPasswordNeeded, SessionPasswordNeededError): except (SessionPasswordNeeded, SessionPasswordNeededError):
try: try:
two_step_msg = await msg.chat.ask("» Please enter your **Two Step Verification** password to continue.", filters=filters.text, timeout=300) two_step_msg = await msg.chat.ask("» Please enter your **Two Step Verification** password to continue.", filters=filters.text, timeout=300)
except TimeoutError: except ListenerTimeout:
await msg.reply("» Time limit reached of 5 minutes.\n\nPlease start generating your session again.", reply_markup=InlineKeyboardMarkup(gen_button)) return await msg.reply("» Time limit reached of 5 minutes.\n\nPlease start generating your session again.", reply_markup=InlineKeyboardMarkup(gen_button))
return
try: try:
password = two_step_msg.text password = two_step_msg.text
await two_step_msg.delete() await two_step_msg.delete()
@ -174,9 +168,9 @@ async def generate_session(bot, msg, telethon=False, is_bot: bool = False):
if await is_batal(api_id_msg): if await is_batal(api_id_msg):
return return
except (PasswordHashInvalid, PasswordHashInvalidError): except (PasswordHashInvalid, PasswordHashInvalidError):
await two_step_msg.reply("» The password you've sent is wrong.\n\nPlease start generating session again.", quote=True, reply_markup=InlineKeyboardMarkup(gen_button)) return await two_step_msg.reply("» The password you've sent is wrong.\n\nPlease start generating session again.", quote=True, reply_markup=InlineKeyboardMarkup(gen_button))
return
elif telethon: elif telethon:
try:
await client.start(bot_token=phone_number) await client.start(bot_token=phone_number)
else: else:
await client.sign_in_bot(phone_number) await client.sign_in_bot(phone_number)

View file

@ -46,7 +46,10 @@ SUPPORTED_TYPES = ["jpeg", "png", "webp"]
@ratelimiter @ratelimiter
@use_chat_lang() @use_chat_lang()
async def getsticker_(self: Client, ctx: Message, strings): async def getsticker_(self: Client, ctx: Message, strings):
if sticker := ctx.reply_to_message.sticker: if not ctx.reply_to_message or ctx.reply_to_message.sticker:
await ctx.reply_msg(strings("not_sticker"))
else:
sticker = ctx.reply_to_message.sticker
if sticker.is_animated: if sticker.is_animated:
await ctx.reply_msg(strings("no_anim_stick")) await ctx.reply_msg(strings("no_anim_stick"))
else: else:
@ -56,13 +59,11 @@ async def getsticker_(self: Client, ctx: Message, strings):
message=ctx.reply_to_message, message=ctx.reply_to_message,
file_name=f"{path}/{sticker.set_name}.png", file_name=f"{path}/{sticker.set_name}.png",
) )
await self.reply_to_message.reply_document( await ctx.reply_to_message.reply_document(
document=sticker_file, document=sticker_file,
caption=f"<b>Emoji:</b> {sticker.emoji}\n" f"<b>Sticker ID:</b> <code>{sticker.file_id}</code>\n\n" f"<b>Send by:</b> @{BOT_USERNAME}", caption=f"<b>Emoji:</b> {sticker.emoji}\n" f"<b>Sticker ID:</b> <code>{sticker.file_id}</code>\n\n" f"<b>Send by:</b> @{BOT_USERNAME}",
) )
shutil.rmtree(tempdir, ignore_errors=True) shutil.rmtree(tempdir, ignore_errors=True)
else:
await ctx.reply_msg(strings("not_sticker"))
@app.on_message(filters.command("stickerid", COMMAND_HANDLER) & filters.reply) @app.on_message(filters.command("stickerid", COMMAND_HANDLER) & filters.reply)

View file

@ -35,7 +35,10 @@ async def urbanDictionary(self: Client, ctx: Message):
GetWord = message.text GetWord = message.text
CurrentPage = 1 CurrentPage = 1
try:
UDReasult, PageLen = await getData(chat_id, message_id, GetWord, CurrentPage) UDReasult, PageLen = await getData(chat_id, message_id, GetWord, CurrentPage)
except:
return await ctx.reply_msg("😭 Failed getting info from urban dictionary.")
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, "pagination_urban#{number}" + f"#{GetWord}") keyboard.paginate(PageLen, CurrentPage, "pagination_urban#{number}" + f"#{GetWord}")
@ -57,4 +60,4 @@ async def ud_callback(self: Client, callback_query: CallbackQuery):
keyboard = InlineKeyboard() keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, "pagination_urban#{number}" + f"#{GetWord}") keyboard.paginate(PageLen, CurrentPage, "pagination_urban#{number}" + f"#{GetWord}")
await app.edit_msg(chat_id=chat_id, message_id=message_id, text=UDReasult, reply_markup=keyboard) await callback_query.message.edit_msg(text=UDReasult, reply_markup=keyboard)