search.py 4.8 KB

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