MissKatyPyro/misskaty/plugins/urban_dict.py
2023-02-07 09:52:04 +07:00

103 lines
No EOL
3.1 KiB
Python

import asyncio
from pykeyboard import InlineKeyboard
from pyrogram import filters
from misskaty.helper.http import http
from misskaty import app
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 not 'list' in UDJson:
CNMessage = await app.send_message(
chat_id=chat_id,
reply_to_message_id=message_id,
text=(
f"Word: {GetWord}\n"
"Results: Sorry could not find any matching results!"
)
)
await asyncio.sleep(5)
await CNMessage.delete()
return
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']}__"
)
INGNORE_CHAR = "[]"
UDFReasult = ''.join(i for i in UDReasult if not i in INGNORE_CHAR)
return (
UDFReasult,
PageLen
)
except (
IndexError
or KeyError
):
CNMessage = await app.send_message(
chat_id=chat_id,
reply_to_message_id=message_id,
text=(
f"Word: {GetWord}\n"
"Results: Sorry could not find any matching results!"
)
)
await asyncio.sleep(5)
await CNMessage.delete()
@app.on_message(filters.command(['ud'], COMMAND_HANDLER))
async def urbanDictionary(client, message):
if not message.from_user: return
message_id = message.id
chat_id = message.chat.id
GetWord = ' '.join(message.command[1:])
if not GetWord:
message = await message.chat.ask(
'Now give any word for query!',
identifier=(message.from_user.id, message.from_user.id, None)
)
GetWord = message.text
CurrentPage = 1
UDReasult, PageLen = await getData(chat_id, message_id, GetWord, CurrentPage)
keyboard = InlineKeyboard()
keyboard.paginate(PageLen, CurrentPage, 'pagination_urban#{number}' + f'#{GetWord}')
await message.reply(
text=f"{UDReasult}",
reply_markup=keyboard
)
@app.on_callback_query(filters.create(lambda _, __, query: 'pagination_urban#' in query.data))
async def ud_callback(client, callback_query):
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 app.edit_message_text(
chat_id=chat_id,
message_id=message_id,
text=UDReasult,
reply_markup=keyboard
)