taslim19 commited on
Commit
f0aea90
·
1 Parent(s): 9c12daf

Update MongoDB database name in editwatch.py and apply recent changes

Browse files
DragMusic/plugins/management/admins.py CHANGED
@@ -1,6 +1,6 @@
1
  from pyrogram import filters
2
  from pyrogram.types import Message, ChatPermissions
3
- from pyrogram.enums import ChatMembersFilter
4
  from pyrogram.errors import PeerIdInvalid
5
 
6
  from DragMusic import app
@@ -57,14 +57,26 @@ async def demote_user(client, message: Message, _):
57
 
58
  @app.on_message(filters.command("adminlist") & filters.group)
59
  async def admin_list(client, message: Message):
60
- admin_list = []
61
- index = 1
62
- async for admin in client.get_chat_members(message.chat.id, filter=ChatMembersFilter.ADMINISTRATORS):
63
- admin_list.append(f"{index}. {admin.user.mention}")
64
- index += 1
65
 
66
- if admin_list:
67
- await message.reply_text("Admins in this chat:\\n\\n" + "\\n".join(admin_list))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  else:
69
  await message.reply_text("No admins found in this chat.")
70
 
 
1
  from pyrogram import filters
2
  from pyrogram.types import Message, ChatPermissions
3
+ from pyrogram.enums import ChatMembersFilter, ChatMemberStatus
4
  from pyrogram.errors import PeerIdInvalid
5
 
6
  from DragMusic import app
 
57
 
58
  @app.on_message(filters.command("adminlist") & filters.group)
59
  async def admin_list(client, message: Message):
60
+ admin_list_text = "Admins in this chat:\n\n"
61
+ admins = []
 
 
 
62
 
63
+ async for member in client.get_chat_members(message.chat.id, filter=ChatMembersFilter.ADMINISTRATORS):
64
+ admins.append(member)
65
+
66
+ # Sort to put creator at the top
67
+ admins.sort(key=lambda x: x.status == ChatMemberStatus.OWNER, reverse=True)
68
+
69
+ for admin in admins:
70
+ user = admin.user
71
+ status = "Owner" if admin.status == ChatMemberStatus.OWNER else "Admin"
72
+
73
+ if user.username:
74
+ admin_list_text += f"• @{user.username} ({status})\n"
75
+ else:
76
+ admin_list_text += f"• {user.mention} ({status})\n"
77
+
78
+ if len(admins) > 0:
79
+ await message.reply_text(admin_list_text)
80
  else:
81
  await message.reply_text("No admins found in this chat.")
82
 
