From 40803fcbe4230639344bf91ab9136d5a3cc48ef6 Mon Sep 17 00:00:00 2001 From: yasir Date: Tue, 10 Jan 2023 11:22:29 +0700 Subject: [PATCH] Fixes --- misskaty/plugins/imdb_search.py | 246 +++++++++++++++++++++----------- misskaty/plugins/mediainfo.py | 14 +- 2 files changed, 168 insertions(+), 92 deletions(-) diff --git a/misskaty/plugins/imdb_search.py b/misskaty/plugins/imdb_search.py index 6ad7b0ae..e06bfb7a 100644 --- a/misskaty/plugins/imdb_search.py +++ b/misskaty/plugins/imdb_search.py @@ -1,27 +1,25 @@ import json -import re import logging -from utils import demoji -from pykeyboard import InlineKeyboard, InlineButton -from pyrogram.types import ( - InlineKeyboardMarkup, - InlineKeyboardButton, - CallbackQuery, - InputMediaPhoto, -) -from pyrogram.errors import MessageNotModified, MediaEmpty, PhotoInvalidDimensions, WebpageMediaEmpty -from deep_translator import GoogleTranslator +import re +import traceback + from bs4 import BeautifulSoup +from deep_translator import GoogleTranslator +from pykeyboard import InlineButton, InlineKeyboard from pyrogram import filters -from misskaty import app, BOT_USERNAME -from misskaty.vars import COMMAND_HANDLER +from pyrogram.errors import MediaEmpty, MessageNotModified, PhotoInvalidDimensions, WebpageMediaEmpty +from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, InputMediaPhoto +from misskaty import BOT_USERNAME, app from misskaty.core.decorator.errors import capture_err -from misskaty.helper.tools import GENRES_EMOJI, get_random_string from misskaty.helper.http import http +from misskaty.helper.tools import GENRES_EMOJI, get_random_string +from misskaty.vars import COMMAND_HANDLER +from utils import demoji LOGGER = logging.getLogger(__name__) LIST_CARI = {} + # IMDB Choose Language @app.on_message(filters.command(["imdb"], COMMAND_HANDLER)) @capture_err @@ -43,8 +41,7 @@ async def imdb_choose(_, m): ) await m.reply_photo( "https://telegra.ph/file/270955ef0d1a8a16831a9.jpg", - caption= - f"Hi {m.from_user.mention}, Please select the language you want to use on IMDB Search.\n\nSilakan pilih bahasa yang ingin Anda gunakan di Pencarian IMDB.", + caption=f"Hi {m.from_user.mention}, Please select the language you want to use on IMDB Search.\n\nSilakan pilih bahasa yang ingin Anda gunakan di Pencarian IMDB.", reply_markup=buttons, quote=True, ) @@ -55,22 +52,22 @@ async def imdbcari_id(client, query): BTN = [] i, msg, uid = query.data.split("#") if query.from_user.id != int(uid): - return await query.answer(f"⚠️ Akses Ditolak!", True) + return await query.answer("⚠️ Akses Ditolak!", True) try: kueri = LIST_CARI.get(msg) del LIST_CARI[msg] except KeyError: - return await query.message.edit_caption(f"⚠️ Callback Query Sudah Expired!") + return await query.message.edit_caption("⚠️ Callback Query Sudah Expired!") await query.message.edit_caption("🔎 Sedang mencari di Database IMDB..") msg = "" buttons = InlineKeyboard(row_width=4) try: - r = await http.get(f"https://yasirapi.eu.org/imdb-search?q={kueri}" - ) + r = await http.get(f"https://yasirapi.eu.org/imdb-search?q={kueri}") res = json.loads(r.text).get("result") if not res: return await query.message.edit_caption( - f"⛔️ Tidak ditemukan hasil untuk kueri: {kueri}") + f"⛔️ Tidak ditemukan hasil untuk kueri: {kueri}" + ) msg += f"🎬 Ditemukan ({len(res)}) hasil dari: {kueri} ~ {query.from_user.mention}\n\n" for num, movie in enumerate(res, start=1): title = movie.get("l") @@ -80,9 +77,10 @@ async def imdbcari_id(client, query): msg += f"{num}. {title} {year} - {type}\n" BTN.append( InlineKeyboardButton( - text=num, callback_data=f"imdbres_id#{uid}#{movieID}")) - BTN.append( - InlineKeyboardButton(text="❌ Close", callback_data=f"close#{uid}")) + text=num, callback_data=f"imdbres_id#{uid}#{movieID}" + ) + ) + BTN.append(InlineKeyboardButton(text="❌ Close", callback_data=f"close#{uid}")) buttons.add(*BTN) await query.message.edit_caption(msg, reply_markup=buttons) except Exception as err: @@ -106,12 +104,12 @@ async def imdbcari_en(client, query): msg = "" buttons = InlineKeyboard(row_width=4) try: - r = await http.get(f"https://yasirapi.eu.org/imdb-search?q={kueri}" - ) + r = await http.get(f"https://yasirapi.eu.org/imdb-search?q={kueri}") res = json.loads(r.text).get("result") if not res: return await query.message.edit_caption( - f"⛔️ Result not found for keywords: {kueri}") + f"⛔️ Result not found for keywords: {kueri}" + ) msg += f"🎬 Found ({len(res)}) result for keywords: {kueri} ~ {query.from_user.mention}\n\n" for num, movie in enumerate(res, start=1): title = movie.get("l") @@ -119,8 +117,16 @@ async def imdbcari_en(client, query): type = movie.get("q").replace("feature", "movie").capitalize() movieID = re.findall(r"tt(\d+)", movie.get("id"))[0] msg += f"{num}. {title} {year} - {type}\n" - BTN.append(InlineKeyboardButton(text=num, callback_data=f"imdbres_en#{query.from_user.id}#{movieID}")) - BTN.append(InlineKeyboardButton(text="❌ Close", callback_data=f"close#{query.from_user.id}")) + BTN.append( + InlineKeyboardButton( + text=num, callback_data=f"imdbres_en#{query.from_user.id}#{movieID}" + ) + ) + BTN.append( + InlineKeyboardButton( + text="❌ Close", callback_data=f"close#{query.from_user.id}" + ) + ) buttons.add(*BTN) await query.message.edit_caption(msg, reply_markup=buttons) except Exception as err: @@ -135,28 +141,27 @@ async def imdb_id_callback(bot, query): if query.from_user.id != int(userid): return await query.answer("⚠️ Akses Ditolak!", True) try: - await query.message.edit_caption("⏳ Permintaan kamu sedang diproses.. " - ) + await query.message.edit_caption("⏳ Permintaan kamu sedang diproses.. ") url = f"https://www.imdb.com/title/tt{movie}/" resp = await http.get( url, 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" + "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" }, ) sop = BeautifulSoup(resp, "lxml") r_json = json.loads( - sop.find("script", attrs={ - "type": "application/ld+json" - }).contents[0]) + sop.find("script", attrs={"type": "application/ld+json"}).contents[0] + ) res_str = "" type = f"{r_json['@type']}" if r_json.get("@type") else "" if r_json.get("name"): try: - tahun = (sop.select( - 'ul[data-testid="hero-title-block__metadata"]')[0].find( - class_="sc-8c396aa2-2 itZqyK").text) + tahun = ( + sop.select('ul[data-testid="hero-title-block__metadata"]')[0] + .find(class_="sc-8c396aa2-2 itZqyK") + .text + ) except: tahun = "-" res_str += f"📹 Judul: {r_json['name']} [{tahun}] ({type})\n" @@ -166,8 +171,10 @@ async def imdb_id_callback(bot, query): res_str += "\n" if sop.select('li[data-testid="title-techspec_runtime"]'): durasi = ( - sop.select('li[data-testid="title-techspec_runtime"]')[0].find( - class_="ipc-metadata-list-item__content-container").text) + sop.select('li[data-testid="title-techspec_runtime"]')[0] + .find(class_="ipc-metadata-list-item__content-container") + .text + ) res_str += f"Durasi: {GoogleTranslator('auto', 'id').translate(durasi)}\n" if r_json.get("contentRating"): res_str += f"Kategori: {r_json['contentRating']} \n" @@ -199,25 +206,27 @@ async def imdb_id_callback(bot, query): else: genre += f"#{i.replace('-', '_').replace(' ', '_')}, " genre = genre[:-2] - res_str += f"Genre: {genre}\n" + res_str += f"Genre : {genre}\n" if sop.select('li[data-testid="title-details-origin"]'): country = "".join( f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, " - for country in sop. - select('li[data-testid="title-details-origin"]')[0].findAll( - class_= - "ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link" - )) + for country in sop.select('li[data-testid="title-details-origin"]')[ + 0 + ].findAll( + class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link" + ) + ) country = country[:-2] res_str += f"Negara: {country}\n" if sop.select('li[data-testid="title-details-languages"]'): language = "".join( f"#{lang.text.replace(' ', '_').replace('-', '_')}, " - for lang in sop. - select('li[data-testid="title-details-languages"]')[0].findAll( - class_= - "ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link" - )) + for lang in sop.select('li[data-testid="title-details-languages"]')[ + 0 + ].findAll( + class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link" + ) + ) language = language[:-2] res_str += f"Bahasa: {language}\n" res_str += "\n🙎 Info Cast:\n" @@ -248,7 +257,8 @@ async def imdb_id_callback(bot, query): res_str += f"Pemeran: {actors}\n\n" if r_json.get("description"): summary = GoogleTranslator("auto", "id").translate( - r_json.get("description")) + r_json.get("description") + ) res_str += f"📜 Plot: {summary}\n\n" if r_json.get("keywords"): keywords = r_json["keywords"].split(",") @@ -260,34 +270,46 @@ async def imdb_id_callback(bot, query): res_str += f"🔥 Kata Kunci: {key_} \n" if sop.select('li[data-testid="award_information"]'): awards = ( - sop.select('li[data-testid="award_information"]')[0].find( - class_="ipc-metadata-list-item__list-content-item").text) + sop.select('li[data-testid="award_information"]')[0] + .find(class_="ipc-metadata-list-item__list-content-item") + .text + ) res_str += f"🏆 Penghargaan: {GoogleTranslator('auto', 'id').translate(awards)}\n\n" else: res_str += "\n" res_str += f"©️ IMDb by @{BOT_USERNAME}" if r_json.get("trailer"): trailer_url = r_json["trailer"]["url"] - markup = InlineKeyboardMarkup([[ - InlineKeyboardButton( - "🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}"), - InlineKeyboardButton("▶️ Trailer", url=trailer_url), - ]]) + markup = InlineKeyboardMarkup( + [ + [ + InlineKeyboardButton( + "🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}" + ), + InlineKeyboardButton("▶️ Trailer", url=trailer_url), + ] + ] + ) else: - markup = InlineKeyboardMarkup([[ - InlineKeyboardButton( - "🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}") - ]]) + markup = InlineKeyboardMarkup( + [ + [ + InlineKeyboardButton( + "🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}" + ) + ] + ] + ) if thumb := r_json.get("image"): try: - await query.message.edit_media(InputMediaPhoto( - thumb, caption=res_str), - reply_markup=markup) + await query.message.edit_media( + InputMediaPhoto(thumb, caption=res_str), reply_markup=markup + ) except (MediaEmpty, PhotoInvalidDimensions, WebpageMediaEmpty): poster = thumb.replace(".jpg", "._V1_UX360.jpg") - await query.message.edit_media(InputMediaPhoto( - poster, caption=res_str), - reply_markup=markup) + await query.message.edit_media( + InputMediaPhoto(poster, caption=res_str), reply_markup=markup + ) except Exception: await query.message.edit_caption(res_str, reply_markup=markup) else: @@ -310,17 +332,22 @@ async def imdb_en_callback(bot, query): resp = await http.get( url, 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" + "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" }, ) sop = BeautifulSoup(resp, "lxml") - r_json = json.loads(sop.find("script", attrs={"type": "application/ld+json"}).contents[0]) + r_json = json.loads( + sop.find("script", attrs={"type": "application/ld+json"}).contents[0] + ) res_str = "" type = f"{r_json['@type']}" if r_json.get("@type") else "" if r_json.get("name"): try: - tahun = sop.select('ul[data-testid="hero-title-block__metadata"]')[0].find(class_="sc-8c396aa2-2 itZqyK").text + tahun = ( + sop.select('ul[data-testid="hero-title-block__metadata"]')[0] + .find(class_="sc-8c396aa2-2 itZqyK") + .text + ) except: tahun = "-" res_str += f"📹 Title: {r_json['name']} [{tahun}] ({type})\n" @@ -329,21 +356,39 @@ async def imdb_en_callback(bot, query): else: res_str += "\n" if sop.select('li[data-testid="title-techspec_runtime"]'): - durasi = sop.select('li[data-testid="title-techspec_runtime"]')[0].find(class_="ipc-metadata-list-item__content-container").text + durasi = ( + sop.select('li[data-testid="title-techspec_runtime"]')[0] + .find(class_="ipc-metadata-list-item__content-container") + .text + ) res_str += f"Duration: {durasi}\n" if r_json.get("contentRating"): res_str += f"Category: {r_json['contentRating']} \n" if r_json.get("aggregateRating"): res_str += f"Rating: {r_json['aggregateRating']['ratingValue']}⭐️ from {r_json['aggregateRating']['ratingCount']} user \n" if sop.select('li[data-testid="title-details-releasedate"]'): - rilis = sop.select('li[data-testid="title-details-releasedate"]')[0].find(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link").text - rilis_url = sop.select('li[data-testid="title-details-releasedate"]')[0].find(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")["href"] + rilis = ( + sop.select('li[data-testid="title-details-releasedate"]')[0] + .find( + class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link" + ) + .text + ) + rilis_url = sop.select('li[data-testid="title-details-releasedate"]')[ + 0 + ].find( + class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link" + )[ + "href" + ] res_str += f"Release Data: {rilis}\n" if r_json.get("genre"): genre = "" for i in r_json["genre"]: if i in GENRES_EMOJI: - genre += f"{GENRES_EMOJI[i]} #{i.replace('-', '_').replace(' ', '_')}, " + genre += ( + f"{GENRES_EMOJI[i]} #{i.replace('-', '_').replace(' ', '_')}, " + ) else: genre += f"#{i.replace('-', '_').replace(' ', '_')}, " genre = genre[:-2] @@ -351,13 +396,22 @@ async def imdb_en_callback(bot, query): if sop.select('li[data-testid="title-details-origin"]'): country = "".join( f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, " - for country in sop.select('li[data-testid="title-details-origin"]')[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link") + for country in sop.select('li[data-testid="title-details-origin"]')[ + 0 + ].findAll( + class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link" + ) ) country = country[:-2] res_str += f"Country: {country}\n" if sop.select('li[data-testid="title-details-languages"]'): language = "".join( - f"#{lang.text.replace(' ', '_').replace('-', '_')}, " for lang in sop.select('li[data-testid="title-details-languages"]')[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link") + f"#{lang.text.replace(' ', '_').replace('-', '_')}, " + for lang in sop.select('li[data-testid="title-details-languages"]')[ + 0 + ].findAll( + class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link" + ) ) language = language[:-2] res_str += f"Language: {language}\n" @@ -398,7 +452,11 @@ async def imdb_en_callback(bot, query): key_ = key_[:-2] res_str += f"🔥 Keywords: {key_} \n" if sop.select('li[data-testid="award_information"]'): - awards = sop.select('li[data-testid="award_information"]')[0].find(class_="ipc-metadata-list-item__list-content-item").text + awards = ( + sop.select('li[data-testid="award_information"]')[0] + .find(class_="ipc-metadata-list-item__list-content-item") + .text + ) res_str += f"🏆 Awards: {awards}\n\n" else: res_str += "\n" @@ -408,17 +466,33 @@ async def imdb_en_callback(bot, query): markup = InlineKeyboardMarkup( [ [ - InlineKeyboardButton("🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}"), + InlineKeyboardButton( + "🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}" + ), InlineKeyboardButton("▶️ Trailer", url=trailer_url), - ]]) + ] + ] + ) else: - markup = InlineKeyboardMarkup([[InlineKeyboardButton("🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}")]]) + markup = InlineKeyboardMarkup( + [ + [ + InlineKeyboardButton( + "🎬 Open IMDB", url=f"https://www.imdb.com{r_json['url']}" + ) + ] + ] + ) if thumb := r_json.get("image"): try: - await query.message.edit_media(InputMediaPhoto(thumb, caption=res_str), reply_markup=markup) + await query.message.edit_media( + InputMediaPhoto(thumb, caption=res_str), reply_markup=markup + ) except (MediaEmpty, PhotoInvalidDimensions, WebpageMediaEmpty): poster = thumb.replace(".jpg", "._V1_UX360.jpg") - await query.message.edit_media(InputMediaPhoto(poster, caption=res_str), reply_markup=markup) + await query.message.edit_media( + InputMediaPhoto(poster, caption=res_str), reply_markup=markup + ) except Exception: await query.message.edit_caption(res_str, reply_markup=markup) else: diff --git a/misskaty/plugins/mediainfo.py b/misskaty/plugins/mediainfo.py index 0e944b9d..f9a11385 100644 --- a/misskaty/plugins/mediainfo.py +++ b/misskaty/plugins/mediainfo.py @@ -5,19 +5,21 @@ * @projectName MissKatyPyro * Copyright @YasirPedia All rights reserved """ -import io -from os import remove as osremove -import time import asyncio +import io import subprocess +import time +from os import remove as osremove + from pyrogram import filters -from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from pyrogram.errors import FloodWait -from misskaty.vars import COMMAND_HANDLER -from utils import get_file_id +from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup + from misskaty import app from misskaty.helper.media_helper import post_to_telegraph, runcmd from misskaty.helper.pyro_progress import progress_for_pyrogram +from misskaty.vars import COMMAND_HANDLER +from utils import get_file_id @app.on_message(filters.command(["mediainfo"], COMMAND_HANDLER))