mirror of
https://github.com/yasirarism/MissKatyPyro.git
synced 2026-01-08 04:44:51 +00:00
Fix Update
This commit is contained in:
parent
c4930d0985
commit
c5aab68eef
9 changed files with 54 additions and 46 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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..",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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")
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
|
|
|
||||||
|
|
@ -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"}
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue