aboutsummaryrefslogtreecommitdiffstats
path: root/cogs/ping_commands.py
blob: beb968503245d00f845ec8d2c3723b2c9001b126 (plain) (blame)
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}")