misc.py 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. import secrets
  2. import string
  3. import aiohttp
  4. from pyrogram import filters
  5. from googletrans import Translator
  6. from cryptography.fernet import Fernet
  7. from wbb import app, FERNET_ENCRYPTION_KEY
  8. from wbb.utils import random_line
  9. from wbb.utils.errors import capture_err
  10. from wbb.utils.json_prettify import json_prettify
  11. from wbb.utils.fetch import fetch
  12. from wbb.utils.nekobin import neko
  13. __MODULE__ = "Misc"
  14. __HELP__ = '''/commit - Generate Funny Commit Messages
  15. /runs - Idk Test Yourself
  16. /id - Get Chat_ID or User_ID
  17. /random [Length] - Generate Random Complex Passwords
  18. /encrypt - Encrypt Text [Can Only Be Decrypted By This Bot]
  19. /decrypt - Decrypt Text
  20. /cheat [Language] [Query] - Get Programming Related Help
  21. /weather [City] - To Get Weather Info
  22. /tr [en] - Translate A Message
  23. /json [URL] - Get Response From An API or Something.
  24. #RTFM - Check it lol'''
  25. @app.on_message(filters.command("commit") & ~filters.edited)
  26. @capture_err
  27. async def commit(_, message):
  28. await message.reply_text((await random_line('wbb/utils/commit.txt')))
  29. @app.on_message(filters.command("RTFM", "#"))
  30. @capture_err
  31. async def rtfm(_, message):
  32. await message.delete()
  33. if not message.reply_to_message:
  34. await message.reply_text("Reply To A Message lol")
  35. return
  36. await message.reply_to_message.reply_text("Are You Lost? READ THE FUCKING DOCS!")
  37. @app.on_message(filters.command("runs") & ~filters.edited)
  38. @capture_err
  39. async def runs(_, message):
  40. await message.reply_text((await random_line('wbb/utils/runs.txt')))
  41. @app.on_message(filters.command("id") & ~filters.edited)
  42. @capture_err
  43. async def get_id(_, message):
  44. if len(message.command) != 1:
  45. username = message.text.split(None, 1)[1]
  46. user_id = (await app.get_users(username)).id
  47. msg = f"{username}'s ID is `{user_id}`"
  48. await message.reply_text(msg)
  49. elif len(message.command) == 1 and not message.reply_to_message:
  50. chat_id = message.chat.id
  51. msg = f"{message.chat.title}'s ID is `{chat_id}`"
  52. await message.reply_text(msg)
  53. elif len(message.command) == 1 and message.reply_to_message:
  54. from_user_id = message.reply_to_message.from_user.id
  55. from_user_mention = message.reply_to_message.from_user.mention
  56. msg = f"{from_user_mention}'s ID is `{from_user_id}`"
  57. await message.reply_text(msg)
  58. # Random
  59. @app.on_message(filters.command('random') & ~filters.edited)
  60. @capture_err
  61. async def random(_, message):
  62. if len(message.command) != 2:
  63. await message.reply_text('"/random" Needs An Argurment.'
  64. ' Ex: `/random 5`')
  65. return
  66. length = message.text.split(None, 1)[1]
  67. try:
  68. if 1 < int(length) < 1000:
  69. alphabet = string.ascii_letters + string.digits
  70. password = ''.join(secrets.choice(alphabet) for i in
  71. range(int(length)))
  72. await message.reply_text(f"`{password}`")
  73. else:
  74. await message.reply_text('Specify A Length Between 1-1000')
  75. except ValueError:
  76. await message.reply_text("Strings Won't Work!, Pass A"
  77. + " Positive Integer Between 1-1000")
  78. # Encrypt
  79. @app.on_message(filters.command('encrypt') & ~filters.edited)
  80. @capture_err
  81. async def encrypt(_, message):
  82. if not message.reply_to_message:
  83. await message.reply_text('Reply To A Message To Encrypt It.')
  84. return
  85. text = message.reply_to_message.text
  86. text_in_bytes = bytes(text, 'utf-8')
  87. cipher_suite = Fernet(FERNET_ENCRYPTION_KEY)
  88. encrypted_text = cipher_suite.encrypt(text_in_bytes)
  89. bytes_in_text = encrypted_text.decode("utf-8")
  90. await message.reply_text(bytes_in_text)
  91. # Decrypt
  92. @app.on_message(filters.command('decrypt') & ~filters.edited)
  93. @capture_err
  94. async def decrypt(_, message):
  95. if not message.reply_to_message:
  96. await message.reply_text('Reply To A Message To Decrypt It.')
  97. return
  98. text = message.reply_to_message.text
  99. text_in_bytes = bytes(text, 'utf-8')
  100. cipher_suite = Fernet(FERNET_ENCRYPTION_KEY)
  101. decoded_text = cipher_suite.decrypt(text_in_bytes)
  102. bytes_in_text = decoded_text.decode("utf-8")
  103. await message.reply_text(bytes_in_text)
  104. async def fetch_text(url):
  105. async with aiohttp.ClientSession(headers={"user-agent":"curl"}) as session:
  106. async with session.get(url) as resp:
  107. data = await resp.text()
  108. return data
  109. # Cheat.sh
  110. @app.on_message(filters.command("cheat") & ~filters.edited)
  111. @capture_err
  112. async def cheat(_, message):
  113. if len(message.command) < 3:
  114. await message.reply_text("/cheat [language] [query]")
  115. return
  116. text = message.text.split(None, 1)[1]
  117. m = await message.reply_text("Searching")
  118. try:
  119. ftext = text.split()
  120. language = ftext[0]
  121. query = ftext[1]
  122. data = await fetch_text(f"http://cht.sh/{language}/{query}?QT")
  123. if not data:
  124. await m.edit("Found Literally Nothing!")
  125. return
  126. await m.edit(f"`{data}`")
  127. except Exception as e:
  128. await m.edit(str(e))
  129. print(str(e))
  130. # Weather
  131. @app.on_message(filters.command("weather") & ~filters.edited)
  132. @capture_err
  133. async def weather(_, message):
  134. if len(message.command) != 2:
  135. await message.reply_text("/weather [city]")
  136. return
  137. city = message.text.split(None, 1)[1]
  138. m = await message.reply_text("Fetching Data")
  139. data = await fetch_text(f"https://wttr.in/{city}?mnTC0")
  140. await m.edit(f"`{data}`")
  141. # Translate
  142. @app.on_message(filters.command("tr") & ~filters.edited)
  143. @capture_err
  144. async def tr(_, message):
  145. if len(message.command) != 2:
  146. await message.reply_text("/tr [LANGUAGE_CODE]")
  147. return
  148. lang = message.text.split(None, 1)[1]
  149. if not message.reply_to_message or not lang:
  150. await message.reply_text(
  151. "Reply to a message with /tr [language code]"
  152. + "\nGet supported language list from here -"
  153. + " https://py-googletrans.readthedocs.io/en"
  154. + "/latest/#googletrans-languages"
  155. )
  156. return
  157. if message.reply_to_message.text:
  158. text = message.reply_to_message.text
  159. try:
  160. i = Translator().translate(text, dest=lang)
  161. except ValueError:
  162. await message.reply_text("[ERROR]: LANGUAGE NOT FOUND")
  163. return
  164. await message.reply_text(i.text)
  165. elif message.reply_to_message.caption:
  166. text = message.reply_to_message.caption
  167. i = Translator().translate(text, dest=lang)
  168. await message.reply_text(i.text)
  169. fetch_limit = 0
  170. @app.on_message(filters.command("json") & ~filters.edited)
  171. @capture_err
  172. async def json_fetch(_, message):
  173. global fetch_limit
  174. if len(message.command) != 2:
  175. await message.reply_text("/json [URL]")
  176. return
  177. elif fetch_limit > 500:
  178. await message.reply_text("Today's Quota Exceeded!, lol")
  179. return
  180. url = message.text.split(None, 1)[1]
  181. try:
  182. data = await fetch(url)
  183. data = await json_prettify(data)
  184. fetch_limit += 1
  185. if len(data) < 4090:
  186. await message.reply_text(data)
  187. else:
  188. neko_link = await neko(data)
  189. await message.reply_text(f"[OUTPUT_TOO_LONG]({neko_link})", disable_web_page_preview=True)
  190. except Exception as e:
  191. await message.reply_text(str(e))
  192. print(str(e))
  193. @app.on_message(filters.command('bun'))
  194. @capture_err
  195. async def bunn(_, message):
  196. if message.reply_to_message:
  197. await message.reply_to_message.reply_sticker('CAACAgUAAx0CWIlO9AABARyRYBhyjKXFATVhu7AGQwip3TzSFiMAAuMBAAJ7usBUIu2xBtXTmuweBA')
  198. await app.send_message(message.chat.id, text="Eat Bun")
  199. return
  200. if not message.reply_to_message:
  201. await message.reply_sticker('CAACAgUAAx0CWIlO9AABARyRYBhyjKXFATVhu7AGQwip3TzSFiMAAuMBAAJ7usBUIu2xBtXTmuweBA')
  202. await app.send_message(message.chat.id, text="Eat Bun")