search.py 4.9 KB

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