MissKatyPyro/misskaty/plugins/urban_dict.py
yasirarism 68d006607f
Big Update And Some Fixing Code (#86)
- AutoFix Code Using DeepSource
- Fix os not defined when got error
- Fix Set Chat Photo (Only support photo)
- Fix Admins Permission Error
- Fix KeyError in Scraper
- Fix Help Module in Eval
- Fix Media Caption Too Long in IMDB
- Remove heroku support
- Some minor fix..
2023-06-22 12:52:30 +07:00

82 lines
2.8 KiB
Python

from pykeyboard import InlineKeyboard
from pyrogram import Client, filters
from pyrogram.types import CallbackQuery, Message
from misskaty import app
from misskaty.core.decorator.ratelimiter import ratelimiter
from misskaty.helper.http import http
from misskaty.vars import COMMAND_HANDLER
async def getData(chat_id, message_id, GetWord, CurrentPage):
UDJson = (
await http.get(f"https://api.urbandictionary.com/v0/define?term={GetWord}")
).json()
if "list" not in UDJson:
return await app.send_msg(
chat_id=chat_id,
reply_to_message_id=message_id,
text=f"Word: {GetWord}\nResults: Sorry could not find any matching results!",
del_in=5,
)
try:
index = int(CurrentPage - 1)
PageLen = len(UDJson["list"])
UDReasult = (
f"**Definition of {GetWord}**\n"
f"{UDJson['list'][index]['definition']}\n\n"
"**📌 Examples**\n"
f"__{UDJson['list'][index]['example']}__"
)
UDFReasult = "".join(i for i in UDReasult if i not in "[]")
return (UDFReasult, PageLen)
except (IndexError, KeyError):
await app.send_msg(
chat_id=chat_id,
reply_to_message_id=message_id,
text=f"Word: {GetWord}\nResults: Sorry could not find any matching results!",
del_in=5,
)
@app.on_message(filters.command(["ud"], COMMAND_HANDLER))
@ratelimiter
async def urbanDictionary(self: Client, ctx: Message):
message_id = ctx.id
chat_id = ctx.chat.id
GetWord = " ".join(ctx.command[1:])
if not GetWord:
message = await ctx.chat.ask("Now give any word for query!")
GetWord = message.text
CurrentPage = 1
try:
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.paginate(PageLen, CurrentPage, "pagination_urban#{number}" + f"#{GetWord}")
await ctx.reply_msg(text=f"{UDReasult}", reply_markup=keyboard)
@app.on_callback_query(
filters.create(lambda _, __, query: "pagination_urban#" in query.data)
)
@ratelimiter
async def ud_callback(self: Client, callback_query: CallbackQuery):
message_id = callback_query.message.id
chat_id = callback_query.message.chat.id
CurrentPage = int(callback_query.data.split("#")[1])
GetWord = callback_query.data.split("#")[2]
try:
UDReasult, PageLen = await getData(chat_id, message_id, GetWord, CurrentPage)
except TypeError:
return
keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, "pagination_urban#{number}" + f"#{GetWord}")
await callback_query.message.edit_msg(text=UDReasult, reply_markup=keyboard)