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 |
-
|
61 |
-
|
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 |
-
|
67 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
14 |
from config import OWNER_ID
|
15 |
-
from
|
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
|