search.py 5.1 KB

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