|
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 = {} |
|
|
|
|
|
@app.on_callback_query(filters.regex("ADMIN") & ~BANNED_USERS) |
|
@languageCB |
|
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()) |
|
|