search.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. from youtube_search import YoutubeSearch
  2. from search_engine_parser import GoogleSearch
  3. from pyrogram import filters
  4. from requests import get
  5. from wbb import app
  6. from wbb.utils.errors import capture_err
  7. __MODULE__ = "Search"
  8. __HELP__ = '''/ud - Search For Something In Urban Dictionary
  9. /google - Search For Something On Google
  10. /so - Search For Something On Stack OverFlow
  11. /gh - Search For Something On GitHub
  12. /yt - Search For Something On YouTube'''
  13. # ud - urbandictionary
  14. @app.on_message(filters.command("ud") & ~filters.edited)
  15. @capture_err
  16. async def urbandict(_, message):
  17. if len(message.command) < 2:
  18. await message.reply_text('"/ud" Needs An Argument.')
  19. return
  20. text = message.text.split(None, 1)[1]
  21. api = "http://api.urbandictionary.com/v0/define?term="
  22. try:
  23. results = get(f"{api}{text}").json()
  24. reply_text = f'Definition: {results["list"][0]["definition"]}'
  25. reply_text += f'\n\nExample: {results["list"][0]["example"]}'
  26. except IndexError:
  27. reply_text = ("Sorry could not find any matching results!")
  28. ignore_chars = "[]"
  29. reply = reply_text
  30. for chars in ignore_chars:
  31. reply = reply.replace(chars, "")
  32. if len(reply) >= 4096:
  33. reply = reply[:4096]
  34. await message.reply_text(reply)
  35. # google
  36. @app.on_message(filters.command("google") & ~filters.edited)
  37. @capture_err
  38. async def google(_, message):
  39. try:
  40. if len(message.command) < 2:
  41. await message.reply_text('"/google" Needs An Argument')
  42. return
  43. text = message.text.split(None, 1)[1]
  44. gresults = await GoogleSearch().async_search(text, 1)
  45. result = ""
  46. for i in range(4):
  47. try:
  48. title = gresults["titles"][i].replace("\n", " ")
  49. source = gresults["links"][i]
  50. description = gresults["descriptions"][i]
  51. result += f"[{title}]({source})\n"
  52. result += f"`{description}`\n\n"
  53. except IndexError:
  54. pass
  55. await message.reply_text(result, disable_web_page_preview=True)
  56. except Exception as e:
  57. await message.reply_text(str(e))
  58. # StackOverflow [This is also a google search with some added args]
  59. @app.on_message(filters.command("so") & ~filters.edited)
  60. @capture_err
  61. async def stack(_, message):
  62. try:
  63. if len(message.command) < 2:
  64. await message.reply_text('"/so" Needs An Argument')
  65. return
  66. gett = message.text.split(None, 1)[1]
  67. text = gett + ' "site:stackoverflow.com"'
  68. gresults = await GoogleSearch().async_search(text, 1)
  69. result = ""
  70. for i in range(4):
  71. try:
  72. title = gresults["titles"][i].replace("\n", " ")
  73. source = gresults["links"][i]
  74. description = gresults["descriptions"][i]
  75. result += f"[{title}]({source})\n"
  76. result += f"`{description}`\n\n"
  77. except IndexError:
  78. pass
  79. await message.reply_text(result, disable_web_page_preview=True)
  80. except Exception as e:
  81. await message.reply_text(str(e))
  82. # Github [This is also a google search with some added args]
  83. @app.on_message(filters.command("gh") & ~filters.edited)
  84. @capture_err
  85. async def github(_, message):
  86. try:
  87. if len(message.command) < 2:
  88. await message.reply_text('"/gh" Needs An Argument')
  89. return
  90. gett = message.text.split(None, 1)[1]
  91. text = gett + ' "site:github.com"'
  92. gresults = await GoogleSearch().async_search(text, 1)
  93. result = ""
  94. for i in range(4):
  95. try:
  96. title = gresults["titles"][i].replace("\n", " ")
  97. source = gresults["links"][i]
  98. description = gresults["descriptions"][i]
  99. result += f"[{title}]({source})\n"
  100. result += f"`{description}`\n\n"
  101. except IndexError:
  102. pass
  103. await message.reply_text(result, disable_web_page_preview=True)
  104. except Exception as e:
  105. await message.reply_text(str(e))
  106. # YouTube
  107. @app.on_message(filters.command("yt") & ~filters.edited)
  108. @capture_err
  109. async def ytsearch(_, message):
  110. try:
  111. if len(message.command) < 2:
  112. await message.reply_text("/yt needs an argument")
  113. return
  114. query = message.text.split(None, 1)[1]
  115. m = await message.reply_text("Searching....")
  116. results = YoutubeSearch(query, max_results=4).to_dict()
  117. i = 0
  118. text = ""
  119. while i < 4:
  120. text += f"Title - {results[i]['title']}\n"
  121. text += f"Duration - {results[i]['duration']}\n"
  122. text += f"Views - {results[i]['views']}\n"
  123. text += f"Channel - {results[i]['channel']}\n"
  124. text += f"https://youtube.com{results[i]['url_suffix']}\n\n"
  125. i += 1
  126. await m.edit(text, disable_web_page_preview=True)
  127. except Exception as e:
  128. await message.reply_text(str(e))