taslim19
Use tempfile.gettempdir() for downloads in Telegram.py to avoid permission errors
dc00de0
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())