Browse Source

fixed purge

TheHamkerCat 5 years ago
parent
commit
2144204ed3
3 changed files with 144 additions and 33 deletions
  1. 6 0
      .vscode/settings.json
  2. 138 31
      wbb/modules/admin.py
  3. 0 2
      wbb/modules/greetings.py

+ 6 - 0
.vscode/settings.json

@@ -0,0 +1,6 @@
+{
+    "python.linting.flake8Enabled": false,
+    "python.linting.pylintEnabled": true,
+    "python.linting.enabled": true,
+    "python.pythonPath": "/usr/bin/python"
+}

+ 138 - 31
wbb/modules/admin.py

@@ -1,64 +1,171 @@
 import asyncio
+import json
+import os
+
+from wbb import OWNER_ID, SUDO_USER_ID, app
 from wbb.utils import cust_filter
-from wbb import app, OWNER_ID
 
 
 __MODULE__ = "Admin"
 __HELP__ = "/purge - Purge Messages [Limit = 100]"
 
+
+
+SUDO = [OWNER_ID, SUDO_USER_ID]
+
+
+# Get The List Of Admins In A Chats
+
+
+async def list_admins(group_id):
+    list_of_admins = []
+    async for member in app.iter_chat_members(
+            group_id, filter="administrators"):
+        list_of_admins.append(member.user.id)
+    return list_of_admins
+
+# Get Permissions Of an Admin 
+
+
+async def check_perms(message, permission):
+    permissions = await app.get_chat_member(chat_id=message.chat.id, user_id=message.from_user.id)
+    try:
+        os.remove('permissions.json')
+    except FileNotFoundError:
+        pass
+    f = open("permissions.json", "a")
+    f.write(str(permissions))
+    f.close()
+    with open('permissions.json') as faa:
+        data = json.load(faa)
+    perm = (data[permission]) # ex: permission = can_delete_messages
+    os.remove('permissions.json')
+    return perm
+
+
 # Purge Messages
 
 
 @app.on_message(cust_filter.command(commands=("purge")))
 async def purge(client, message):
+    message_ids = []
+
     if message.chat.type not in (("supergroup", "channel")):
         return
 
-    message_ids = []
-    # Admin check logic
-    group_id = message.chat.id
-    list_of_admins = []
-    async for member in app.iter_chat_members(
-            group_id, filter="administrators"):
-        list_of_admins.append(member.user.id)
+    admins = await list_admins(message.chat.id)
+    try:
+        can_delete = await check_perms(message, "can_delete_messages")
+    except KeyError:
+        can_delete = "false"
+
+    status = await check_perms(message, "status")
 
-    if message.from_user.id in list_of_admins \
-            or message.from_user.id == OWNER_ID:
-        if message.reply_to_message:
-            for a_s_message_id in range(
-                message.reply_to_message.message_id,
-                message.message_id
-            ):
-                message_ids.append(a_s_message_id)
-                if len(message_ids) == 100:
+    print(can_delete)
+    print(status)
+
+    if status == 'member' or status == 'administrator':
+        if can_delete == 'false' and message.from_user.id not in SUDO:
+            await message.reply_text(
+                "You Are Not Admin, Stop Spamming! else /bun"
+                )
+
+    if message.from_user.id in admins \
+            or message.from_user.id in SUDO:
+        if can_delete is True or status == 'creator' or message.from_user.id in SUDO:
+            if message.reply_to_message:
+                for a_s_message_id in range(
+                    message.reply_to_message.message_id,
+                    message.message_id
+                ):
+                    message_ids.append(a_s_message_id)
+                    if len(message_ids) == 100:
+                        await client.delete_messages(
+                            chat_id=message.chat.id,
+                            message_ids=message_ids,
+                            revoke=True
+                        )
+                        message_ids = []
+                if len(message_ids) > 0:
                     await client.delete_messages(
                         chat_id=message.chat.id,
                         message_ids=message_ids,
                         revoke=True
                     )
-                    message_ids = []
-            if len(message_ids) > 0:
-                await client.delete_messages(
-                    chat_id=message.chat.id,
-                    message_ids=message_ids,
-                    revoke=True
-                )
 
-        m = await message.reply_text("Purged!")
-        await asyncio.sleep(1)
-        await m.delete()
+# Kick members
+
+
+@app.on_message(cust_filter.command(commands=("kick")))
+async def kick(client, message):
+    username = (message.text.split(None, 2)[1])
+    reason = (message.text.split(None, 2)[2])
+
+    admins = await list_admins(message.chat.id)
 
+    if message.from_user.id in admins \
+            or message.from_user.id in SUDO:
+        if username != "":
+            await message.chat.kick_member(username)
+            await message.chat.unban_member(username)
+
+            if reason != "": 
+                await message.reply_text(
+                    f"Kicked {username}!"
+                    f"Reason: {reason}")
+            else:
+                await message.reply_text(
+                    f"Kicked {username}!"
+                    f"Reason: Kicked without a reason! lol")
+
+        else:
+            id = message.reply_to_message.from_user.id
+            await message.reply_to_message.chat.kick_member(id)
+            await message.reply_to_message.chat.unban_member(id)
+            
+            if reason != "": 
+                await message.reply_text(
+                    f"Kicked {username}!"
+                    f"Reason: {reason}")
+            else:
+                await message.reply_text(
+                    f"Kicked {username}!"
+                    f"Reason: Kicked without a reason! lol")
+    
     else:
         await message.reply_text("You Are Not Admin, Stop Spamming! else /bun")
 
-# Kicking users
 
 
-@app.on_message(cust_filter.command(commands=("kick")))
-async def kick(client, message):
+
+# Ban members
+
+
+@app.on_message(cust_filter.command(commands=("ban")))
+async def ban(client, message):
     username = (message.text.split(None, 1)[1])
     if username != "":
-        
+        await message.chat.kick_member(username)
+        await message.reply_text(f"Banned {username}!")
+    else:
+        id = message.reply_to_message.from_user.id
+        await message.reply_to_message.chat.kick_member(id)
+        await message.reply_text(f"Banned {username}!")
+
+# Unban members
+
+
+@app.on_message(cust_filter.command(commands=("unban")))
+async def unban(client, message):
+    username = (message.text.split(None, 1)[1])
+    if username != "":
+        await message.chat.unban_member(username)
+        await message.reply_text(f"Unbanned {username}!")
+    else:
+        id = message.reply_to_message.from_user.id
+        await message.reply_to_message.chat.unban_member(id)
+        await message.reply_text(f"Unbanned {username}!")
+    
 
 
 

+ 0 - 2
wbb/modules/greetings.py

@@ -1,6 +1,5 @@
 from wbb import app
 from pyrogram import filters, emoji
-import asyncio
 
 
 MESSAGE = "{} Welcome {}!"
@@ -11,5 +10,4 @@ async def welcome(client, message):
     new_members = [i.mention for i in message.new_chat_members]
     text = MESSAGE.format(emoji.CROWN, ",  ".join(new_members))
     m = await message.reply_text(text, disable_web_page_preview=True)
-    await asyncio.sleep(20)
     await m.delete()