search.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. from youtube_search import YoutubeSearch
  2. from search_engine_parser import GoogleSearch
  3. from pyrogram.types import Message
  4. from pyrogram import filters
  5. from requests import get
  6. from wbb import app
  7. from wbb.utils import cust_filter
  8. __MODULE__ = "Search"
  9. __HELP__ = '''/ud - Search For Something In Urban Dictionary
  10. /google - Search For Something On Google
  11. /yt - Search For Something On YouTube'''
  12. # ud - urbandictionary
  13. @app.on_message(cust_filter.command(commands=("ud")) & ~filters.edited)
  14. async def urbandict(_, message: Message):
  15. if len(message.command) < 2:
  16. await message.reply_text('"/ud" Needs An Argument.')
  17. return
  18. text = message.text.split(None, 1)[1]
  19. api = "http://api.urbandictionary.com/v0/define?term="
  20. try:
  21. results = get(f"{api}{text}").json()
  22. reply_text = f'Definition: {results["list"][0]["definition"]}'
  23. reply_text += f'\n\nExample: {results["list"][0]["example"]}'
  24. except IndexError:
  25. reply_text = ("Sorry could not find any matching results!")
  26. ignore_chars = "[]"
  27. reply = reply_text
  28. for chars in ignore_chars:
  29. reply = reply.replace(chars, "")
  30. if len(reply) >= 4096:
  31. reply = reply[:4096]
  32. await message.reply_text(reply)
  33. # google
  34. @app.on_message(cust_filter.command(commands=("google")) & ~filters.edited)
  35. async def google(_, message: Message):
  36. if len(message.command) < 2:
  37. await message.reply_text('"/google" Needs An Argument')
  38. return
  39. text = message.text.split(None, 1)[1]
  40. gresults = await GoogleSearch().async_search(text, 1)
  41. result = ""
  42. for i in range(4):
  43. try:
  44. title = gresults["titles"][i].replace("\n", " ")
  45. source = gresults["links"][i]
  46. description = gresults["descriptions"][i]
  47. result += f"[{title}]({source})\n"
  48. result += f"`{description}`\n\n"
  49. except IndexError:
  50. pass
  51. await message.reply_text(result, disable_web_page_preview=True)
  52. # YouTube
  53. @app.on_message(cust_filter.command(commands=("yt")) & ~filters.edited)
  54. async def ytsearch(_, message: Message):
  55. if len(message.command) < 2:
  56. await message.reply_text("/yt needs an argument")
  57. return
  58. query = message.text.split(None, 1)[1]
  59. m = await message.reply_text("Searching....")
  60. results = YoutubeSearch(query, max_results=4).to_dict()
  61. i = 0
  62. text = ""
  63. while i < 4:
  64. text += f"Title - {results[i]['title']}\n"
  65. text += f"Duration - {results[i]['duration']}\n"
  66. text += f"Views - {results[i]['views']}\n"
  67. text += f"Channel - {results[i]['channel']}\n"
  68. text += f"https://youtube.com{results[i]['url_suffix']}\n\n"
  69. i += 1
  70. await m.edit(text, disable_web_page_preview=True)