aboutsummaryrefslogtreecommitdiffstats
path: root/cogs/music/play.py
blob: 1eafbcac67b2b653b19dc37bc1d205750d24427d (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
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))