DragMusic/plugins/management/editwatch.py ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import traceback
2
+ from pyrogram import Client, filters
3
+ from pyrogram.enums import ChatMemberStatus
4
+ from pyrogram.raw.types import UpdateEditMessage, UpdateEditChannelMessage
5
+ from pyrogram.types import Message
6
+ from DragMusic import app
7
+ from pymongo import MongoClient
8
+ from config import MONGO_DB_URI
9
+
10
+ # MongoDB setup
11
+ mongo = MongoClient(MONGO_DB_URI)
12
+ db = mongo["dragxdb"]
13
+ group_col = db["editwatch_groups"]
14
+ auth_col = db["editwatch_auth_users"]
15
+
16
+ # Check if user is admin
17
+ async def is_admin(client, chat_id, user_id):
18
+ try:
19
+ member = await client.get_chat_member(chat_id, user_id)
20
+ return member.status in [ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER]
21
+ except:
22
+ return False
23
+
24
+ # Enable/Disable edit scan
25
+ @app.on_message(filters.command("editscan") & filters.group)
26
+ async def editscan_toggle(client, message: Message):
27
+ chat_id = message.chat.id
28
+ user_id = message.from_user.id
29
+
30
+ if not await is_admin(client, chat_id, user_id):
31
+ return await message.reply_text("Only admins can use this command.")
32
+
33
+ args = message.text.split(None, 1)
34
+ if len(args) < 2:
35
+ return await message.reply_text("Usage: `/editscan enable` or `/editscan disable`")
36
+
37
+ cmd = args[1].lower()
38
+ if cmd == "enable":
39
+ group_col.update_one({"chat_id": chat_id}, {"$set": {"enabled": True}}, upsert=True)
40
+ await message.reply_text("✅ Edit scan enabled.")
41
+ elif cmd == "disable":
42
+ group_col.delete_one({"chat_id": chat_id})
43
+ await message.reply_text("❌ Edit scan disabled.")
44
+ else:
45
+ await message.reply_text("Invalid option. Use `enable` or `disable`.")
46
+
47
+ # Authorize or remove user with /sauth
48
+ @app.on_message(filters.command("sauth") & filters.group)
49
+ async def sauth_handler(client, message: Message):
50
+ chat_id = message.chat.id
51
+ user_id = message.from_user.id
52
+
53
+ if not await is_admin(client, chat_id, user_id):
54
+ return await message.reply_text("Only admins can use this command.")
55
+
56
+ if not message.reply_to_message or not message.reply_to_message.from_user:
57
+ return await message.reply_text("Reply to a user's message to auth/remove them.")
58
+
59
+ target_user_id = message.reply_to_message.from_user.id
60
+ args = message.text.split(None, 1)
61
+ cmd = args[1].lower() if len(args) > 1 else "add"
62
+
63
+ if cmd == "remove":
64
+ auth_col.update_one(
65
+ {"chat_id": chat_id},
66
+ {"$pull": {"users": target_user_id}}
67
+ )
68
+ await message.reply_text("❌ User has been removed from authorized list.")
69
+ else:
70
+ auth_col.update_one(
71
+ {"chat_id": chat_id},
72
+ {"$addToSet": {"users": target_user_id}},
73
+ upsert=True
74
+ )
75
+ await message.reply_text("✅ User has been authorized to edit without deletion.")
76
+
77
+ # Monitor edits via raw updates
78
+ @app.on_raw_update(group=-1)
79
+ async def raw_edit_delete(client: Client, update, users, chats):
80
+ if isinstance(update, (UpdateEditMessage, UpdateEditChannelMessage)):
81
+ msg = update.message
82
+
83
+ try:
84
+ if getattr(msg, "edit_hide", False):
85
+ return
86
+
87
+ if not hasattr(msg, "from_id") or not hasattr(msg, "peer_id"):
88
+ return
89
+
90
+ user_id = msg.from_id.user_id
91
+ chat_id = getattr(msg.peer_id, "channel_id", None)
92
+ if chat_id:
93
+ chat_id = int(f"-100{chat_id}")
94
+ else:
95
+ chat_id = getattr(msg.peer_id, "chat_id", None)
96
+
97
+ if not chat_id:
98
+ return
99
+
100
+ group_data = group_col.find_one({"chat_id": chat_id})
101
+ if not group_data or not group_data.get("enabled"):
102
+ return
103
+
104
+ # Skip admins
105
+ try:
106
+ member = await client.get_chat_member(chat_id, user_id)
107
+ if member.status in [ChatMemberStatus.ADMINISTRATOR, ChatMemberStatus.OWNER]:
108
+ return
109
+ except:
110
+ pass
111
+
112
+ # Check if user is in auth list
113
+ auth_data = auth_col.find_one({"chat_id": chat_id})
114
+ if auth_data and user_id in auth_data.get("users", []):
115
+ return
116
+
117
+ # Delete message
118
+ await client.delete_messages(chat_id, msg.id)
119
+ user = await client.get_users(user_id)
120
+ await client.send_message(
121
+ chat_id,
122
+ f"{user.mention} edited a message — I deleted it."
123
+ )
124
+
125
+ except Exception:
126
+ print("Error during edit scan:\n", traceback.format_exc())
DragMusic/plugins/tools/dev.py CHANGED
@@ -10,9 +10,9 @@ from time import time
10
  from pyrogram import filters
11
  from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message, CallbackQuery
12
 
13
- from AnonXMusic import app
14
  from config import OWNER_ID
15
- from AnonXMusic.core.mongo import mongodb
16
 
17
  async def aexec(code, client, message):
18
  afkdb = mongodb.afk
 
10
  from pyrogram import filters
11
  from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message, CallbackQuery
12
 
13
+ from DragMusic import app
14
  from config import OWNER_ID
15
+ from DragMusic.core.mongo import mongodb
16
 
17
  async def aexec(code, client, message):
18
  afkdb = mongodb.afk