taslim19 commited on
Commit
2875d7e
·
1 Parent(s): 95ec5e4

feat: Add admin management plugin with promote/demote/list commands

Browse files
DragMusic/plugins/management/admins.py ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pyrogram import filters
2
+ from pyrogram.types import Message
3
+ from pyrogram.errors import PeerIdInvalid
4
+
5
+ from DragMusic import app
6
+ from DragMusic.utils.decorators.admins import AdminRightsCheck
7
+
8
+ # Helper function to extract user info from a message
9
+ async def extract_user(message: Message, client):
10
+ if message.reply_to_message:
11
+ return message.reply_to_message.from_user
12
+
13
+ if len(message.command) > 1:
14
+ identifier = message.command[1]
15
+ try:
16
+ return await client.get_users(int(identifier))
17
+ except (ValueError, PeerIdInvalid):
18
+ try:
19
+ return await client.get_users(identifier)
20
+ except PeerIdInvalid:
21
+ await message.reply_text("Invalid user ID or username.")
22
+ return None
23
+
24
+ await message.reply_text("Reply to a user or provide a username/user ID.")
25
+ return None
26
+
27
+ @app.on_message(filters.command("promote") & filters.group)
28
+ @AdminRightsCheck
29
+ async def promote_user(client, message: Message, _):
30
+ target_user = await extract_user(message, client)
31
+ if not target_user:
32
+ return
33
+
34
+ try:
35
+ await client.promote_chat_member(message.chat.id, target_user.id)
36
+ await message.reply_text(f"Successfully promoted {target_user.mention}.")
37
+ except Exception as e:
38
+ await message.reply_text(f"Failed to promote user. Error: {e}")
39
+
40
+ @app.on_message(filters.command("demote") & filters.group)
41
+ @AdminRightsCheck
42
+ async def demote_user(client, message: Message, _):
43
+ target_user = await extract_user(message, client)
44
+ if not target_user:
45
+ return
46
+
47
+ try:
48
+ await client.promote_chat_member(
49
+ message.chat.id,
50
+ target_user.id,
51
+ can_manage_chat=False,
52
+ can_change_info=False,
53
+ can_delete_messages=False,
54
+ can_restrict_members=False,
55
+ can_pin_messages=False,
56
+ can_promote_members=False,
57
+ can_manage_video_chats=False,
58
+ )
59
+ await message.reply_text(f"Successfully demoted {target_user.mention}.")
60
+ except Exception as e:
61
+ await message.reply_text(f"Failed to demote user. Error: {e}")
62
+
63
+ @app.on_message(filters.command("adminlist") & filters.group)
64
+ async def admin_list(client, message: Message):
65
+ admin_list = []
66
+ async for admin in client.get_chat_members(message.chat.id, filter="administrators"):
67
+ admin_list.append(f"- {admin.user.mention}")
68
+
69
+ if admin_list:
70
+ await message.reply_text("Admins in this chat:\\n" + "\\n".join(admin_list))
71
+ else:
72
+ await message.reply_text("No admins found in this chat.")
73
+
74
+ @app.on_message(filters.command("admincache") & filters.group)
75
+ @AdminRightsCheck
76
+ async def admin_cache(client, message: Message, _):
77
+ from DragMusic.utils.decorators.admins import adminlist
78
+ if message.chat.id in adminlist:
79
+ del adminlist[message.chat.id]
80
+ await message.reply_text("Admin cache has been refreshed.")