File size: 4,525 Bytes
f0aea90
 
 
 
 
 
 
 
 
 
 
dc00de0
f0aea90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import traceback
from pyrogram import Client, filters
from pyrogram.enums import ChatMemberStatus
from pyrogram.raw.types import UpdateEditMessage, UpdateEditChannelMessage
from pyrogram.types import Message
from DragMusic import app
from pymongo import MongoClient
from config import MONGO_DB_URI

# MongoDB setup
mongo = MongoClient(MONGO_DB_URI)
db = mongo["AnonX"]
group_col = db["editwatch_groups"]
auth_col = db["editwatch_auth_users"]

# Check if user is admin
async def is_admin(client, chat_id, user_id):
    try:
        member = await client.get_chat_member(chat_id, user_id)
        return member.status in [ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER]
    except:
        return False

# Enable/Disable edit scan
@app.on_message(filters.command("editscan") & filters.group)
async def editscan_toggle(client, message: Message):
    chat_id = message.chat.id
    user_id = message.from_user.id

    if not await is_admin(client, chat_id, user_id):
        return await message.reply_text("Only admins can use this command.")

    args = message.text.split(None, 1)
    if len(args) < 2:
        return await message.reply_text("Usage: `/editscan enable` or `/editscan disable`")

    cmd = args[1].lower()
    if cmd == "enable":
        group_col.update_one({"chat_id": chat_id}, {"$set": {"enabled": True}}, upsert=True)
        await message.reply_text("✅ Edit scan enabled.")
    elif cmd == "disable":
        group_col.delete_one({"chat_id": chat_id})
        await message.reply_text("❌ Edit scan disabled.")
    else:
        await message.reply_text("Invalid option. Use `enable` or `disable`.")

# Authorize or remove user with /sauth
@app.on_message(filters.command("sauth") & filters.group)
async def sauth_handler(client, message: Message):
    chat_id = message.chat.id
    user_id = message.from_user.id

    if not await is_admin(client, chat_id, user_id):
        return await message.reply_text("Only admins can use this command.")

    if not message.reply_to_message or not message.reply_to_message.from_user:
        return await message.reply_text("Reply to a user's message to auth/remove them.")

    target_user_id = message.reply_to_message.from_user.id
    args = message.text.split(None, 1)
    cmd = args[1].lower() if len(args) > 1 else "add"

    if cmd == "remove":
        auth_col.update_one(
            {"chat_id": chat_id},
            {"$pull": {"users": target_user_id}}
        )
        await message.reply_text("❌ User has been removed from authorized list.")
    else:
        auth_col.update_one(
            {"chat_id": chat_id},
            {"$addToSet": {"users": target_user_id}},
            upsert=True
        )
        await message.reply_text("✅ User has been authorized to edit without deletion.")

# Monitor edits via raw updates
@app.on_raw_update(group=-1)
async def raw_edit_delete(client: Client, update, users, chats):
    if isinstance(update, (UpdateEditMessage, UpdateEditChannelMessage)):
        msg = update.message

        try:
            if getattr(msg, "edit_hide", False):
                return

            if not hasattr(msg, "from_id") or not hasattr(msg, "peer_id"):
                return

            user_id = msg.from_id.user_id
            chat_id = getattr(msg.peer_id, "channel_id", None)
            if chat_id:
                chat_id = int(f"-100{chat_id}")
            else:
                chat_id = getattr(msg.peer_id, "chat_id", None)

            if not chat_id:
                return

            group_data = group_col.find_one({"chat_id": chat_id})
            if not group_data or not group_data.get("enabled"):
                return

            # Skip admins
            try:
                member = await client.get_chat_member(chat_id, user_id)
                if member.status in [ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER]:
                    return
            except:
                pass

            # Check if user is in auth list
            auth_data = auth_col.find_one({"chat_id": chat_id})
            if auth_data and user_id in auth_data.get("users", []):
                return

            # Delete message
            await client.delete_messages(chat_id, msg.id)
            user = await client.get_users(user_id)
            await client.send_message(
                chat_id,
                f"{user.mention} edited a message — I deleted it."
            )

        except Exception:
            print("Error during edit scan:\n", traceback.format_exc())