1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
import discord
from discord.ext import commands
import asyncio
from youtubesearchpython import VideosSearch
class Play(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.slash_command(name="grajcuj", description="grajcuj melodyje")
async def play(self, ctx, *, search: str):
await ctx.defer()
if not (ctx.author.voice and ctx.author.voice.channel):
await ctx.followup.send("nie jesteś w kanale głosowym")
return
channel = ctx.author.voice.channel
if ctx.voice_client is not None:
vc = ctx.voice_client
await vc.move_to(channel)
else:
vc = await channel.connect()
videos_search = VideosSearch(search, limit=1)
result = videos_search.result()
if not result['result']:
await ctx.followup.send("nie znaleziono wideo dla twojego wyszukiwania.", ephemeral=True)
return
video = result['result'][0]
video_id = video['id']
title = video['title']
url = video['link']
proc = await asyncio.create_subprocess_exec(
"yt-dlp", "-f", "bestaudio", "-g", "--no-cache-dir", url,
stdout=asyncio.subprocess.PIPE
)
stdout, _ = await proc.communicate()
stream_url = stdout.decode().strip()
FFMPEG_OPTIONS = {
'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5',
'options': '-vn'
}
audio = discord.FFmpegPCMAudio(
stream_url,
before_options=FFMPEG_OPTIONS['before_options'],
options=FFMPEG_OPTIONS['options']
)
if not vc.is_playing():
vc.play(audio)
await ctx.followup.send(f"gra: {title}")
else:
await ctx.followup.send(f"dodano do koleyjki: {title}")
def setup(bot):
bot.add_cog(Play(bot))
|