taslim19 commited on
Commit
30a00bc
·
1 Parent(s): 4f7440f

feat: implement join requests and restructure plugins

Browse files
DragMusic/plugins/bot/approve.text DELETED
@@ -1,28 +0,0 @@
1
- from DragMusic import app
2
- from os import environ
3
- from pyrogram import Client, filters
4
- from pyrogram.types import ChatJoinRequest
5
- from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
6
-
7
- EVAA = [
8
- [
9
- InlineKeyboardButton(text="ᴀᴅᴅ ᴍᴇ ʙᴀʙʏ", url=f"https://t.me/DragMusicBot?startgroup=true"),
10
- ],
11
- ]
12
-
13
- # Extract environment variables or provide default values
14
- chat_id_env = environ.get("CHAT_ID")
15
- CHAT_ID = [int(app) for app in chat_id_env.split(",")] if chat_id_env else []
16
-
17
- TEXT = environ.get("APPROVED_WELCOME_TEXT", "❅ ʜᴇʟʟᴏ ʙᴀʙʏ {mention}\n\n❅ ᴡᴇʟᴄᴏᴍᴇ ᴛᴏ {title}\n\n")
18
- APPROVED = environ.get("APPROVED_WELCOME", "on").lower()
19
-
20
- # Define an event handler for chat join requests
21
- @app.on_chat_join_request((filters.group | filters.channel) & filters.chat(CHAT_ID) if CHAT_ID else (filters.group | filters.channel))
22
- async def autoapprove(client: app, message: ChatJoinRequest):
23
- chat = message.chat # Chat
24
- user = message.from_user # User
25
- print(f"๏ {user.first_name} ᴊᴏɪɴᴇᴅ 🤝") # Logs
26
- await client.approve_chat_join_request(chat_id=chat.id, user_id=user.id)
27
- if APPROVED == "on":
28
- await client.send_message(chat_id=chat.id, text=TEXT.format(mention=user.mention, title=chat.title),reply_markup=InlineKeyboardMarkup(EVAA),)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
DragMusic/plugins/bot/fakeinfo.py DELETED
@@ -1,47 +0,0 @@
1
- import requests
2
- from DragMusic import app as Checker
3
- from pyrogram import filters
4
-
5
-
6
- @Checker.on_message(filters.command("fake"))
7
- async def address(_, message):
8
- message_text = message.text.strip()
9
- words = message_text.split()
10
-
11
- if len(words) > 1:
12
- query = words[1].strip()
13
- url = f"https://randomuser.me/api/?nat={query}"
14
- response = requests.get(url)
15
- data = response.json()
16
-
17
- if "results" in data:
18
- user_data = data["results"][0]
19
-
20
-
21
- name = f"{user_data['name']['title']} {user_data['name']['first']} {user_data['name']['last']}"
22
- address = f"{user_data['location']['street']['number']} {user_data['location']['street']['name']}"
23
- city = user_data['location']['city']
24
- state = user_data['location']['state']
25
- country = user_data['location']['country']
26
- postal = user_data['location']['postcode']
27
- email = user_data['email']
28
- phone = user_data['phone']
29
- picture_url = user_data['picture']['large']
30
-
31
-
32
- caption = f"""
33
- ﹝⌬﹞**ɴᴀᴍᴇ** ⇢ {name}
34
- ﹝⌬﹞**ᴀᴅᴅʀᴇss** ⇢ {address}
35
- ﹝⌬﹞**ᴄᴏᴜɴᴛʀʏ** ⇢ {country}
36
- ﹝⌬﹞**ᴄɪᴛʏ** ⇢ {city}
37
- ﹝⌬﹞**sᴛᴀᴛᴇ** ⇢ {state}
38
- ﹝⌬﹞**ᴘᴏsᴛᴀʟ** ⇢ {postal}
39
- ﹝⌬﹞**ᴇᴍᴀɪʟ** ⇢ {email}
40
- ﹝⌬﹞**ᴘʜᴏɴᴇ** ⇢ {phone}
41
-
42
- """
43
-
44
-
45
- await message.reply_photo(photo=picture_url, caption=caption)
46
- else:
47
- await message.reply_text("ᴏᴏᴘs ɴᴏᴛ ғᴏᴜɴᴅ ᴀɴʏ ᴀᴅᴅʀᴇss.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
DragMusic/plugins/bot/join_requests.py ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from DragMusic import app
2
+ from pyrogram import filters
3
+ from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, ChatPermissions
4
+
5
+ # A dictionary to store the message ID of the join request notification
6
+ join_request_message = {}
7
+
8
+ @app.on_chat_join_request()
9
+ async def D_A_X_X(_, message):
10
+ try:
11
+ chat = message.chat
12
+ user = message.from_user
13
+
14
+ # Check if the bot is an admin in the chat
15
+ bot_member = await app.get_chat_member(chat.id, (await app.get_me()).id)
16
+ if not bot_member.privileges.can_invite_users:
17
+ # Silently ignore if the bot can't manage join requests
18
+ return
19
+
20
+ # Send join request notification to the group
21
+ msg = await app.send_message(
22
+ chat.id,
23
+ f"""
24
+ ɴᴇᴡ ᴊᴏɪɴ ʀᴇǫᴜᴇsᴛ
25
+
26
+ ᴜsᴇʀ : {user.mention}
27
+ ᴜsᴇʀɴᴀᴍᴇ : @{user.username}
28
+ ᴜsᴇʀ ɪᴅ : {user.id}
29
+ """,
30
+ reply_markup=InlineKeyboardMarkup(
31
+ [
32
+ [
33
+ InlineKeyboardButton(
34
+ "ᴀᴘᴘʀᴏᴠᴇ", callback_data=f"j_approve_{chat.id}_{user.id}"
35
+ ),
36
+ InlineKeyboardButton(
37
+ "ʀᴇᴊᴇᴄᴛ", callback_data=f"j_reject_{chat.id}_{user.id}"
38
+ ),
39
+ ]
40
+ ]
41
+ ),
42
+ )
43
+ join_request_message[user.id] = msg.id
44
+
45
+ except Exception as e:
46
+ print(f"Error in chat_join_request handler: {e}")
47
+
48
+ async def is_admin(chat_id, user_id):
49
+ try:
50
+ member = await app.get_chat_member(chat_id, user_id)
51
+ return member.privileges is not None
52
+ except Exception:
53
+ return False
54
+
55
+ @app.on_callback_query(filters.regex("j_approve_(.*)"))
56
+ async def approve_request(_, query):
57
+ try:
58
+ chat_id, user_id = query.data.split("_")[2:]
59
+ chat_id = int(chat_id)
60
+ user_id = int(user_id)
61
+
62
+ user_who_pressed = query.from_user
63
+
64
+ if not await is_admin(chat_id, user_who_pressed.id):
65
+ await query.answer("ᴛʜɪs ɪs ɴᴏᴛ ғᴏʀ ʏᴏᴜ.", show_alert=True)
66
+ return
67
+
68
+ await app.approve_chat_join_request(chat_id, user_id)
69
+
70
+ original_message_id = join_request_message.pop(user_id, None)
71
+ if original_message_id:
72
+ original_message = await app.get_messages(chat_id, original_message_id)
73
+ await original_message.edit_text(
74
+ f"{original_message.text}\n\n**sᴛᴀᴛᴜs :** ᴀᴘᴘʀᴏᴠᴇᴅ ✅\n**ʙʏ :** {user_who_pressed.mention}"
75
+ )
76
+ except Exception as e:
77
+ await query.answer(f"An error occurred: {e}", show_alert=True)
78
+ print(f"Error in approve_request handler: {e}")
79
+
80
+ @app.on_callback_query(filters.regex("j_reject_(.*)"))
81
+ async def reject_request(_, query):
82
+ try:
83
+ chat_id, user_id = query.data.split("_")[2:]
84
+ chat_id = int(chat_id)
85
+ user_id = int(user_id)
86
+
87
+ user_who_pressed = query.from_user
88
+
89
+ if not await is_admin(chat_id, user_who_pressed.id):
90
+ await query.answer("ᴛʜɪs ɪs ɴᴏᴛ ғᴏʀ ʏᴏᴜ.", show_alert=True)
91
+ return
92
+
93
+ await app.decline_chat_join_request(chat_id, user_id)
94
+
95
+ original_message_id = join_request_message.pop(user_id, None)
96
+ if original_message_id:
97
+ original_message = await app.get_messages(chat_id, original_message_id)
98
+ await original_message.edit_text(
99
+ f"{original_message.text}\n\n**sᴛᴀᴛᴜs :** ʀᴇᴊᴇᴄᴛᴇᴅ ❌\n**ʙʏ :** {user_who_pressed.mention}"
100
+ )
101
+ except Exception as e:
102
+ await query.answer(f"An error occurred: {e}", show_alert=True)
103
+ print(f"Error in reject_request handler: {e}")
DragMusic/plugins/bot/mustjoin.py CHANGED
@@ -1,30 +1,8 @@
1
- import random
2
  from pyrogram import Client, filters
3
  from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, Message
4
  from pyrogram.errors import ChatAdminRequired, UserNotParticipant, ChatWriteForbidden
5
  from DragMusic import app
6
 
7
- MISHI = [
8
- "https://graph.org/file/f86b71018196c5cfe7344.jpg",
9
- "https://graph.org/file/a3db9af88f25bb1b99325.jpg",
10
- "https://graph.org/file/5b344a55f3d5199b63fa5.jpg",
11
- "https://graph.org/file/84de4b440300297a8ecb3.jpg",
12
- "https://graph.org/file/84e84ff778b045879d24f.jpg",
13
- "https://graph.org/file/a4a8f0e5c0e6b18249ffc.jpg",
14
- "https://graph.org/file/ed92cada78099c9c3a4f7.jpg",
15
- "https://graph.org/file/d6360613d0fa7a9d2f90b.jpg"
16
- "https://graph.org/file/37248e7bdff70c662a702.jpg",
17
- "https://graph.org/file/0bfe29d15e918917d1305.jpg",
18
- "https://graph.org/file/16b1a2828cc507f8048bd.jpg",
19
- "https://graph.org/file/e6b01f23f2871e128dad8.jpg",
20
- "https://graph.org/file/cacbdddee77784d9ed2b7.jpg",
21
- "https://graph.org/file/ddc5d6ec1c33276507b19.jpg",
22
- "https://graph.org/file/39d7277189360d2c85b62.jpg",
23
- "https://graph.org/file/5846b9214eaf12c3ed100.jpg",
24
- "https://graph.org/file/ad4f9beb4d526e6615e18.jpg",
25
- "https://graph.org/file/3514efaabe774e4f181f2.jpg",
26
- ]
27
-
28
  #--------------------------
29
 
30
  MUST_JOIN = "ERROR_RESPON_TIMEOUT"
@@ -43,7 +21,7 @@ async def must_join_channel(app: Client, msg: Message):
43
  chat_info = await app.get_chat(MUST_JOIN)
44
  link = chat_info.invite_link
45
  try:
46
- await msg.reply_photo(random.choice(MISHI), caption=f"❅ ʜᴇʏ ᴛʜᴇʀᴇ, ɴɪᴄᴇ ᴛᴏ ᴍᴇᴇᴛ ᴜʜʜ !\n\n❅ ɪғ ʏᴏᴜ ᴡᴀɴᴛ ᴛᴏ ᴜsᴇ ˹ʙᴜɢ ✘ ϻʊsɪx ˼, ᴛʜᴇɴ ᴄʟɪᴄᴋ ᴏɴ ᴛʜᴇ ʙᴇʟᴏᴡ ʙᴜᴛᴛᴏɴ ᴀɴᴅ ʏᴏᴜ ᴊᴏɪɴᴇᴅ, ᴛʜᴇɴ ʏᴏᴜ ᴄᴀɴ ᴜsᴇ ᴀʟʟ ᴍʏ ᴄᴏᴍᴍᴀɴᴅs ",
47
  reply_markup=InlineKeyboardMarkup(
48
  [
49
  [
 
 
1
  from pyrogram import Client, filters
2
  from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, Message
3
  from pyrogram.errors import ChatAdminRequired, UserNotParticipant, ChatWriteForbidden
4
  from DragMusic import app
5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  #--------------------------
7
 
8
  MUST_JOIN = "ERROR_RESPON_TIMEOUT"
 
21
  chat_info = await app.get_chat(MUST_JOIN)
22
  link = chat_info.invite_link
23
  try:
24
+ await msg.reply_text(f"❅ ʜᴇʏ ᴛʜᴇʀᴇ, ɴɪᴄᴇ ᴛᴏ ᴍᴇᴇᴛ ᴜʜʜ !\n\n❅ ɪғ ʏᴏᴜ ᴡᴀɴᴛ ᴛᴏ ᴜsᴇ ˹ʙᴜɢ ✘ ϻʊsɪx ˼, ᴛʜᴇɴ ᴄʟɪᴄᴋ ᴏɴ ᴛʜᴇ ʙᴇʟᴏᴡ ʙᴜᴛᴛᴏɴ ᴀɴᴅ ʏᴏᴜ ᴊᴏɪɴᴇᴅ, ᴛʜᴇɴ ʏᴏᴜ ᴄᴀɴ ᴜsᴇ ᴀʟʟ ᴍʏ ᴄᴏᴍᴍᴀɴᴅs ",
25
  reply_markup=InlineKeyboardMarkup(
26
  [
27
  [
DragMusic/plugins/bot/start.py CHANGED
@@ -1,3 +1,4 @@
 
1
  import time
2
  from pyrogram import filters
3
  from pyrogram.enums import ChatType
@@ -16,154 +17,134 @@ from DragMusic.utils.database import (
16
  is_banned_user,
17
  is_on_off,
18
  )
 
19
  from DragMusic.utils.formatters import get_readable_time
20
  from DragMusic.utils.inline import help_pannel, private_panel, start_panel
21
- from config import BANNED_USERS, LOGGER_ID
22
- from strings import get_string # Import get_string at the top
 
23
 
24
  @app.on_message(filters.command(["start"]) & filters.private & ~BANNED_USERS)
25
- async def start_pm(client, message: Message):
 
26
  await add_served_user(message.from_user.id)
27
 
28
- language = await get_lang(message.chat.id) # Get language inside the function
29
- _ = get_string(language) # Get the translation object
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
  if len(message.text.split()) > 1:
32
  name = message.text.split(None, 1)[1]
33
- if name[0:4] == "help":
34
  keyboard = help_pannel(_)
35
- await message.reply_sticker("CAACAgEAAxkBAAJYdWZLJQqyG4fMdFFHFbTZDZPczqfnAAJUAgACODjZR-6jaMt58aQENQQ")
36
- return await message.reply_video(
37
- video="https://files.catbox.moe/l372oy.mp4",
38
- caption=_["help_1"].format(config.SUPPORT_CHAT),
 
 
 
 
 
 
39
  reply_markup=keyboard,
40
  )
41
- elif name[0:3] == "sud": # Example: Handling sudo
42
  await sudoers_list(client=client, message=message, _=_)
43
  if await is_on_off(2):
44
  await app.send_message(
45
- chat_id=LOGGER_ID,
46
- text=f"{message.from_user.mention} ᴊᴜsᴛ sᴛᴀʀᴛᴇᴅ ᴛʜᴇ ʙᴏᴛ ᴛᴏ ᴄʜᴇᴄᴋ <b>sᴜᴅᴏʟɪsᴛ</b>.\n\n<b>ᴜsᴇʀ ɪᴅ :</b> <code>{message.from_user.id}</code>\n<b>ᴜsᴇʀɴᴀᴍᴇ :</b> @{message.from_user.username}",
47
- message_thread_id=12327 # Send to the specific thread
 
48
  )
49
  return
50
- elif name[0:3] == "inf": # Example: Handling info
51
- m = await message.reply_text("🔎")
52
- query = (str(name)).replace("info_", "", 1)
 
53
  query = f"https://www.youtube.com/watch?v={query}"
54
  results = VideosSearch(query, limit=1)
55
- for result in (await results.next())["result"]:
56
- title = result["title"]
57
- duration = result["duration"]
58
- views = result["viewCount"]["short"]
59
- thumbnail = result["thumbnails"][0]["url"].split("?")[0]
60
- channellink = result["channel"]["link"]
61
- channel = result["channel"]["name"]
62
- link = result["link"]
63
- published = result["publishedTime"]
64
- searched_text = _["start_6"].format(
65
- title, duration, views, published, channellink, channel, app.mention
66
- )
67
- key = InlineKeyboardMarkup(
68
- [
69
- [
70
- InlineKeyboardButton(text=_["S_B_8"], url=link),
71
- InlineKeyboardButton(text=_["S_B_9"], url=config.SUPPORT_CHAT),
72
- ],
73
- ]
74
- )
75
- await m.delete()
76
- await app.send_photo(
77
- chat_id=message.chat.id,
78
- photo=thumbnail,
79
- caption=searched_text,
80
- reply_markup=key,
81
- )
82
- if await is_on_off(2):
83
- await app.send_message(
84
- chat_id=LOGGER_ID,
85
- text=f"{message.from_user.mention} ᴊᴜsᴛ sᴛᴀʀᴛᴇᴅ ᴛʜᴇ ʙᴏᴛ ᴛᴏ ᴄʜᴇᴄᴋ <b>ᴛʀᴀᴄᴋ ɪɴғᴏʀᴍᴀᴛɪᴏɴ</b>.\n\n<b>ᴜsᴇʀ ɪᴅ :</b> <code>{message.from_user.id}</code>\n<b>ᴜsᴇʀɴᴀᴍᴇ :</b> @{message.from_user.username}",
86
- message_thread_id=12327 # Send to the specific thread
87
- )
88
- return
89
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  else:
91
  out = private_panel(_)
92
- await message.reply_sticker("CAACAgEAAxkBAAJYdWZLJQqyG4fMdFFHFbTZDZPczqfnAAJUAgACODjZR-6jaMt58aQENQQ")
93
- await message.reply_video(
94
- video="https://telegra.ph/file/d2532972423ce5c4b632e.mp4",
95
- caption=_["start_2"].format(message.from_user.mention, app.mention),
 
 
 
 
 
 
96
  reply_markup=InlineKeyboardMarkup(out),
97
  )
98
  if await is_on_off(2):
99
  await app.send_message(
100
- chat_id=LOGGER_ID,
101
- text=f"{message.from_user.mention} ᴊᴜsᴛ sᴛᴀʀᴛᴇᴅ ᴛʜᴇ ʙᴏᴛ.\n\n<b>ᴜsᴇʀ ɪᴅ :</b> <code>{message.from_user.id}</code>\n<b>ᴜsᴇʀɴᴀᴍᴇ :</b> @{message.from_user.username}",
102
- message_thread_id=12327 # Send to the specific thread
 
103
  )
104
 
105
- @app.on_message(filters.command(["start"]) & filters.group & ~BANNED_USERS)
106
- async def start_gp(client, message: Message):
107
- language = await get_lang(message.chat.id) # Get language inside the function
108
- _ = get_string(language) # Get the translation object
109
 
 
 
 
110
  out = start_panel(_)
111
  uptime = int(time.time() - _boot_)
112
- await message.reply_video(
113
- video="https://telegra.ph/file/d2532972423ce5c4b632e.mp4",
114
- caption=_["start_1"].format(app.mention, get_readable_time(uptime)),
115
  reply_markup=InlineKeyboardMarkup(out),
116
  )
117
- await add_served_chat(message.chat.id)
118
- if await is_on_off(2):
119
- await app.send_message(
120
- chat_id=LOGGER_ID,
121
- text=f"{message.from_user.mention} ᴊᴜsᴛ sᴛᴀʀᴛᴇᴅ ᴛʜᴇ ʙᴏᴛ ɪɴ ᴀ ɢʀᴏᴜᴘ.\n\n<b>ᴜsᴇʀ ɪᴅ :</b> <code>{message.from_user.id}</code>\n<b>ᴜsᴇʀɴᴀᴍᴇ :</b> @{message.from_user.username}",
122
- message_thread_id=12327 # Send to the specific thread
123
- )
124
-
125
- @app.on_message(filters.new_chat_members, group=-1)
126
- async def welcome(client, message: Message):
127
- for member in message.new_chat_members:
128
- try:
129
- language = await get_lang(message.chat.id)
130
- _ = get_string(language)
131
- if await is_banned_user(member.id):
132
- await message.chat.ban_member(member.id)
133
- continue
134
- if member.id == app.id:
135
- if message.chat.type != ChatType.SUPERGROUP:
136
- await message.reply_text(_["start_4"])
137
- return await app.leave_chat(message.chat.id)
138
- if message.chat.id in await blacklisted_chats():
139
- await message.reply_text(
140
- _["start_5"].format(
141
- app.mention,
142
- f"https://t.me/{app.username}?start=sudolist",
143
- config.SUPPORT_CHAT,
144
- ),
145
- disable_web_page_preview=True,
146
- )
147
- return await app.leave_chat(message.chat.id)
148
-
149
- out = start_panel(_)
150
- await message.reply_video(
151
- video="https://telegra.ph/file/d2532972423ce5c4b632e.mp4",
152
- caption=_["start_3"].format(
153
- message.from_user.first_name,
154
- app.mention,
155
- message.chat.title,
156
- app.mention,
157
- ),
158
- reply_markup=InlineKeyboardMarkup(out),
159
- )
160
- await add_served_chat(message.chat.id)
161
- if await is_on_off(2):
162
- await app.send_message(
163
- chat_id=LOGGER_ID,
164
- text=f"{member.mention} ᴊᴜsᴛ ᴊᴏɪɴᴇᴅ ᴛʜᴇ ᴄʜᴀᴛ.\n\n<b>ᴜsᴇʀ ɪᴅ :</b> <code>{member.id}</code>\n<b>ᴜsᴇʀɴᴀᴍᴇ :</b> @{member.username}",
165
- message_thread_id=12327 # Send to the specific thread
166
- )
167
- await message.stop_propagation()
168
- except Exception as ex:
169
- print(ex)
 
1
+ import asyncio
2
  import time
3
  from pyrogram import filters
4
  from pyrogram.enums import ChatType
 
17
  is_banned_user,
18
  is_on_off,
19
  )
20
+ from DragMusic.utils.decorators.language import LanguageStart
21
  from DragMusic.utils.formatters import get_readable_time
22
  from DragMusic.utils.inline import help_pannel, private_panel, start_panel
23
+ from config import BANNED_USERS, OWNER_ID, OWNERR_ID
24
+ from strings import get_string
25
+
26
 
27
  @app.on_message(filters.command(["start"]) & filters.private & ~BANNED_USERS)
28
+ @LanguageStart
29
+ async def start_pm(client, message: Message, _):
30
  await add_served_user(message.from_user.id)
31
 
32
+ loading_1 = await message.reply_text("🔥")
33
+ await asyncio.sleep(0.3)
34
+
35
+ await loading_1.edit_text("<b>ʟᴏᴀᴅɪɴɢ</b>")
36
+ await asyncio.sleep(0.2)
37
+ await loading_1.edit_text("<b>ʟᴏᴀᴅɪɴɢ.</b>")
38
+ await asyncio.sleep(0.1)
39
+ await loading_1.edit_text("<b>ʟᴏᴀᴅɪɴɢ..</b>")
40
+ await asyncio.sleep(0.1)
41
+ await loading_1.edit_text("<b>ʟᴏᴀᴅɪɴɢ...</b>")
42
+ await asyncio.sleep(0.1)
43
+ await loading_1.delete()
44
+
45
+ started_msg = await message.reply_text(text="<b>sᴛᴀʀᴛᴇᴅ...</b>")
46
+ await asyncio.sleep(0.2)
47
+ await started_msg.delete()
48
 
49
  if len(message.text.split()) > 1:
50
  name = message.text.split(None, 1)[1]
51
+ if name.startswith("help"):
52
  keyboard = help_pannel(_)
53
+ keyboard.inline_keyboard.append([
54
+ InlineKeyboardButton("👑 Owner", url=f"tg://user?id={OWNERR_ID}")
55
+ ])
56
+ await message.reply_text(
57
+ text=(
58
+ f"<b>ʏᴏᴏ {message.from_user.mention}, <a href='https://files.catbox.moe/w8m75t.jpg' target='_blank'>🫧</a></b>\n\n"
59
+ f"<b>ɪ'ᴍ {app.mention}</b>\n"
60
+ f"<b>ɪ ᴄᴀɴ sᴛʀᴇᴀᴍ ʜɪɢʜ-ǫᴜᴀʟɪᴛʏ ᴍᴜsɪᴄ ᴀɴᴅ ᴠɪᴅᴇᴏs ᴇғғᴏʀᴛʟᴇssʟʏ ᴡɪᴛʜ ᴛʜɪs ᴀᴅᴠᴀɴᴄᴇᴅ ᴛᴇʟᴇɢʀᴀᴍ ʙᴏᴛ.</b>\n\n"
61
+ f"<b>sʜᴀʀᴇ ᴛʀᴀᴄᴋs ᴀɴᴅ ᴄʀᴇᴀᴛᴇ ᴛʜᴇ ᴘᴇʀғᴇᴄᴛ ᴀᴛᴍᴏsᴘʜᴇʀᴇ ғᴏʀ ᴇᴠᴇʀʏ ᴄʜᴀᴛ.</b>"
62
+ ),
63
  reply_markup=keyboard,
64
  )
65
+ if name.startswith("sud"):
66
  await sudoers_list(client=client, message=message, _=_)
67
  if await is_on_off(2):
68
  await app.send_message(
69
+ chat_id=config.LOGGER_ID,
70
+ text=f"{message.from_user.mention} ᴄʜᴇᴄᴋᴇᴅ <b>sᴜᴅᴏʟɪsᴛ</b>.\n\n"
71
+ f"<b>• ɪᴅᴇɴᴛɪғɪᴇʀ ⌯</b> <code>{message.from_user.id}</code>\n"
72
+ f"<b>• ʜᴀɴᴅʟᴇ ⌯</b> @{message.from_user.username}",
73
  )
74
  return
75
+
76
+ if name.startswith("inf"):
77
+ m = await message.reply_text("⚡️")
78
+ query = name.replace("info_", "", 1)
79
  query = f"https://www.youtube.com/watch?v={query}"
80
  results = VideosSearch(query, limit=1)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
 
82
+ next_result = await results.next()
83
+
84
+ if isinstance(next_result, dict) and "result" in next_result:
85
+ for result in next_result["result"]:
86
+ title = result["title"]
87
+ duration = result["duration"]
88
+ views = result["viewCount"]["short"]
89
+ thumbnail = result["thumbnails"][0]["url"].split("?")[0]
90
+ channellink = result["channel"]["link"]
91
+ channel = result["channel"]["name"]
92
+ link = result["link"]
93
+ published = result["publishedTime"]
94
+ searched_text = _["start_6"].format(
95
+ title, duration, views, published, channellink, channel
96
+ )
97
+ key = InlineKeyboardMarkup(
98
+ [[InlineKeyboardButton(text="ʏᴏᴜᴛᴜʙᴇ", url=link)]]
99
+ )
100
+ await m.delete()
101
+
102
+ await app.send_photo(
103
+ chat_id=message.chat.id,
104
+ photo=thumbnail,
105
+ caption=searched_text,
106
+ reply_markup=key,
107
+ )
108
+ if await is_on_off(2):
109
+ await app.send_message(
110
+ chat_id=config.LOGGER_ID,
111
+ text=f"<b>{message.from_user.mention} ᴄʜᴇᴄᴋᴇᴅ ᴛʀᴀᴄᴋ ɪɴғᴏ.</b>\n\n"
112
+ f"<b>• ɪᴅᴇɴᴛɪғɪᴇʀ ⌯</b> <code>{message.from_user.id}</code>\n"
113
+ f"<b>• ʜᴀɴᴅʟᴇ ⌯</b> @{message.from_user.username}",
114
+ )
115
+ else:
116
+ await m.edit_text("ғᴀɪʟᴇᴅ ᴛᴏ ʀᴇᴛʀɪᴇᴠᴇ ɪɴғᴏʀᴍᴀᴛɪᴏɴ.")
117
+ return
118
  else:
119
  out = private_panel(_)
120
+ out.append([
121
+ InlineKeyboardButton("👑 Owner", url=f"tg://user?id={OWNERR_ID}")
122
+ ])
123
+ await message.reply_text(
124
+ text=(
125
+ f"<b>ʏᴏᴏ {message.from_user.mention}, <a href='https://files.catbox.moe/w8m75t.jpg' target='_blank'>🫧</a></b>\n\n"
126
+ f"<b>ɪ'ᴍ {app.mention}</b>\n"
127
+ f"<b>ɪ ᴄᴀɴ sᴛʀᴇᴀᴍ ʜɪɢʜ-ǫᴜᴀʟɪᴛʏ ᴍᴜsɪᴄ ᴀɴᴅ ᴠɪᴅᴇᴏs ᴇғғᴏʀᴛʟᴇssʟʏ ᴡɪᴛʜ ᴛʜɪs ᴀᴅᴠᴀɴᴄᴇᴅ ᴛᴇʟᴇɢʀᴀᴍ ʙᴏᴛ.</b>\n\n"
128
+ f"<b>sʜᴀʀᴇ ᴛʀᴀᴄᴋs ᴀɴᴅ ᴄʀᴇᴀᴛᴇ ᴛʜᴇ ᴘᴇʀғᴇᴄᴛ ᴀᴛᴍᴏsᴘʜᴇʀᴇ ғᴏʀ ᴇᴠᴇʀʏ ᴄʜᴀᴛ.</b>"
129
+ ),
130
  reply_markup=InlineKeyboardMarkup(out),
131
  )
132
  if await is_on_off(2):
133
  await app.send_message(
134
+ chat_id=config.LOGGER_ID,
135
+ text=f"<b>{message.from_user.mention} sᴛᴀʀᴛᴇᴅ ᴛʜᴇ ʙᴏᴛ.</b>\n\n"
136
+ f"<b>• ɪᴅᴇɴᴛɪғɪᴇʀ ⌯</b> <code>{message.from_user.id}</code>\n"
137
+ f"<b>• ʜᴀɴᴅʟᴇ ⌯</b> @{message.from_user.username}",
138
  )
139
 
 
 
 
 
140
 
141
+ @app.on_message(filters.command(["start"]) & filters.group & ~BANNED_USERS)
142
+ @LanguageStart
143
+ async def start_gp(client, message: Message, _):
144
  out = start_panel(_)
145
  uptime = int(time.time() - _boot_)
146
+ await message.reply_text(
147
+ text=_["start_1"].format(app.mention, get_readable_time(uptime)),
 
148
  reply_markup=InlineKeyboardMarkup(out),
149
  )
150
+ await add_served_chat(message.chat.id)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
DragMusic/plugins/{misc → games}/love.py RENAMED
File without changes
DragMusic/plugins/{misc → games}/truth_dare.py RENAMED
File without changes
DragMusic/plugins/plugins/Gemini.txt DELETED
@@ -1,35 +0,0 @@
1
- import requests
2
- from MukeshAPI import api
3
- from pyrogram import filters
4
- from pyrogram.enums import ChatAction
5
- from DragMusic import app
6
-
7
-
8
- @app.on_message(filters.command(["gemini"]))
9
- async def gemini_handler(client, message):
10
- await app.send_chat_action(message.chat.id, ChatAction.TYPING)
11
- if (
12
- message.text.startswith(f"/gemini@{app.username}")
13
- and len(message.text.split(" ", 1)) > 1
14
- ):
15
- user_input = message.text.split(" ", 1)[1]
16
- elif message.reply_to_message and message.reply_to_message.text:
17
- user_input = message.reply_to_message.text
18
- else:
19
- if len(message.command) > 1:
20
- user_input = " ".join(message.command[1:])
21
- else:
22
- await message.reply_text("ᴇxᴀᴍᴘʟᴇ :- `/gemini hi?`")
23
- return
24
-
25
- try:
26
- response = api.gemini(user_input)
27
- await app.send_chat_action(message.chat.id, ChatAction.TYPING)
28
- x = response["results"]
29
- if x:
30
- await message.reply_text(x, quote=True)
31
- else:
32
- await message.reply_text("sᴏʀʀʏ sɪʀ! ᴘʟᴇᴀsᴇ Tʀʏ ᴀɢᴀɪɴ")
33
- except requests.exceptions.RequestException as e:
34
- pass
35
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
DragMusic/plugins/plugins/ask.py DELETED
@@ -1,34 +0,0 @@
1
- from pyrogram import filters
2
- from pyrogram.enums import ChatAction, ParseMode
3
- from DragMusic import app
4
- import aiohttp
5
-
6
- # Function to fetch data from Akeno API
7
- async def fetch_data_from_akeno(question):
8
- url = "https://web-3ypd.onrender.com/api/cohere" # API endpoint
9
- params = {"query": question} # Pass query as a parameter
10
-
11
- async with aiohttp.ClientSession() as session:
12
- async with session.get(url, params=params) as response:
13
- data = await response.json()
14
- return data.get("results", "No response received.") # Extract the answer
15
-
16
- # Command handler for /ask
17
- @app.on_message(filters.command("ask"))
18
- async def ask_command(client, message):
19
- chat_id = message.chat.id
20
- user_id = message.from_user.id
21
-
22
- # Indicate typing action
23
- await app.send_chat_action(chat_id, ChatAction.TYPING)
24
-
25
- if len(message.command) < 2:
26
- await message.reply_text("Exᴀᴍᴘʟᴇ ᴜsᴀɢᴇ: /ask [your question]")
27
- return
28
-
29
- question = " ".join(message.command[1:]) # Get the question from command arguments
30
- response = await fetch_data_from_akeno(question)
31
-
32
- formatted_response = f"<blockquote>{response}</blockquote>"
33
-
34
- await message.reply_text(formatted_response, parse_mode=ParseMode.HTML)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
DragMusic/plugins/plugins/brave.py DELETED
@@ -1,42 +0,0 @@
1
- import requests
2
- from pyrogram import filters
3
- from pyrogram.enums import ChatAction
4
- from DragMusic import app
5
-
6
- # Add your Brave Search API key (if required)
7
- BRAVE_SEARCH_API_KEY = "your_brave_api_key" # Leave empty if no key is needed
8
-
9
- @app.on_message(filters.command(["search", "brave"]))
10
- async def brave_search_handler(client, message):
11
- chat_id = message.chat.id
12
-
13
- # Indicate typing action
14
- await app.send_chat_action(chat_id, ChatAction.TYPING)
15
-
16
- # Retrieve the search query from the message
17
- if len(message.command) > 1:
18
- search_query = " ".join(message.command[1:])
19
- else:
20
- await message.reply_text("Exᴀᴍᴘʟᴇ ᴜsᴀɢᴇ: /sᴇᴀʀᴄʜ Qᴜᴇsᴛɪᴏɴ ᴏʀ Tᴏᴘɪᴄ.")
21
- return
22
-
23
- try:
24
- # Brave Search API Endpoint
25
- search_url = f"https://search.brave.com/api/v1/search?q={search_query}&source=web"
26
-
27
- # Make the request to Brave's API
28
- response = requests.get(search_url, headers={"Authorization": f"Bearer {BRAVE_SEARCH_API_KEY}"})
29
- response.raise_for_status()
30
- results = response.json()
31
-
32
- # Extract and format the results
33
- if "web" in results and len(results["web"]["results"]) > 0:
34
- reply_text = "**Top Search Results:**\n"
35
- for index, result in enumerate(results["web"]["results"][:5], 1): # Limit to 5 results
36
- reply_text += f"{index}. [{result['title']}]({result['url']})\n"
37
- await message.reply_text(reply_text, disable_web_page_preview=True)
38
- else:
39
- await message.reply_text("No results found for your query. Please try with a different keyword.")
40
-
41
- except Exception as e:
42
- await message.reply_text(f"» Error: {str(e)}. Please try again later.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
DragMusic/plugins/plugins/getimg.py DELETED
@@ -1,59 +0,0 @@
1
- import requests
2
- from pyrogram import filters
3
- from pyrogram.enums import ChatAction
4
- from DragMusic import app
5
-
6
- # Getimg API key (replace with your actual key)
7
- GETIMG_API_KEY = "key-ICLT6PNtwcDA5PKI7DmuKMXrueoKcDybWuHrXX1o9V8eszHCAOabBpvq2d7ZWewTa5A50ntiXEkDcMo1ewE5exp6LxuOAAr"
8
- GETIMG_API_URL = "https://api.getimg.ai/v1/essential-v2/text-to-image"
9
-
10
- # Function to generate an image using Getimg API
11
- def generate_image(prompt):
12
- headers = {
13
- "Authorization": f"Bearer {GETIMG_API_KEY}",
14
- "Content-Type": "application/json"
15
- }
16
-
17
- # Request payload to send to Getimg API
18
- data = {
19
- "prompt": prompt,
20
- "style": "artistic", # You can change the style based on the available options
21
- "width": 512,
22
- "height": 512
23
- }
24
-
25
- # Make the API request
26
- response = requests.post(GETIMG_API_URL, json=data, headers=headers)
27
-
28
- if response.status_code == 200:
29
- # Extract image URL from the response
30
- image_url = response.json().get("image_url")
31
- return image_url
32
- else:
33
- return None
34
-
35
- # Command handler to generate an image
36
- @app.on_message(filters.command("generate_image"))
37
- async def generate_image_handler(client, message):
38
- chat_id = message.chat.id
39
- await app.send_chat_action(chat_id, ChatAction.TYPING)
40
-
41
- # Get the prompt from the user input
42
- if len(message.command) > 1:
43
- prompt = " ".join(message.command[1:])
44
- else:
45
- await message.reply_text("Usage: /generate_image <your prompt>")
46
- return
47
-
48
- try:
49
- # Call the function to generate the image via Getimg API
50
- image_url = generate_image(prompt)
51
-
52
- if image_url:
53
- # Send the generated image URL back to the user
54
- await message.reply_photo(photo=image_url, caption=f"Generated image for prompt: {prompt}")
55
- else:
56
- await message.reply_text("Sorry, I couldn't generate the image. Please try again later.")
57
- except Exception as e:
58
- await message.reply_text(f"Error: {str(e)}. Please try again later.")
59
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
DragMusic/plugins/plugins/gpt.py DELETED
@@ -1,74 +0,0 @@
1
- import openai
2
- from pyrogram import filters
3
- from pyrogram.enums import ChatAction
4
- from DragMusic import app
5
-
6
- # Set your OpenAI API key
7
- openai.api_key = "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"
8
- # To store conversations (per user basis, using a dictionary for simplicity)
9
- user_conversations = {}
10
-
11
- @app.on_message(filters.command(["chatgpt", "gpt"])) # Add support for "gpt"
12
- async def ask_handler(client, message):
13
- user_id = message.from_user.id
14
- chat_id = message.chat.id
15
-
16
- # Indicate typing action
17
- await app.send_chat_action(chat_id, ChatAction.TYPING)
18
-
19
- # Retrieve the user's input
20
- if len(message.command) > 1:
21
- user_input = " ".join(message.command[1:])
22
- elif message.reply_to_message and message.reply_to_message.text:
23
- user_input = message.reply_to_message.text
24
- else:
25
- await message.reply_text("Exᴀᴍᴘʟᴇ ᴜsᴀɢᴇ: /ᴄʜᴀᴛɢᴘᴛ Hᴏᴡ ᴅᴏᴇs ʀᴇᴄᴜʀsɪᴏɴ ᴡᴏʀᴋ?")
26
- return
27
-
28
- # Initialize the conversation history if it's a new user
29
- if user_id not in user_conversations:
30
- user_conversations[user_id] = [
31
- {"role": "system", "content": "You are a helpful assistant who can answer any questions."}
32
- ]
33
-
34
- # Append the user's input to the conversation
35
- user_conversations[user_id].append({"role": "user", "content": user_input})
36
-
37
- try:
38
- # Call the OpenAI API with the full conversation history
39
- response = openai.ChatCompletion.create(
40
- model="gpt-3.5-turbo", # Use "gpt-4" if needed
41
- messages=user_conversations[user_id]
42
- )
43
-
44
- # Get the assistant's response
45
- assistant_response = response["choices"][0]["message"]["content"].strip()
46
-
47
- # Append the assistant's response to the conversation history
48
- user_conversations[user_id].append({"role": "assistant", "content": assistant_response})
49
-
50
- # Send the assistant's response to the user
51
- await message.reply_text(assistant_response, quote=True)
52
-
53
- except Exception as e:
54
- await message.reply_text(f"**» Error:** {str(e)}. Please try again later.")
55
-
56
- @app.on_message(filters.command(["reset"]))
57
- async def reset_handler(client, message):
58
- user_id = message.from_user.id
59
- if user_id in user_conversations:
60
- user_conversations.pop(user_id)
61
- await message.reply_text("Cᴏɴᴠᴇʀsᴀᴛɪᴏɴ ᴄᴏɴᴛᴇxᴛ ʜᴀs ʙᴇᴇɴ ʀᴇsᴇᴛ.")
62
-
63
- @app.on_message(filters.command(["setrole"]))
64
- async def set_role_handler(client, message):
65
- user_id = message.from_user.id
66
- if len(message.command) > 1:
67
- role_content = " ".join(message.command[1:])
68
- user_conversations[user_id] = [
69
- {"role": "system", "content": role_content}
70
- ]
71
- await message.reply_text(f"Sʏsᴛᴇᴍ ʀᴏʟᴇ sᴇᴛ ᴛᴏ: {role_content}")
72
- else:
73
- await message.reply_text("Exᴀᴍᴘʟᴇ ᴜsᴀɢᴇ: /sᴇᴛʀᴏʟᴇ Yᴏᴜ ᴀʀᴇ ᴀ ғʀɪᴇɴᴅʟʏ AI.")
74
-