locks.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. from wbb import SUDOERS, app
  2. from wbb.modules.admin import member_permissions, current_chat_permissions
  3. from wbb.core.decorators.errors import capture_err
  4. from pyrogram import filters
  5. from pyrogram.types import ChatPermissions
  6. from pyrogram.errors.exceptions.bad_request_400 import ChatNotModified
  7. __MODULE__ = "Locks"
  8. __HELP__ = """
  9. Commands: /lock | /unlock
  10. Parameters:
  11. messages | stickers | gifs | media | games | polls | inline | url | voice | commands | forwards
  12. You can only pass the "all" parameter with /lock, not with /unlock
  13. Example:
  14. /lock all
  15. """
  16. incorrect_parameters = "Incorrect Parameters, Check Locks Section In Help."
  17. data = {
  18. "messages": "can_send_messages",
  19. "stickers": "can_send_stickers",
  20. "gifs": "can_send_animations",
  21. "media": "can_send_media_messages",
  22. "games": "can_send_games",
  23. "inline": "can_use_inline_bots",
  24. "link_previews": "can_add_web_page_previews",
  25. "polls": "can_send_polls",
  26. "group_info": "can_change_info",
  27. "useradd": "can_invite_users",
  28. "pin": "can_pin_messages"
  29. }
  30. async def tg_lock(message, permissions: list, perm: str, lock: bool):
  31. if lock:
  32. if perm not in permissions:
  33. await message.reply_text("Already locked.")
  34. return
  35. else:
  36. if perm in permissions:
  37. await message.reply_text("Already Unlocked.")
  38. return
  39. (permissions.remove(perm) if lock else permissions.append(perm))
  40. permissions = {perm: True for perm in list(set(permissions))}
  41. try:
  42. await app.set_chat_permissions(message.chat.id, ChatPermissions(**permissions))
  43. except ChatNotModified:
  44. await message.reply_text("To unlock this, you have to unlock 'messages' first.")
  45. return
  46. await message.reply_text(("Locked." if lock else "Unlocked."))
  47. @app.on_message(filters.command(["lock", "unlock"]) & ~filters.private)
  48. @capture_err
  49. async def locks_func(_, message):
  50. user_id = message.from_user.id
  51. chat_id = message.chat.id
  52. if len(message.command) != 2:
  53. await message.reply_text(incorrect_parameters)
  54. return
  55. parameter = message.text.strip().split(None, 1)[1].lower()
  56. state = message.command[0].lower()
  57. if parameter not in data and parameter != "all":
  58. await message.reply_text(incorrect_parameters)
  59. return
  60. permissions = await member_permissions(chat_id, user_id)
  61. if "can_restrict_members" not in permissions and user_id not in SUDOERS:
  62. await message.reply_text("You Don't Have Enough Permissions.")
  63. return
  64. permissions = await current_chat_permissions(chat_id)
  65. if parameter in data:
  66. await tg_lock(message, permissions, data[parameter], True if state == "lock" else False)
  67. return
  68. elif parameter == "all" and state == "lock":
  69. await app.set_chat_permissions(chat_id, ChatPermissions())
  70. await message.reply_text("Locked Everything.")