search.py 4.6 KB

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