Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import asyncio
- import disnake
- from disnake.ext import commands,tasks
- from yt_dlp import YoutubeDL
- FFMPEG_OPTIONS = {
- 'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5',
- 'options': '-vn'
- }
- class Music(commands.Cog):
- def __init__(self, bot: commands.Bot):
- self.bot = bot
- self.YDL_OPTIONS = {
- "format": "bestaudio/best",
- "outtmpl": "%(extractor)s-%(id)s-%(title)s.%(ext)s",
- "restrictfilenames": True,
- "noplaylist": True,
- "nocheckcertificate": True,
- "ignoreerrors": False,
- "logtostderr": False,
- "quiet": True,
- "no_warnings": True,
- "default_search": "auto",
- "source_address": "0.0.0.0", # bind to ipv4 since ipv6 addresses cause issues sometimes
- }
- self.FFMPEG_OPTIONS = {
- 'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5',
- 'options': '-vn'
- }
- self.vc = None
- self.owner = None
- self.playlisturl = []
- def URLconvert(self,url):
- with YoutubeDL(self.YDL_OPTIONS) as ydl:
- if 'https://www.youtube.com' not in url:
- info = ydl.extract_info('ytsearch:%s' % url,download=False)['entries'][0]
- else:
- info = ydl.extract_info(url, download=False)
- return (info['url'],info['original_url'])
- def after(self,err):
- #if any(self.playlisturl) == False:
- CheckSound = tasks.loop(seconds=1,count=60)(self.SoundLoop)
- CheckSound.start()
- if True:
- URL = self.playlisturl.pop(0)
- link = self.URLconvert(url=URL)[0]
- print(link, '\n')
- FFmpeg = disnake.FFmpegPCMAudio(link, **self.FFMPEG_OPTIONS,)
- FFmpeg.read()
- self.vc.play(FFmpeg,after=self.after)
- async def SoundLoop(self):
- #if any(self.playlisturl) == True:
- # print(2)
- # return
- #if self.SoundLoop.current_loop == self.SoundLoop.count - 1:
- # print(1)
- print(1)
- @commands.slash_command(name='play', description='')
- async def play(self, inter: disnake.ApplicationCommandInteraction,
- url: str = commands.Param(name='url-or-name',description='Введите название трека или его URL-адрес(YouTube).')):
- try:
- channelX = inter.author.voice.channel
- except:
- embed_0 = disnake.Embed(title="error",
- description="Чтобы использовать данную команду, нужно находится в голосовом канале.",
- colour=0xCB2C31, )
- await inter.send(embed=embed_0, ephemeral=True)
- return
- if channelX.id == 892458918775758858:
- embed_0 = disnake.Embed(title="error",
- description="Перейдите в другой голосовой канал.",
- colour=0xCB2C31, )
- await inter.send(embed=embed_0, ephemeral=True)
- # проверка на заказчика
- if self.owner != None:
- if self.owner != inter.author.id:
- embed_0 = disnake.Embed(title="error",
- description="Бота уже заказал другой пользователь.",
- colour=0xCB2C31, )
- await inter.send(embed=embed_0, ephemeral=True)
- return
- try:
- if (self.vc.is_playing() is True) or (self.vc.is_paused() is True):
- self.vc.stop()
- except:
- pass
- try:
- self.vc = await channelX.connect()
- except:
- pass
- link = self.URLconvert(url=url)[0]
- print(link,'\n')
- FFmpeg = disnake.FFmpegPCMAudio(link,**self.FFMPEG_OPTIONS)
- FFmpeg.read()
- self.vc.play(FFmpeg,after=self.after)
- @commands.slash_command(name='stop', description='')
- async def stop(self,inter: disnake.ApplicationCommandInteraction):
- # проверка на заказчика
- if self.owner != None:
- if self.owner != inter.author.id:
- embed_0 = disnake.Embed(title="error",
- description="Саундтрек может прервать только тот, кто его начал.",
- colour=0xCB2C31, )
- await inter.send(embed=embed_0, ephemeral=True)
- return
- try:
- self.vc.stop()
- except:
- pass
- await self.vc.disconnect()
- self.owner = None
- self.playlisturl = []
- @commands.slash_command(name='playlist', description='Добавить или удалить трек из плейлиста.')
- async def playlist(self, inter: disnake.ApplicationCommandInteraction,
- action: str = commands.Param(default='add',name='action',choices=['add','remove'],description='Выберите действие.'),
- url: str = commands.Param(name='url-or-name',description='Введите название трека или его URL-адрес(YouTube).')):
- if action == 'add':
- self.playlisturl.append(self.URLconvert(url=url)[1])
- def setup(bot: commands.Bot):
- bot.add_cog(Music(bot))
Advertisement
Add Comment
Please, Sign In to add comment