sudoers.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. import os
  2. import re
  3. import requests
  4. import time
  5. import wget
  6. from pyrogram import filters, types
  7. from pyrogram.types import Message
  8. import speedtest
  9. import psutil
  10. from wbb.utils import cust_filter, nekobin, formatter
  11. from wbb.utils.errors import capture_err
  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. SUDOERS = [OWNER_ID, SUDO_USER_ID]
  19. # Logs Module
  20. @app.on_message(filters.user(SUDOERS) & cust_filter.command("log"))
  21. @capture_err
  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. @capture_err
  66. async def get_speedtest_result(_, message: Message):
  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. @capture_err
  82. async def get_stats(_, message: Message):
  83. bot_uptime = int(time.time() - bot_start_time)
  84. cpu = psutil.cpu_percent(interval=0.5)
  85. mem = psutil.virtual_memory().percent
  86. disk = psutil.disk_usage("/").percent
  87. if NEOFETCH == "True":
  88. os.system("neofetch --stdout > neofetch.txt")
  89. i = open("neofetch.txt", "r")
  90. read_file = i.read()
  91. neofetch = (f'''
  92. ----------[Neofetch]----------
  93. {read_file}
  94. ''')
  95. i.close()
  96. else:
  97. neofetch = "NeoFetch Is Disabled!"
  98. stats = (f'''
  99. ```
  100. ----------[Stats]----------
  101. Uptime: {formatter.get_readable_time((bot_uptime))}
  102. CPU: {cpu}%
  103. RAM: {mem}%
  104. Disk: {disk}%
  105. {neofetch}
  106. ```''')
  107. await message.reply_text(stats)
  108. # Song
  109. @app.on_message(
  110. filters.user(SUDOERS) & cust_filter.command(commands=("song"))
  111. )
  112. @capture_err
  113. async def song(_, message: Message):
  114. if len(message.command) < 2:
  115. await message.reply_text("/song requires an argument.")
  116. return
  117. text = message.text.split(None, 1)[1]
  118. query = text.replace(" ", "%20")
  119. m = await message.reply_text("Searching...")
  120. try:
  121. r = requests.get(f"{JSMAPI}{query}")
  122. except Exception as e:
  123. await m.edit(str(e))
  124. return
  125. sname = r.json()[0]['song']
  126. slink = r.json()[0]['media_url']
  127. ssingers = r.json()[0]['singers']
  128. file = wget.download(slink)
  129. ffile = file.replace("mp4", "m4a")
  130. os.rename(file, ffile)
  131. await message.reply_audio(audio=ffile, title=sname,
  132. performer=ssingers)
  133. os.remove(ffile)
  134. await m.delete()