sudoers.py 3.9 KB

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