misc.py 7.8 KB

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