sudoers.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. import re
  2. import time
  3. from pyrogram import filters, types
  4. import speedtest
  5. import psutil
  6. from wbb import app, SUDOERS, bot_start_time
  7. from wbb.utils import nekobin, formatter
  8. from wbb.utils.errors import capture_err
  9. from wbb.utils.botinfo import BOT_ID
  10. from wbb.modules.global_stats import global_stats
  11. from wbb.utils.dbfunctions import (
  12. is_gbanned_user,
  13. add_gban_user,
  14. remove_gban_user,
  15. get_served_chats)
  16. __MODULE__ = "Sudoers"
  17. __HELP__ = '''/log - To Get Logs From Last Run.
  18. /speedtest - To Perform A Speedtest.
  19. /stats - To Check System Status.
  20. /global_stats - To Check Bot's Global Stats.
  21. /gban - To Ban A User Globally.'''
  22. # Logs Module
  23. @app.on_message(filters.user(SUDOERS) & filters.command("log"))
  24. @capture_err
  25. async def logs_chat(_, message):
  26. keyb = types.InlineKeyboardMarkup(
  27. [
  28. [
  29. types.InlineKeyboardButton(
  30. "Paste on Nekobin", callback_data="paste_log_nekobin"
  31. )
  32. ]
  33. ]
  34. )
  35. await message.reply_document(
  36. "error.log", reply_markup=keyb
  37. )
  38. def logs_callback(_, __, query):
  39. if re.match("paste_log_nekobin", query.data):
  40. return True
  41. logs_create = filters.create(logs_callback)
  42. @app.on_callback_query(logs_create)
  43. async def paste_log_neko(client, query):
  44. if query.from_user.id in SUDOERS:
  45. j = open("error.log", "r")
  46. data = await nekobin.neko(j.read())
  47. keyb = types.InlineKeyboardMarkup(
  48. [[types.InlineKeyboardButton("Pasted!", url=f"{data}")]]
  49. )
  50. await query.message.edit_caption("Successfully Nekofied",
  51. reply_markup=keyb)
  52. else:
  53. await client.answer_callback_query(
  54. query.id, "'Blue Button Must Press', huh?", show_alert=True
  55. )
  56. # SpeedTest Module
  57. def speed_convert(size):
  58. power = 2 ** 10
  59. zero = 0
  60. units = {0: "", 1: "Kb/s", 2: "Mb/s", 3: "Gb/s", 4: "Tb/s"}
  61. while size > power:
  62. size /= power
  63. zero += 1
  64. return f"{round(size, 2)} {units[zero]}"
  65. @app.on_message(
  66. filters.user(SUDOERS) & filters.command("speedtest")
  67. )
  68. @capture_err
  69. async def get_speedtest_result(_, message):
  70. m = await message.reply_text("`Performing A Speedtest!`")
  71. speed = speedtest.Speedtest()
  72. i = speed.get_best_server()
  73. j = speed.download()
  74. k = speed.upload()
  75. await m.edit(f'''
  76. ```Download - {speed_convert(j)}
  77. Upload - {speed_convert(k)}
  78. Latency - {round((i["latency"]))} ms
  79. ```''')
  80. # Stats Module
  81. async def bot_sys_stats():
  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. stats = (f'''**Uptime:** {formatter.get_readable_time((bot_uptime))}
  87. **CPU:** {cpu}%
  88. **RAM:** {mem}%
  89. **Disk:** {disk}%''')
  90. return stats
  91. @app.on_message(
  92. filters.user(SUDOERS) & filters.command("stats")
  93. )
  94. @capture_err
  95. async def get_stats(_, message):
  96. stats = await bot_sys_stats()
  97. await message.reply_text(stats)
  98. # Global Stats
  99. @app.on_message(
  100. filters.command("global_stats") & filters.user(SUDOERS)
  101. & ~filters.edited
  102. )
  103. @capture_err
  104. async def g_stats(_, message):
  105. await global_stats(_, message)
  106. # Gban
  107. @app.on_message(filters.command("gban") & filters.user(SUDOERS))
  108. @capture_err
  109. async def ban_globally(_, message):
  110. if not message.reply_to_message:
  111. await message.reply_text("Reply to a user's message to Gban.")
  112. return
  113. from_user_id = message.from_user.id
  114. user_id = message.reply_to_message.from_user.id
  115. mention = message.reply_to_message.from_user.mention
  116. from_user_mention = message.from_user.mention
  117. if user_id == from_user_id:
  118. await message.reply_text("You want to gban yourself? FOOL!")
  119. elif user_id == BOT_ID:
  120. await message.reply_text("Should i gban myself? I'm not fool like you, HUMAN!")
  121. elif user_id in SUDOERS:
  122. await message.reply_text("You want to ban a sudo user? GET REKT!!")
  123. else:
  124. is_gbanned = await is_gbanned_user(user_id)
  125. if is_gbanned:
  126. await message.reply_text("He's already gbanned, why bully him?")
  127. else:
  128. served_chats = await get_served_chats()
  129. for served_chat in served_chats:
  130. try: await app.kick_chat_member(served_chat['chat_id'], user_id)
  131. except Exception: pass
  132. await add_gban_user(user_id)
  133. try: await app.send_message(
  134. user_id, """Hello, You have been globally banned by {from_user_mention},
  135. You can appeal for this ban by talking to {from_user_mention} about this.""")
  136. except Exception: pass
  137. await message.reply_text(f"Banned {mention} Globally!")
  138. # Ungban
  139. @app.on_message(filters.command("ungban") & filters.user(SUDOERS))
  140. @capture_err
  141. async def unban_globally(_, message):
  142. if not message.reply_to_message:
  143. await message.reply_to_message("Reply to a user's message to ungban.")
  144. return
  145. from_user_id = message.from_user.id
  146. user_id = message.reply_to_message.from_user.id
  147. mention = message.reply_to_message.from_user.mention
  148. if user_id == from_user_id:
  149. await message.reply_text("You want to ungban yourself? FOOL!")
  150. elif user_id == BOT_ID:
  151. await message.reply_text("Should i ungban myself? But i'm not gbanned.")
  152. elif user_id in SUDOERS:
  153. await message.reply_text("Sudo users can't be gbanned/ungbanned.")
  154. else:
  155. is_gbanned = await is_gbanned_user(user_id)
  156. if not is_gbanned:
  157. await message.reply_text("He's already free, why bully him?")
  158. else:
  159. await remove_gban_user(user_id)
  160. await message.reply_text(f"Unbanned {mention} Globally!")