sudoers.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. import os
  2. import re
  3. import requests
  4. import time
  5. import wget
  6. from io import BytesIO
  7. from pyrogram import filters, types
  8. from pyrogram.types import Message
  9. import speedtest
  10. import psutil
  11. from wbb.utils import cust_filter, nekobin, formatter
  12. from wbb import app, OWNER_ID, SUDO_USER_ID, bot_start_time, NEOFETCH, JSMAPI
  13. __MODULE__ = "Sudoers"
  14. __HELP__ = '''/log - To Get Logs From Last Run.
  15. /speedtest - To Perform A Speedtest.
  16. /stats - To Check System Status.
  17. /song - To Download Songs From JioSaavn
  18. /upload - To Upload Files Via Direct Link'''
  19. SUDOERS = [OWNER_ID, SUDO_USER_ID]
  20. # Logs Module
  21. @app.on_message(filters.user(SUDOERS) & cust_filter.command("log"))
  22. async def logs_chat(_, message: Message):
  23. keyb = types.InlineKeyboardMarkup(
  24. [
  25. [
  26. types.InlineKeyboardButton(
  27. "Paste on Nekobin", callback_data="paste_log_nekobin"
  28. )
  29. ]
  30. ]
  31. )
  32. await message.reply_document(
  33. "error.log", reply_markup=keyb
  34. )
  35. def logs_callback(_, __, query):
  36. if re.match("paste_log_nekobin", query.data):
  37. return True
  38. logs_create = filters.create(logs_callback)
  39. @app.on_callback_query(logs_create)
  40. async def paste_log_neko(client, query):
  41. if query.from_user.id == OWNER_ID or SUDO_USER_ID:
  42. j = open("error.log", "r")
  43. data = await nekobin.neko(j.read())
  44. keyb = types.InlineKeyboardMarkup(
  45. [[types.InlineKeyboardButton("Pasted!", url=f"{data}")]]
  46. )
  47. await query.message.edit_caption("Successfully Nekofied",
  48. reply_markup=keyb)
  49. else:
  50. await client.answer_callback_query(
  51. query.id, "'Blue Button Must Press', huh?", show_alert=True
  52. )
  53. # SpeedTest Module
  54. def speed_convert(size):
  55. power = 2 ** 10
  56. zero = 0
  57. units = {0: "", 1: "Kb/s", 2: "Mb/s", 3: "Gb/s", 4: "Tb/s"}
  58. while size > power:
  59. size /= power
  60. zero += 1
  61. return f"{round(size, 2)} {units[zero]}"
  62. @app.on_message(
  63. filters.user(SUDOERS) & cust_filter.command(commands=("speedtest"))
  64. )
  65. async def get_speedtest_result(_, message: Message):
  66. app.set_parse_mode("markdown")
  67. m = await message.reply_text("```Performing A Speedtest!```")
  68. speed = speedtest.Speedtest()
  69. i = speed.get_best_server()
  70. j = speed.download()
  71. k = speed.upload()
  72. await m.edit(f'''
  73. ```Download - {speed_convert(j)}
  74. Upload - {speed_convert(k)}
  75. Latency - {round((i["latency"]))} ms
  76. ```''')
  77. # Stats Module
  78. @app.on_message(
  79. filters.user(SUDOERS) & cust_filter.command(commands=("stats"))
  80. )
  81. async def get_stats(_, message: Message):
  82. bot_uptime = int(time.time() - bot_start_time)
  83. cpu = psutil.cpu_percent(interval=0.5)
  84. mem = psutil.virtual_memory().percent
  85. disk = psutil.disk_usage("/").percent
  86. if NEOFETCH == "True":
  87. os.system("neofetch --stdout > neofetch.txt")
  88. i = open("neofetch.txt", "r")
  89. read_file = i.read()
  90. neofetch = (f'''
  91. ----------[Neofetch]----------
  92. {read_file}
  93. ''')
  94. i.close()
  95. else:
  96. neofetch = "NeoFetch Is Disabled!"
  97. stats = (f'''
  98. ```
  99. ----------[Stats]----------
  100. Uptime: {formatter.get_readable_time((bot_uptime))}
  101. CPU: {cpu}%
  102. RAM: {mem}%
  103. Disk: {disk}%
  104. {neofetch}
  105. ```''')
  106. await message.reply_text(stats)
  107. # Song
  108. @app.on_message(
  109. filters.user(SUDOERS) & cust_filter.command(commands=("song"))
  110. )
  111. async def song(_, message: Message):
  112. text = message.text.replace("/song", "")
  113. query = text.replace(" ", "")
  114. if text != "":
  115. m = await message.reply_text("Searching...")
  116. r = requests.get(f"{JSMAPI}{query}")
  117. i = 0
  118. while i < 2:
  119. sname = r.json()[i]['song']
  120. slink = r.json()[i]['media_url']
  121. ssingers = r.json()[i]['singers']
  122. file = wget.download(slink)
  123. ffile = file.replace("mp4", "m4a")
  124. os.rename(file, ffile)
  125. await message.reply_audio(audio=ffile, title=sname,
  126. performer=ssingers)
  127. i += 1
  128. os.remove(ffile)
  129. await m.delete()
  130. else:
  131. await message.reply_text("/song requires an argument.")
  132. # Upload
  133. @app.on_message(
  134. filters.user(SUDOERS) & cust_filter.command(commands=("upload"))
  135. )
  136. async def upload(_, message: Message):
  137. if len(message.command) != 2:
  138. await message.reply_text("/upload requires one argument")
  139. return
  140. url = message.command[1]
  141. data = BytesIO(requests.get(url).content)
  142. data.name = url.split("/")[-1]
  143. m = await message.reply_text("Uploading.....")
  144. await message.reply_document(data)
  145. await m.delete()