Spaces:
Paused
Paused
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 | |
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 | |
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 | |
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()) |