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
54
55
56
57
58
59
60
|
import discord
from discord.ext import commands
import asyncio
from yt_dlp import VideosSearch
class PingCommands(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.Cog.command()
async def vc(self, ctx):
# join voice channel
pass
@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]
title = video['title']
url = video['link']
# Get direct audio stream URL
proc = await asyncio.create_subprocess_exec(
"yt-dlp", "-f", "bestaudio", "-g", url,
stdout=asyncio.subprocess.PIPE
)
stdout, _ = await proc.communicate()
stream_url = stdout.decode().strip()
ffmpeg_options = {
"before_options": "-probesize 32k -analyzeduration 0 -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}")
|