taslim19
Initial commit
80287e2
import os
from random import randint
from typing import Union
from pyrogram.types import InlineKeyboardMarkup
import config
from Devine import Carbon, YouTube, app
from Devine.core.call import Anony
from Devine.misc import db
from Devine.utils.database import add_active_video_chat, is_active_chat
from Devine.utils.exceptions import AssistantErr
from Devine.utils.inline import aq_markup, close_markup, stream_markup
from Devine.utils.pastebin import AnonyBin
from Devine.utils.stream.queue import put_queue, put_queue_index
from Devine.utils.thumbnails import get_thumb
async def stream(
_,
mystic,
user_id,
result,
chat_id,
user_name,
original_chat_id,
video: Union[bool, str] = None,
streamtype: Union[bool, str] = None,
spotify: Union[bool, str] = None,
forceplay: Union[bool, str] = None,
):
if not result:
return
if forceplay:
await Anony.force_stop_stream(chat_id)
if streamtype == "playlist":
msg = f"{_['play_19']}\n\n"
count = 0
for search in result:
if int(count) == config.PLAYLIST_FETCH_LIMIT:
continue
try:
(
title,
duration_min,
duration_sec,
thumbnail,
vidid,
) = await YouTube.details(search, False if spotify else True)
except:
continue
if str(duration_min) == "None":
continue
if duration_sec > config.DURATION_LIMIT:
continue
if await is_active_chat(chat_id):
await put_queue(
chat_id,
original_chat_id,
f"vid_{vidid}",
title,
duration_min,
user_name,
vidid,
user_id,
"video" if video else "audio",
)
position = len(db.get(chat_id)) - 1
count += 1
msg += f"{count}. {title[:70]}\n"
msg += f"{_['play_20']} {position}\n\n"
else:
if not forceplay:
db[chat_id] = []
status = True if video else None
try:
file_path, direct = await YouTube.download(
vidid, mystic, video=status, videoid=True
)
except:
raise AssistantErr(_["play_14"])
await Anony.join_call(
chat_id,
original_chat_id,
file_path,
video=status,
image=thumbnail,
)
await put_queue(
chat_id,
original_chat_id,
file_path if direct else f"vid_{vidid}",
title,
duration_min,
user_name,
vidid,
user_id,
"video" if video else "audio",
forceplay=forceplay,
)
img = await get_thumb(vidid)
button = stream_markup(_, chat_id)
run = await app.send_photo(
original_chat_id,
photo=img,
caption=_["stream_1"].format(
f"https://t.me/{app.username}?start=info_{vidid}",
title[:23],
duration_min,
user_name,
),
reply_markup=InlineKeyboardMarkup(button),
)
db[chat_id][0]["mystic"] = run
db[chat_id][0]["markup"] = "stream"
if count == 0:
return
else:
link = await AnonyBin(msg)
lines = msg.count("\n")
if lines >= 17:
car = os.linesep.join(msg.split(os.linesep)[:17])
else:
car = msg
carbon = await Carbon.generate(car, randint(100, 10000000))
upl = close_markup(_)
return await app.send_photo(
original_chat_id,
photo=carbon,
caption=_["play_21"].format(position, link),
reply_markup=upl,
)
elif streamtype == "youtube":
link = result["link"]
vidid = result["vidid"]
title = (result["title"]).title()
duration_min = result["duration_min"]
thumbnail = result["thumb"]
status = True if video else None
try:
file_path, direct = await YouTube.download(
vidid, mystic, videoid=True, video=status
)
except:
raise AssistantErr(_["play_14"])
if await is_active_chat(chat_id):
await put_queue(
chat_id,
original_chat_id,
file_path if direct else f"vid_{vidid}",
title,
duration_min,
user_name,
vidid,
user_id,
"video" if video else "audio",
)
position = len(db.get(chat_id)) - 1
button = aq_markup(_, chat_id)
await app.send_message(
chat_id=original_chat_id,
text=_["queue_4"].format(position, title[:27], duration_min, user_name),
reply_markup=InlineKeyboardMarkup(button),
)
else:
if not forceplay:
db[chat_id] = []
await Anony.join_call(
chat_id,
original_chat_id,
file_path,
video=status,
image=thumbnail,
)
await put_queue(
chat_id,
original_chat_id,
file_path if direct else f"vid_{vidid}",
title,
duration_min,
user_name,
vidid,
user_id,
"video" if video else "audio",
forceplay=forceplay,
)
img = await get_thumb(vidid)
button = stream_markup(_, chat_id)
run = await app.send_photo(
original_chat_id,
photo=img,
caption=_["stream_1"].format(
f"https://t.me/{app.username}?start=info_{vidid}",
title[:23],
duration_min,
user_name,
),
reply_markup=InlineKeyboardMarkup(button),
)
db[chat_id][0]["mystic"] = run
db[chat_id][0]["markup"] = "stream"
elif streamtype == "soundcloud":
file_path = result["filepath"]
title = result["title"]
duration_min = result["duration_min"]
if await is_active_chat(chat_id):
await put_queue(
chat_id,
original_chat_id,
file_path,
title,
duration_min,
user_name,
streamtype,
user_id,
"audio",
)
position = len(db.get(chat_id)) - 1
button = aq_markup(_, chat_id)
await app.send_message(
chat_id=original_chat_id,
text=_["queue_4"].format(position, title[:27], duration_min, user_name),
reply_markup=InlineKeyboardMarkup(button),
)
else:
if not forceplay:
db[chat_id] = []
await Anony.join_call(chat_id, original_chat_id, file_path, video=None)
await put_queue(
chat_id,
original_chat_id,
file_path,
title,
duration_min,
user_name,
streamtype,
user_id,
"audio",
forceplay=forceplay,
)
button = stream_markup(_, chat_id)
run = await app.send_photo(
original_chat_id,
photo=config.SOUNCLOUD_IMG_URL,
caption=_["stream_1"].format(
config.SUPPORT_CHAT, title[:23], duration_min, user_name
),
reply_markup=InlineKeyboardMarkup(button),
)
db[chat_id][0]["mystic"] = run
db[chat_id][0]["markup"] = "tg"
elif streamtype == "telegram":
file_path = result["path"]
link = result["link"]
title = (result["title"]).title()
duration_min = result["dur"]
status = True if video else None
if await is_active_chat(chat_id):
await put_queue(
chat_id,
original_chat_id,
file_path,
title,
duration_min,
user_name,
streamtype,
user_id,
"video" if video else "audio",
)
position = len(db.get(chat_id)) - 1
button = aq_markup(_, chat_id)
await app.send_message(
chat_id=original_chat_id,
text=_["queue_4"].format(position, title[:27], duration_min, user_name),
reply_markup=InlineKeyboardMarkup(button),
)
else:
if not forceplay:
db[chat_id] = []
await Anony.join_call(chat_id, original_chat_id, file_path, video=status)
await put_queue(
chat_id,
original_chat_id,
file_path,
title,
duration_min,
user_name,
streamtype,
user_id,
"video" if video else "audio",
forceplay=forceplay,
)
if video:
await add_active_video_chat(chat_id)
button = stream_markup(_, chat_id)
run = await app.send_photo(
original_chat_id,
photo=config.TELEGRAM_VIDEO_URL if video else config.TELEGRAM_AUDIO_URL,
caption=_["stream_1"].format(link, title[:23], duration_min, user_name),
reply_markup=InlineKeyboardMarkup(button),
)
db[chat_id][0]["mystic"] = run
db[chat_id][0]["markup"] = "tg"
elif streamtype == "live":
link = result["link"]
vidid = result["vidid"]
title = (result["title"]).title()
thumbnail = result["thumb"]
duration_min = "Live Track"
status = True if video else None
if await is_active_chat(chat_id):
await put_queue(
chat_id,
original_chat_id,
f"live_{vidid}",
title,
duration_min,
user_name,
vidid,
user_id,
"video" if video else "audio",
)
position = len(db.get(chat_id)) - 1
button = aq_markup(_, chat_id)
await app.send_message(
chat_id=original_chat_id,
text=_["queue_4"].format(position, title[:27], duration_min, user_name),
reply_markup=InlineKeyboardMarkup(button),
)
else:
if not forceplay:
db[chat_id] = []
n, file_path = await YouTube.video(link)
if n == 0:
raise AssistantErr(_["str_3"])
await Anony.join_call(
chat_id,
original_chat_id,
file_path,
video=status,
image=thumbnail if thumbnail else None,
)
await put_queue(
chat_id,
original_chat_id,
f"live_{vidid}",
title,
duration_min,
user_name,
vidid,
user_id,
"video" if video else "audio",
forceplay=forceplay,
)
img = await get_thumb(vidid)
button = stream_markup(_, chat_id)
run = await app.send_photo(
original_chat_id,
photo=img,
caption=_["stream_1"].format(
f"https://t.me/{app.username}?start=info_{vidid}",
title[:23],
duration_min,
user_name,
),
reply_markup=InlineKeyboardMarkup(button),
)
db[chat_id][0]["mystic"] = run
db[chat_id][0]["markup"] = "tg"
elif streamtype == "index":
link = result
title = "ɪɴᴅᴇx ᴏʀ ᴍ3ᴜ8 ʟɪɴᴋ"
duration_min = "00:00"
if await is_active_chat(chat_id):
await put_queue_index(
chat_id,
original_chat_id,
"index_url",
title,
duration_min,
user_name,
link,
"video" if video else "audio",
)
position = len(db.get(chat_id)) - 1
button = aq_markup(_, chat_id)
await mystic.edit_text(
text=_["queue_4"].format(position, title[:27], duration_min, user_name),
reply_markup=InlineKeyboardMarkup(button),
)
else:
if not forceplay:
db[chat_id] = []
await Anony.join_call(
chat_id,
original_chat_id,
link,
video=True if video else None,
)
await put_queue_index(
chat_id,
original_chat_id,
"index_url",
title,
duration_min,
user_name,
link,
"video" if video else "audio",
forceplay=forceplay,
)
button = stream_markup(_, chat_id)
run = await app.send_photo(
original_chat_id,
photo=config.STREAM_IMG_URL,
caption=_["stream_2"].format(user_name),
reply_markup=InlineKeyboardMarkup(button),
)
db[chat_id][0]["mystic"] = run
db[chat_id][0]["markup"] = "tg"
await mystic.delete()