• Не работает очередь вопроизведения музыки у дискорд бота, что делать?

    @Oh_noo2195 Автор вопроса
    Vindicar, ((((((((((((

    Ошибка:

    Traceback (most recent call last):

    File "/app/main.py", line 53, in play_song

    await voice_channel.connect()

    AttributeError: 'NoneType' object has no attribute 'connect'

    FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
    YDL_OPTIONS = {'format':"bestaudio", 'noplaylist': True, 'default_search': 'auto', 'forceduration': True, 'quiet': True}
    songs = asyncio.Queue()
    play_next_song = asyncio.Event()
    play_song_is_running = False
    
    def loop():
       asyncio.get_running_loop()
    
    async def play_song():
        url = await songs.get() 
        global play_song_is_running
        global vc
        global voice_channel
        global voice_channel
        voice_channel = None
        vc = None 
        play_song_is_running = True   
        if vc is None:
            await voice_channel.connect()
        else:
            await vc.move_to(voice_channel)
        vc.stop()
        while True:
            play_song.clear()
            current = await songs.get()
            current.start()
            await play_next_song.wait()
            voice_channel = ctx.author.voice.channel   
    
        with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
            info = ydl.extract_info(url, download=False)
            if 'entries' in info:
                url2 = info['entries'][0]["formats"][0]
            elif 'formats' in info:
                url2 = info["formats"][0]
            url = info["webpage_url"]
            stream_url = url2["url"]
            source = await discord.FFmpegOpusAudio.from_probe(stream_url, **FFMPEG_OPTIONS)
            vc.play(source, after = loop)
    
    @bot.command(name='play')
    async def play(ctx, *, url: str):  
        if ctx.author.voice is None:
            embed = discord.Embed(title=f'подключись к каналу, ебло', color=discord.Color.red())
            bot_msg = await ctx.send(embed=embed)
            await asyncio.sleep(5)
            await bot_msg.delete()
        global play_song_is_running
        if not play_song_is_running:
            run_play_song()
            await songs.put(url)
            vc = ctx.voice_client
            voice_channel = ctx.author.voice.channel 
    def run_play_song(err = None):
        asyncio.get_event_loop().create_task(play_song())
  • Не работает очередь вопроизведения музыки у дискорд бота, что делать?

    @Oh_noo2195 Автор вопроса
    Vindicar, ох, я понимаю что достал вас, но думаю что это финальный вопрос.
    Сможете помочь?
    Task exception was never retrieved

    future: exception=NameError("name 'vc' is not defined")>

    Traceback (most recent call last):

    File "/app/main.py", line 63, in play_song

    if vc is None:

    NameError: name 'vc' is not defined

    FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
    YDL_OPTIONS = {'format':"bestaudio", 'noplaylist': True, 'default_search': 'auto', 'forceduration': True, 'quiet': True}
    songs = asyncio.Queue()
    play_next_song = asyncio.Event()
    play_song_is_running = False
    
    def loop():
       asyncio.get_running_loop()
    
    async def play_song():
        url = await songs.get()  
        global play_song_is_running
        global vc
        play_song_is_running = True   
        if vc is None:
            await voice_channel.connect()
        else:
            await vc.move_to(voice_channel)
        vc.stop()
        while True:
            play_song.clear()
            current = await songs.get()
            current.start()
            await play_next_song.wait()
            voice_channel = ctx.author.voice.channel   
    
        with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
            info = ydl.extract_info(url, download=False)
            if 'entries' in info:
                url2 = info['entries'][0]["formats"][0]
            elif 'formats' in info:
                url2 = info["formats"][0]
            url = info["webpage_url"]
            stream_url = url2["url"]
            source = await discord.FFmpegOpusAudio.from_probe(stream_url, **FFMPEG_OPTIONS)
            vc.play(source, after = loop)
    
    @bot.command(name='play')
    async def play(ctx, *, url: str): 
        run_play_song() 
        if ctx.author.voice is None:
            embed = discord.Embed(title=f'подключись к каналу, ебло', color=discord.Color.red())
            bot_msg = await ctx.send(embed=embed)
            await asyncio.sleep(5)
            await bot_msg.delete()
        global play_song_is_running
        if not play_song_is_running:
            run_play_song()
            await songs.put(url)
            vc = ctx.voice_client
    
    
    def run_play_song(err = None):
        asyncio.get_event_loop().create_task(play_song())
  • Не работает очередь вопроизведения музыки у дискорд бота, что делать?

    @Oh_noo2195 Автор вопроса
    Vindicar, Новая ошибка

    File "/app/main.py", line 72, in play

    run_play_song()

    File "/app/main.py", line 85, in run_play_song

    asyncio.get_event_loop().create_task(play_song())

    TypeError: play_song() missing 1 required positional argument: 'ctx'

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last):

    File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/bot.py", line 902, in invoke

    await ctx.command.invoke(ctx)

    File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/core.py", line 864, in invoke

    await injected(*ctx.args, **ctx.kwargs)

    File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/core.py", line 94, in wrapped

    raise CommandInvokeError(exc) from exc

    discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: play_song() missing 1 required positional argument: 'ctx'

    FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
    YDL_OPTIONS = {'format':"bestaudio", 'noplaylist': True, 'default_search': 'auto', 'forceduration': True, 'quiet': True}
    songs = asyncio.Queue()
    play_next_song = asyncio.Event()
    play_song_is_running = False
    
    def loop():
       asyncio.get_running_loop()
    
    async def play_song(ctx):
        url = await songs.get()  
        global play_song_is_running
        play_song_is_running = True   
        if ctx.voice_client is None:
            await voice_channel.connect()
        else:
            await ctx.voice_client.move_to(voice_channel)
        ctx.voice_client.stop()
        while True:
            play_song.clear()
            current = await songs.get()
            current.start()
            await play_next_song.wait()
            voice_channel = ctx.author.voice.channel   
        vc = ctx.voice_client
        with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
            info = ydl.extract_info(url, download=False)
            if 'entries' in info:
                url2 = info['entries'][0]["formats"][0]
            elif 'formats' in info:
                url2 = info["formats"][0]
            url = info["webpage_url"]
            stream_url = url2["url"]
            source = await discord.FFmpegOpusAudio.from_probe(stream_url, **FFMPEG_OPTIONS)
            vc.play(source, after = loop)
    
    @bot.command(name='play')
    async def play(ctx, *, url: str): 
        run_play_song()  
        if ctx.author.voice is None:
            embed = discord.Embed(title=f'подключись к каналу, ебло', color=discord.Color.red())
            bot_msg = await ctx.send(embed=embed)
            await asyncio.sleep(5)
            await bot_msg.delete()
        global play_song_is_running
        if not play_song_is_running:
            run_play_song()
            await songs.put(url)
    
    
    def run_play_song(err = None):
        asyncio.get_event_loop().create_task(play_song())
  • Не работает очередь вопроизведения музыки у дискорд бота, что делать?

    @Oh_noo2195 Автор вопроса
    Vindicar, я попробовал сделать так, как вы объяснили,но я получаю вот такую ошибку. Извиняюсь если напрягаю вопросами.
    File "/app/main.py", line 80, in run_play_song
    asyncio.get_running_loop(play_song())
    TypeError: _asyncio.get_running_loop() takes no arguments (1 given)
    The above exception was the direct cause of the following exception:
    Traceback (most recent call last):
    File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/bot.py", line 902, in invoke
    await ctx.command.invoke(ctx)
    File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/core.py", line 864, in invoke
    await injected(*ctx.args, **ctx.kwargs)
    File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
    discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: _asyncio.get_running_loop() takes no arguments (1 given)

    FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
    YDL_OPTIONS = {'format':"bestaudio", 'noplaylist': True, 'default_search': 'auto', 'forceduration': True, 'quiet': True}
    songs = asyncio.Queue()
    play_next_song = asyncio.Event()
    play_song_is_running = False
    
    def loop():
        asyncio.get_event_loop().create_task(play_song())
    
    async def play_song():
        url = await songs.get()  
        if ctx.voice_client is None:
            await voice_channel.connect()
        else:
            await ctx.voice_client.move_to(voice_channel)
        ctx.voice_client.stop()
        while True:
            global play_song_is_running
            play_song_is_running = True   
            voice_channel = ctx.author.voice.channel   
        vc = ctx.voice_client
        with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
            info = ydl.extract_info(url, download=False)
            if 'entries' in info:
                url2 = info['entries'][0]["formats"][0]
            elif 'formats' in info:
                url2 = info["formats"][0]
            url = info["webpage_url"]
            stream_url = url2["url"]
            source = await discord.FFmpegOpusAudio.from_probe(stream_url, **FFMPEG_OPTIONS)
            vc.play(source, after = loop)
    
    @bot.command(name='play')
    async def play(ctx, *, url: str): 
        run_play_song()  
        if ctx.author.voice is None:
            embed = discord.Embed(title=f'подключись к каналу, ебло', color=discord.Color.red())
            bot_msg = await ctx.send(embed=embed)
            await asyncio.sleep(5)
            await bot_msg.delete()
        global play_song_is_running
        if not play_song_is_running:
            run_play_song()
            await songs.put(url)
    
    def run_play_song(err = None):
        asyncio.get_running_loop(play_song())
  • Не работает очередь вопроизведения музыки у дискорд бота, что делать?

    @Oh_noo2195 Автор вопроса
    Vindicar, Я чувствую себя сейчас очень глупым, потому что я понимаю что сделал все неправильно.
    Прошу не закидайте тапками если все очень плохо(((((
    Если все очень плохо, хотя-бы посмеётесь

    FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
    YDL_OPTIONS = {'format':"bestaudio", 'noplaylist': True, 'default_search': 'auto', 'forceduration': True, 'quiet': True}
    songs = asyncio.Queue()
    play_next_song = asyncio.Event()
    
    def get():
        asyncio.get_running_loop(play_song())
    
    async def play_song():     
        if ctx.voice_client is None:
            await voice_channel.connect()
        else:
            await ctx.voice_client.move_to(voice_channel)
        ctx.voice_client.stop()
        while True:
            play_next_song.clear()
            current = await songs.get()
            current.start()
            await play_next_song.wait()
        voice_channel = ctx.author.voice.channel   
        vc = ctx.voice_client
        with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
            info = ydl.extract_info(url, download=False)
            if 'entries' in info:
                url2 = info['entries'][0]["formats"][0]
            elif 'formats' in info:
                url2 = info["formats"][0]
            url = info["webpage_url"]
            stream_url = url2["url"]
            source = await discord.FFmpegOpusAudio.from_probe(stream_url, **FFMPEG_OPTIONS)
            vc.play(source, after = loop)
    
    @bot.command(name='play')
    async def play(ctx, *, url: str):
        await get()   
        if ctx.author.voice is None:
            embed = discord.Embed(title=f'подключись к каналу, ебло', color=discord.Color.red())
            bot_msg = await ctx.send(embed=embed)
            await asyncio.sleep(5)
            await bot_msg.delete()
            await songs.put(play_song)
    def loop():
        client.loop.create_task(play_song(ctx))
  • Не работает очередь вопроизведения музыки у дискорд бота, что делать?

    @Oh_noo2195 Автор вопроса
    Ох, спасибо что нашли ошибку, но можно наводку как сделать так чтобы это заработало, я просто уже в тупике... (
  • Как сделать очередь воспроизведения песен у дискорд бота?

    @Oh_noo2195 Автор вопроса
    alfss, Ох, извините за глупые вопросы, но я не совсем понимаю как это использовать с моей командой play
  • Как сделать очередь воспроизведения песен у дискорд бота?

    @Oh_noo2195 Автор вопроса
    alfss, Спасибо, а можно на примере коротенького кода, как это реализовать?
  • Как реализовать поиск музыки по названию, а не по ссылке?

    @Oh_noo2195 Автор вопроса
    shurshur, В этом и проблема, не понимаю как исправить ошибку. Я буду вам очень благодарен если подскажите как это исправить. :>
  • Как реализовать поиск музыки по названию, а не по ссылке?

    @Oh_noo2195 Автор вопроса
    С этим разобрался, но появилась новая ошибка

    2021-10-27T22:53:59.645316+00:00 app[worker.1]: [download] Downloading playlist: пирокинезис

    2021-10-27T22:53:59.645465+00:00 app[worker.1]: [youtube:search] query "пирокинезис": Downloading page 1

    2021-10-27T22:54:00.046311+00:00 app[worker.1]: [youtube:search] playlist пирокинезис: Downloading 1 videos

    2021-10-27T22:54:00.046324+00:00 app[worker.1]: [download] Downloading video 1 of 1

    2021-10-27T22:54:00.046469+00:00 app[worker.1]: [youtube] BZY0SXeW720: Downloading webpage

    2021-10-27T22:54:00.445992+00:00 app[worker.1]: [youtube] Downloading just video BZY0SXeW720 because of --no-playlist

    2021-10-27T22:54:00.448235+00:00 app[worker.1]: [youtube] BZY0SXeW720: Downloading player 9a0939d3

    2021-10-27T22:54:01.986183+00:00 app[worker.1]: [download] Finished downloading playlist: пирокинезис

    2021-10-27T22:54:01.986922+00:00 app[worker.1]: Ignoring exception in command play:

    2021-10-27T22:54:01.987758+00:00 app[worker.1]: Traceback (most recent call last):

    2021-10-27T22:54:01.987776+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/core.py", line 85, in wrapped

    2021-10-27T22:54:01.987777+00:00 app[worker.1]: ret = await coro(*args, **kwargs)

    2021-10-27T22:54:01.987785+00:00 app[worker.1]: File "/app/main.py", line 56, in play

    2021-10-27T22:54:01.987785+00:00 app[worker.1]: url2 = info['formats'][0]['url']

    2021-10-27T22:54:01.987803+00:00 app[worker.1]: KeyError: 'formats'

    2021-10-27T22:54:01.987814+00:00 app[worker.1]:

    2021-10-27T22:54:01.987814+00:00 app[worker.1]: The above exception was the direct cause of the following exception:

    2021-10-27T22:54:01.987815+00:00 app[worker.1]:

    2021-10-27T22:54:01.987822+00:00 app[worker.1]: Traceback (most recent call last):

    2021-10-27T22:54:01.987839+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/bot.py", line 902, in invoke

    2021-10-27T22:54:01.987840+00:00 app[worker.1]: await ctx.command.invoke(ctx)

    2021-10-27T22:54:01.987848+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/core.py", line 864, in invoke

    2021-10-27T22:54:01.987849+00:00 app[worker.1]: await injected(*ctx.args, **ctx.kwargs)

    2021-10-27T22:54:01.987857+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/core.py", line 94, in wrapped

    2021-10-27T22:54:01.987857+00:00 app[worker.1]: raise CommandInvokeError(exc) from exc

    2021-10-27T22:54:01.987869+00:00 app[worker.1]: discord.ext.commands.errors.CommandInvokeError: Command raised an exception: KeyError: 'formats'
  • Как сделать так чтобы бот не реагировал на сообщения, в которых есть часть слова на которое он должен реагировать?

    @Oh_noo2195 Автор вопроса
    Привет, я уже решил эту проблему так

    @bot.listen('on_message')
    async def on_message(message):
        if message.author == client.user:
            return
    
        pattern = re.compile(r'\bпривет\b')
    
        if pattern.match(message.content.lower()) is not None:
            await message.channel.send(f"{message.author.mention} привет!")
  • Я добавил bot.event и команды перестали работать, что делать?

    @Oh_noo2195 Автор вопроса
    Спасибо, уже починил через bot.listen
  • Как вызвать в главном файле команду которая находится в отдельном в файле?

    @Oh_noo2195 Автор вопроса
    Дмитрий Кузнецов, Python(дискорд бот), я вроде в тегах указал, думал больше не надо.
  • При написание музбота появилась ошибка discord.ext.commands.errors.MissingRequiredArgument: url is a required argument that is missing. что делать?

    @Oh_noo2195 Автор вопроса
    Влад Григорьев, вот

    2021-10-12T13:05:37.405973+00:00 app[worker.1]: Ignoring exception in command play:

    2021-10-12T13:05:37.407508+00:00 app[worker.1]: Traceback (most recent call last):

    2021-10-12T13:05:37.407561+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/bot.py", line 902, in invoke

    2021-10-12T13:05:37.407562+00:00 app[worker.1]: await ctx.command.invoke(ctx)

    2021-10-12T13:05:37.407583+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/core.py", line 856, in invoke

    2021-10-12T13:05:37.407583+00:00 app[worker.1]: await self.prepare(ctx)

    2021-10-12T13:05:37.407598+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/core.py", line 790, in prepare

    2021-10-12T13:05:37.407599+00:00 app[worker.1]: await self._parse_arguments(ctx)

    2021-10-12T13:05:37.407613+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/core.py", line 697, in _parse_arguments

    2021-10-12T13:05:37.407614+00:00 app[worker.1]: transformed = await self.transform(ctx, param)

    2021-10-12T13:05:37.407628+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/site-packages/discord/ext/commands/core.py", line 542, in transform

    2021-10-12T13:05:37.407628+00:00 app[worker.1]: raise MissingRequiredArgument(param)

    2021-10-12T13:05:37.407671+00:00 app[worker.1]: discord.ext.commands.errors.MissingRequiredArgument: url is a required argument that is missing.