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))