mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-23 19:44:20 +00:00
Add play embed on discord
This commit is contained in:
parent
0ad680a97e
commit
31ca3e4556
2 changed files with 31 additions and 4 deletions
|
@ -1,6 +1,8 @@
|
|||
import typing
|
||||
import logging as _logging
|
||||
import discord
|
||||
import os
|
||||
import datetime
|
||||
from youtube_dl import YoutubeDL
|
||||
|
||||
log = _logging.getLogger(__name__)
|
||||
|
@ -139,6 +141,18 @@ class YtdlInfo:
|
|||
def download(self, outtmpl="%(title)s-%(id)s.%(ext)s", **ytdl_args) -> YtdlFile:
|
||||
return YtdlFile(self, outtmpl, **ytdl_args)
|
||||
|
||||
def to_discord_embed(self) -> discord.Embed:
|
||||
embed = discord.Embed(title=self.title,
|
||||
colour=discord.Colour(0xcc0000),
|
||||
url=self.webpage_url)
|
||||
embed.set_thumbnail(
|
||||
url=self.thumbnail)
|
||||
embed.set_author(name=self.uploader, url=self.uploader_url)
|
||||
embed.set_footer(text="Fonte: youtube-dl", icon_url="https://i.imgur.com/TSvSRYn.png")
|
||||
embed.add_field(name="Duration", value=str(self.duration), inline=True)
|
||||
embed.add_field(name="Published on", value=self.upload_date, inline=True)
|
||||
return embed
|
||||
|
||||
def __repr__(self):
|
||||
if self.title:
|
||||
return f"<YtdlInfo of {self.title}>"
|
||||
|
|
|
@ -2,6 +2,7 @@ import typing
|
|||
import asyncio
|
||||
import youtube_dl
|
||||
import ffmpeg
|
||||
import pickle
|
||||
from ..utils import Command, Call, NetworkHandler, asyncify
|
||||
from ..network import Request, ResponseSuccess
|
||||
from ..error import TooManyFoundError, NoneFoundError
|
||||
|
@ -38,7 +39,14 @@ class PlayNH(NetworkHandler):
|
|||
else:
|
||||
audio_sources = await asyncify(RoyalPCMAudio.create_from_ytsearch, data["url"])
|
||||
await bot.add_to_music_data(audio_sources, guild)
|
||||
return ResponseSuccess({"title_list": [source.rpf.info.title for source in audio_sources]})
|
||||
# Create response dictionary
|
||||
response = {
|
||||
"videos": [{
|
||||
"title": source.rpf.info.title,
|
||||
"discord_embed_pickle": str(pickle.dumps(source.rpf.info.to_discord_embed()))
|
||||
} for source in audio_sources]
|
||||
}
|
||||
return ResponseSuccess(response)
|
||||
|
||||
|
||||
async def notify_on_timeout(call: Call, url: str, time: float, repeat: bool = False):
|
||||
|
@ -59,7 +67,7 @@ class PlayCommand(Command):
|
|||
|
||||
@classmethod
|
||||
async def common(cls, call: Call):
|
||||
guild_name, url = call.args.match(r"(?:\[(.+)])?\s*(.+)")
|
||||
guild_name, url = call.args.match(r"(?:\[(.+)])?\s*<?(.+)>?")
|
||||
download_task = loop.create_task(call.net_request(Request("music_play", {"url": url, "guild_name": guild_name}), "discord"))
|
||||
notify_task = loop.create_task(notify_on_timeout(call, url, time=30, repeat=True))
|
||||
try:
|
||||
|
@ -101,5 +109,10 @@ class PlayCommand(Command):
|
|||
raise
|
||||
finally:
|
||||
notify_task.cancel()
|
||||
for title in data["title_list"]:
|
||||
await call.reply(f"⬇️ Download di [i]{title}[/i] completato.")
|
||||
for video in data["videos"]:
|
||||
if call.interface_name == "discord":
|
||||
# This is one of the unsafest things ever
|
||||
embed = pickle.loads(eval(video["discord_embed_pickle"]))
|
||||
await call.channel.send(content="✅ Aggiunto alla coda:", embed=embed)
|
||||
else:
|
||||
await call.reply(f"✅ [i]{video['title']}[/i] scaricato e aggiunto alla coda.")
|
||||
|
|
Loading…
Reference in a new issue