Spaces:
Paused
Paused
import asyncio | |
from pyrogram import filters | |
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup | |
from DragMusic import YouTube, app | |
from DragMusic.core.call import Drag | |
from DragMusic.misc import SUDOERS, db | |
from DragMusic.utils.database import ( | |
get_active_chats, | |
get_lang, | |
get_upvote_count, | |
is_active_chat, | |
is_music_playing, | |
is_nonadmin_chat, | |
music_off, | |
music_on, | |
set_loop, | |
) | |
from DragMusic.utils.decorators.language import languageCB | |
from DragMusic.utils.formatters import seconds_to_min | |
from DragMusic.utils.inline import close_markup, stream_markup, stream_markup_timer | |
from DragMusic.utils.stream.autoclear import auto_clean | |
from DragMusic.utils.thumbnails import gen_thumb | |
from config import ( | |
BANNED_USERS, | |
SUPPORT_CHAT, | |
SOUNCLOUD_IMG_URL, | |
STREAM_IMG_URL, | |
TELEGRAM_AUDIO_URL, | |
TELEGRAM_VIDEO_URL, | |
adminlist, | |
confirmer, | |
votemode, | |
) | |
from strings import get_string | |
checker = {} | |
upvoters = {} | |
async def del_back_playlist(client, CallbackQuery, _): | |
callback_data = CallbackQuery.data.strip() | |
callback_request = callback_data.split(None, 1)[1] | |
command, chat = callback_request.split("|") | |
if "_" in str(chat): | |
bet = chat.split("_") | |
chat = bet[0] | |
counter = bet[1] | |
chat_id = int(chat) | |
if not await is_active_chat(chat_id): | |
return await CallbackQuery.answer(_["general_5"], show_alert=True) | |
mention = CallbackQuery.from_user.mention | |
if command == "UpVote": | |
if chat_id not in votemode: | |
votemode[chat_id] = {} | |
if chat_id not in upvoters: | |
upvoters[chat_id] = {} | |
voters = (upvoters[chat_id]).get(CallbackQuery.message.id) | |
if not voters: | |
upvoters[chat_id][CallbackQuery.message.id] = [] | |
vote = (votemode[chat_id]).get(CallbackQuery.message.id) | |
if not vote: | |
votemode[chat_id][CallbackQuery.message.id] = 0 | |
if CallbackQuery.from_user.id in upvoters[chat_id][CallbackQuery.message.id]: | |
(upvoters[chat_id][CallbackQuery.message.id]).remove( | |
CallbackQuery.from_user.id | |
) | |
votemode[chat_id][CallbackQuery.message.id] -= 1 | |
else: | |
(upvoters[chat_id][CallbackQuery.message.id]).append( | |
CallbackQuery.from_user.id | |
) | |
votemode[chat_id][CallbackQuery.message.id] += 1 | |
upvote = await get_upvote_count(chat_id) | |
get_upvotes = int(votemode[chat_id][CallbackQuery.message.id]) | |
if get_upvotes >= upvote: | |
votemode[chat_id][CallbackQuery.message.id] = upvote | |
try: | |
exists = confirmer[chat_id][CallbackQuery.message.id] | |
current = db[chat_id][0] | |
except: | |
return await CallbackQuery.edit_message_text(f"ғᴀɪʟᴇᴅ.") | |
try: | |
if current["vidid"] != exists["vidid"]: | |
return await CallbackQuery.edit_message.text(_["admin_35"]) | |
if current["file"] != exists["file"]: | |
return await CallbackQuery.edit_message.text(_["admin_35"]) | |
except: | |
return await CallbackQuery.edit_message_text(_["admin_36"]) | |
try: | |
await CallbackQuery.edit_message_text(_["admin_37"].format(upvote)) | |
except: | |
pass | |
command = counter | |
mention = "ᴜᴘᴠᴏᴛᴇs" | |
else: | |
if ( | |
CallbackQuery.from_user.id | |
in upvoters[chat_id][CallbackQuery.message.id] | |
): | |
await CallbackQuery.answer(_["admin_38"], show_alert=True) | |
else: | |
await CallbackQuery.answer(_["admin_39"], show_alert=True) | |
upl = InlineKeyboardMarkup( | |
[ | |
[ | |
InlineKeyboardButton( | |
text=f"👍 {get_upvotes}", | |
callback_data=f"ADMIN UpVote|{chat_id}_{counter}", | |
) | |
] | |
] | |
) | |
await CallbackQuery.answer(_["admin_40"], show_alert=True) | |
return await CallbackQuery.edit_message_reply_markup(reply_markup=upl) | |
else: | |
is_non_admin = await is_nonadmin_chat(CallbackQuery.message.chat.id) | |
if not is_non_admin: | |
if CallbackQuery.from_user.id not in SUDOERS: | |
admins = adminlist.get(CallbackQuery.message.chat.id) | |
if not admins: | |
return await CallbackQuery.answer(_["admin_13"], show_alert=True) | |
else: | |
if CallbackQuery.from_user.id not in admins: | |
return await CallbackQuery.answer( | |
_["admin_14"], show_alert=True | |
) | |
if command == "Pause": | |
if not await is_music_playing(chat_id): | |
return await CallbackQuery.answer(_["admin_1"], show_alert=True) | |
await CallbackQuery.answer() | |
await music_off(chat_id) | |
await Drag.pause_stream(chat_id) | |
await CallbackQuery.message.reply_text( | |
_["admin_2"].format(mention), reply_markup=close_markup(_) | |
) | |
elif command == "Resume": | |
if await is_music_playing(chat_id): | |
return await CallbackQuery.answer(_["admin_3"], show_alert=True) | |
await CallbackQuery.answer() | |
await music_on(chat_id) | |
await Drag.resume_stream(chat_id) | |
await CallbackQuery.message.reply_text( | |
_["admin_4"].format(mention), reply_markup=close_markup(_) | |
) | |
elif command == "Stop" or command == "End": | |
await CallbackQuery.answer() | |
await Drag.stop_stream(chat_id) | |
await set_loop(chat_id, 0) | |
await CallbackQuery.message.reply_text( | |
_["admin_5"].format(mention), reply_markup=close_markup(_) | |
) | |
await CallbackQuery.message.delete() | |
elif command == "Skip" or command == "Replay": | |
check = db.get(chat_id) | |
if command == "Skip": | |
txt = f"➻ sᴛʀᴇᴀᴍ sᴋɪᴩᴩᴇᴅ 🎄\n│ \n└ʙʏ : {mention} 🥀" | |
popped = None | |
try: | |
popped = check.pop(0) | |
if popped: | |
await auto_clean(popped) | |
if not check: | |
await CallbackQuery.edit_message_text( | |
f"➻ sᴛʀᴇᴀᴍ sᴋɪᴩᴩᴇᴅ 🎄\n│ \n└ʙʏ : {mention} 🥀" | |
) | |
await CallbackQuery.message.reply_text( | |
text=_["admin_6"].format( | |
mention, CallbackQuery.message.chat.title | |
), | |
reply_markup=close_markup(_), | |
) | |
try: | |
return await Drag.stop_stream(chat_id) | |
except: | |
return | |
except: | |
try: | |
await CallbackQuery.edit_message_text( | |
f"➻ sᴛʀᴇᴀᴍ sᴋɪᴩᴩᴇᴅ 🎄\n│ \n└ʙʏ : {mention} 🥀" | |
) | |
await CallbackQuery.message.reply_text( | |
text=_["admin_6"].format( | |
mention, CallbackQuery.message.chat.title | |
), | |
reply_markup=close_markup(_), | |
) | |
return await Drag.stop_stream(chat_id) | |
except: | |
return | |
else: | |
txt = f"➻ sᴛʀᴇᴀᴍ ʀᴇ-ᴘʟᴀʏᴇᴅ 🎄\n│ \n└ʙʏ : {mention} 🥀" | |
await CallbackQuery.answer() | |
queued = check[0]["file"] | |
title = (check[0]["title"]).title() | |
user = check[0]["by"] | |
duration = check[0]["dur"] | |
streamtype = check[0]["streamtype"] | |
videoid = check[0]["vidid"] | |
status = True if str(streamtype) == "video" else None | |
db[chat_id][0]["played"] = 0 | |
exis = (check[0]).get("old_dur") | |
if exis: | |
db[chat_id][0]["dur"] = exis | |
db[chat_id][0]["seconds"] = check[0]["old_second"] | |
db[chat_id][0]["speed_path"] = None | |
db[chat_id][0]["speed"] = 1.0 | |
if "live_" in queued: | |
n, link = await YouTube.video(videoid, True) | |
if n == 0: | |
return await CallbackQuery.message.reply_text( | |
text=_["admin_7"].format(title), | |
reply_markup=close_markup(_), | |
) | |
try: | |
image = await YouTube.thumbnail(videoid, True) | |
except: | |
image = None | |
try: | |
await Drag.skip_stream(chat_id, link, video=status, image=image) | |
except: | |
return await CallbackQuery.message.reply_text(_["call_6"]) | |
button = stream_markup(_, chat_id) | |
img = await gen_thumb(videoid) | |
run = await CallbackQuery.message.reply_photo( | |
photo=img, | |
caption=_["stream_1"].format( | |
f"https://t.me/{app.username}?start=info_{videoid}", | |
title[:23], | |
duration, | |
user, | |
), | |
reply_markup=InlineKeyboardMarkup(button), | |
) | |
db[chat_id][0]["mystic"] = run | |
db[chat_id][0]["markup"] = "tg" | |
await CallbackQuery.edit_message_text(txt, reply_markup=close_markup(_)) | |
elif "vid_" in queued: | |
mystic = await CallbackQuery.message.reply_text( | |
_["call_7"], disable_web_page_preview=True | |
) | |
try: | |
file_path, direct = await YouTube.download( | |
videoid, | |
mystic, | |
videoid=True, | |
video=status, | |
) | |
except: | |
return await mystic.edit_text(_["call_6"]) | |
try: | |
image = await YouTube.thumbnail(videoid, True) | |
except: | |
image = None | |
try: | |
await Drag.skip_stream(chat_id, file_path, video=status, image=image) | |
except: | |
return await mystic.edit_text(_["call_6"]) | |
button = stream_markup(_, chat_id) | |
img = await gen_thumb(videoid) | |
run = await CallbackQuery.message.reply_photo( | |
photo=img, | |
caption=_["stream_1"].format( | |
f"https://t.me/{app.username}?start=info_{videoid}", | |
title[:23], | |
duration, | |
user, | |
), | |
reply_markup=InlineKeyboardMarkup(button), | |
) | |
db[chat_id][0]["mystic"] = run | |
db[chat_id][0]["markup"] = "stream" | |
await CallbackQuery.edit_message_text(txt, reply_markup=close_markup(_)) | |
await mystic.delete() | |
elif "index_" in queued: | |
try: | |
await Drag.skip_stream(chat_id, videoid, video=status) | |
except: | |
return await CallbackQuery.message.reply_text(_["call_6"]) | |
button = stream_markup(_, chat_id) | |
run = await CallbackQuery.message.reply_photo( | |
photo=STREAM_IMG_URL, | |
caption=_["stream_2"].format(user), | |
reply_markup=InlineKeyboardMarkup(button), | |
) | |
db[chat_id][0]["mystic"] = run | |
db[chat_id][0]["markup"] = "tg" | |
await CallbackQuery.edit_message_text(txt, reply_markup=close_markup(_)) | |
else: | |
if videoid == "telegram": | |
image = None | |
elif videoid == "soundcloud": | |
image = None | |
else: | |
try: | |
image = await YouTube.thumbnail(videoid, True) | |
except: | |
image = None | |
try: | |
await Drag.skip_stream(chat_id, queued, video=status, image=image) | |
except: | |
return await CallbackQuery.message.reply_text(_["call_6"]) | |
if videoid == "telegram": | |
button = stream_markup(_, chat_id) | |
run = await CallbackQuery.message.reply_photo( | |
photo=TELEGRAM_AUDIO_URL | |
if str(streamtype) == "audio" | |
else TELEGRAM_VIDEO_URL, | |
caption=_["stream_1"].format( | |
SUPPORT_CHAT, title[:23], duration, user | |
), | |
reply_markup=InlineKeyboardMarkup(button), | |
) | |
db[chat_id][0]["mystic"] = run | |
db[chat_id][0]["markup"] = "tg" | |
elif videoid == "soundcloud": | |
button = stream_markup(_, chat_id) | |
run = await CallbackQuery.message.reply_photo( | |
photo=SOUNCLOUD_IMG_URL | |
if str(streamtype) == "audio" | |
else TELEGRAM_VIDEO_URL, | |
caption=_["stream_1"].format( | |
SUPPORT_CHAT, title[:23], duration, user | |
), | |
reply_markup=InlineKeyboardMarkup(button), | |
) | |
db[chat_id][0]["mystic"] = run | |
db[chat_id][0]["markup"] = "tg" | |
else: | |
button = stream_markup(_, chat_id) | |
img = await gen_thumb(videoid) | |
run = await CallbackQuery.message.reply_photo( | |
photo=img, | |
caption=_["stream_1"].format( | |
f"https://t.me/{app.username}?start=info_{videoid}", | |
title[:23], | |
duration, | |
user, | |
), | |
reply_markup=InlineKeyboardMarkup(button), | |
) | |
db[chat_id][0]["mystic"] = run | |
db[chat_id][0]["markup"] = "stream" | |
await CallbackQuery.edit_message_text(txt, reply_markup=close_markup(_)) | |
async def markup_timer(): | |
while not await asyncio.sleep(7): | |
active_chats = await get_active_chats() | |
for chat_id in active_chats: | |
try: | |
if not await is_music_playing(chat_id): | |
continue | |
playing = db.get(chat_id) | |
if not playing: | |
continue | |
duration_seconds = int(playing[0]["seconds"]) | |
if duration_seconds == 0: | |
continue | |
try: | |
mystic = playing[0]["mystic"] | |
except: | |
continue | |
try: | |
check = checker[chat_id][mystic.id] | |
if check is False: | |
continue | |
except: | |
pass | |
try: | |
language = await get_lang(chat_id) | |
_ = get_string(language) | |
except: | |
_ = get_string("en") | |
try: | |
buttons = stream_markup_timer( | |
_, | |
chat_id, | |
seconds_to_min(playing[0]["played"]), | |
playing[0]["dur"], | |
) | |
await mystic.edit_reply_markup( | |
reply_markup=InlineKeyboardMarkup(buttons) | |
) | |
except: | |
continue | |
except: | |
continue | |
asyncio.create_task(markup_timer()) | |