| 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() |
|
|