video-stream/driver/utils.py

177 lines
5.0 KiB
Python
Raw Permalink Normal View History

2022-01-31 12:03:49 +00:00
import asyncio
2022-02-13 06:43:13 +00:00
import os
2022-02-16 13:19:44 +00:00
from driver.core import bot, calls, user
2022-02-09 15:05:47 +00:00
from driver.database.dbqueue import remove_active_chat
from driver.queues import (
QUEUE,
clear_queue,
get_queue,
pop_an_item,
2022-02-12 11:44:51 +00:00
clean_trash,
)
2022-02-09 02:59:38 +00:00
2022-01-31 12:03:49 +00:00
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from pytgcalls.types import Update
from pytgcalls.types.input_stream import AudioPiped, AudioVideoPiped
from pytgcalls.types.input_stream.quality import (
HighQualityAudio,
HighQualityVideo,
LowQualityVideo,
MediumQualityVideo,
)
from pytgcalls.types.stream import StreamAudioEnded
2022-01-31 12:47:38 +00:00
2022-01-31 12:03:49 +00:00
keyboard = InlineKeyboardMarkup(
[
[
2022-02-07 16:11:55 +00:00
InlineKeyboardButton(text="• Mᴇɴ", callback_data="stream_menu_panel"),
2022-02-08 00:03:32 +00:00
InlineKeyboardButton(text="• Cʟsᴇ", callback_data="set_close"),
2022-01-31 12:03:49 +00:00
]
]
)
async def skip_current_song(chat_id):
if chat_id in QUEUE:
chat_queue = get_queue(chat_id)
if "t.me" in chat_queue[0][2]:
clean_trash(chat_queue[0][1], chat_id)
2022-01-31 12:03:49 +00:00
if len(chat_queue) == 1:
2022-02-07 17:03:55 +00:00
await calls.leave_group_call(chat_id)
2022-02-09 02:59:38 +00:00
await remove_active_chat(chat_id)
2022-01-31 12:03:49 +00:00
clear_queue(chat_id)
return 1
else:
try:
songname = chat_queue[1][0]
url = chat_queue[1][1]
link = chat_queue[1][2]
type = chat_queue[1][3]
Q = chat_queue[1][4]
2022-02-21 01:24:52 +00:00
if type == "music":
2022-02-07 16:11:55 +00:00
await calls.change_stream(
2022-01-31 12:03:49 +00:00
chat_id,
AudioPiped(
url,
2022-01-31 12:47:38 +00:00
HighQualityAudio(),
2022-01-31 12:03:49 +00:00
),
)
2022-02-21 01:24:52 +00:00
elif type == "video":
2022-01-31 12:03:49 +00:00
if Q == 720:
hm = HighQualityVideo()
elif Q == 480:
hm = MediumQualityVideo()
elif Q == 360:
hm = LowQualityVideo()
2022-02-07 16:11:55 +00:00
await calls.change_stream(
2022-01-31 12:47:38 +00:00
chat_id,
AudioVideoPiped(
url,
HighQualityAudio(),
hm
)
2022-01-31 12:03:49 +00:00
)
pop_an_item(chat_id)
return [songname, link, type]
2022-02-21 09:04:59 +00:00
except BaseException as error:
print(error)
2022-02-07 16:11:55 +00:00
await calls.leave_group_call(chat_id)
2022-02-09 02:59:38 +00:00
await remove_active_chat(chat_id)
2022-01-31 12:03:49 +00:00
clear_queue(chat_id)
return 2
else:
return 0
async def skip_item(chat_id, h):
if chat_id in QUEUE:
chat_queue = get_queue(chat_id)
try:
x = int(h)
songname = chat_queue[x][0]
chat_queue.pop(x)
return songname
except Exception as e:
print(e)
return 0
else:
return 0
2022-02-07 17:00:51 +00:00
@calls.on_kicked()
2022-01-31 12:03:49 +00:00
async def kicked_handler(_, chat_id: int):
if chat_id in QUEUE:
2022-02-09 02:59:38 +00:00
await remove_active_chat(chat_id)
2022-01-31 12:03:49 +00:00
clear_queue(chat_id)
2022-02-07 17:00:51 +00:00
@calls.on_closed_voice_chat()
2022-01-31 12:03:49 +00:00
async def closed_voice_chat_handler(_, chat_id: int):
if chat_id in QUEUE:
2022-02-09 02:59:38 +00:00
await remove_active_chat(chat_id)
2022-01-31 12:03:49 +00:00
clear_queue(chat_id)
2022-02-07 17:00:51 +00:00
@calls.on_left()
2022-01-31 12:03:49 +00:00
async def left_handler(_, chat_id: int):
if chat_id in QUEUE:
2022-02-09 02:59:38 +00:00
await remove_active_chat(chat_id)
2022-01-31 12:03:49 +00:00
clear_queue(chat_id)
2022-02-07 17:00:51 +00:00
@calls.on_stream_end()
2022-01-31 12:03:49 +00:00
async def stream_end_handler(_, u: Update):
if isinstance(u, StreamAudioEnded):
chat_id = u.chat_id
print(chat_id)
op = await skip_current_song(chat_id)
if op == 1:
2022-02-27 15:02:47 +00:00
await remove_active_chat(chat_id)
return
2022-01-31 12:03:49 +00:00
elif op == 2:
await bot.send_message(
chat_id,
2022-03-02 13:01:45 +00:00
"❌ 出现错误\n\n» **已经清空** __队列__ 并且退出了 __语音聊天__",
2022-01-31 12:03:49 +00:00
)
else:
await bot.send_message(
chat_id,
2022-03-02 13:01:45 +00:00
f"💡 **播放下一首**\n\n"
f"🗂 **名称:** [{op[0]}]({op[1]}) | `{op[2].replace('Audio', '音乐').replace('Video', '视频')}`\n"
f"💭 **会话:** `{chat_id}`",
2022-01-31 12:03:49 +00:00
disable_web_page_preview=True,
reply_markup=keyboard,
)
else:
pass
async def bash(cmd):
process = await asyncio.create_subprocess_shell(
cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
stdout, stderr = await process.communicate()
err = stderr.decode().strip()
out = stdout.decode().strip()
return out, err
2022-02-13 06:43:13 +00:00
def remove_if_exists(path):
if os.path.exists(path):
os.remove(path)
2022-02-16 13:19:44 +00:00
async def from_tg_get_msg(url: str):
data = url.split('/')[-2:]
if len(data) == 2:
cid = data[0]
if cid.isdigit():
cid = int('-100' + cid)
mid = int(data[1])
return await user.get_messages(cid, message_ids=mid)
return None