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()) |