@St1IIx

Discord Бот выдает ИНОГДА ошибку при попытке воспроизвести музыку в голосовом канале,зачастую когда файл весит более 4мб.Python.Что делть?

Иногда при воспроизведении музыки в голосовом канале,поялвяется ошибка. Причем значение "Thread" не обязательно 9, иногда 29. Зачастую происходит, если скачиваемый файл весит более 4 Мб.

import discord
    from discord.ext import commands
    import youtube_dl
    import os
    import sys
    import urllib.parse
    import urllib.request
    import re
    
    client = commands.Bot(command_prefix="!")
    
    
    sys.setrecursionlimit(4000)
    
    print(sys.getrecursionlimit())
    
    @client.event
    async def on_ready():
        channel = client.get_channel(912429157370167316)
        await channel.send(f"Бот успешно запущен")
        print('Bot ready')
    
    @client.command()
    @commands.cooldown(1, 5.00, commands.BucketType.guild)
    async def yt(msg, *, search):
        """Запрос на поиск песни через YoyTube"""
        query_string = urllib.parse.urlencode({
            "search_query": search
        })
        html_content = urllib.request.urlopen(
            "http://www.youtube.com/results?" + query_string
        )
        search_results = re.findall(r"watch\?v=(\S{11})", html_content.read().decode())
        await msg.send("http://www.youtube.com/watch?v=" + search_results[0])
    
    
    
    @client.command()
    async def clear(ctx, amount=5):
        """Бот удаляет сообщения"""
        if commands.has_permissions(manage_messages=True):
            await ctx.channel.purge(limit=amount)
            await ctx.send(f'Удалено')
            return
    
    
    @client.command()
    async def play(ctx, url : str):
        """Запуск музыки через ссылку YouTube"""
        song_there = os.path.isfile("song.mp3")
        try:
            if song_there:
                os.remove("song.mp3")
        except PermissionError:
            await ctx.send("Дождитесь окончания текущего воспроизведения музыки или используйте команду 'stop' ")
            return
    
        voiceChannel = discord.utils.get(ctx.guild.voice_channels, name='Основной')
        await voiceChannel.connect()
        voice = discord.utils.get(client.voice_clients, guild=ctx.guild)
    
        ydl_opts = {
            'format': 'bestaudio/best',
            'postprocessors': [{
                'key': 'FFmpegExtractAudio',
                'preferredcodec': 'mp3',
                'preferredquality': '192',
            }],
        }
        with youtube_dl.YoutubeDL(ydl_opts) as ydl:
            ydl.download([url])
        for file in os.listdir("./"):
            if file.endswith(".mp3"):
                os.rename(file, "song.mp3")
        voice.play(discord.FFmpegPCMAudio("song.mp3"))
    
    
    @client.command()
    async def leave(ctx):
        """Бот покидает голосовой канал.Перезапуск функций бота"""
        voice = discord.utils.get(client.voice_clients, guild=ctx.guild)
        if voice.is_connected():
            await voice.disconnect()
        else:
            await ctx.send("Бот не подключен к голосовому каналу")
    
    
    @client.command()
    async def pause(ctx):
        """Ставит трек на паузу"""
        voice = discord.utils.get(client.voice_clients, guild=ctx.guild)
        if voice.is_playing():
            voice.pause()
        else:
            await ctx.send("В настоящее время звук не воспроизводится")
    
    
    @client.command()
    async def resume(ctx):
        """Продолжает воспроизведение трека"""
        voice = discord.utils.get(client.voice_clients, guild=ctx.guild)
        if voice.is_paused():
            voice.resume()
        else:
            await ctx.send("Трек не был остановлен")
    
    
    @client.command()
    async def stop(ctx):
        """Бот прекращает воспроизведение музыки """
        voice = discord.utils.get(client.voice_clients, guild=ctx.guild)
        voice.stop()
    
    
    client.run('token')


Exception in voice thread Thread-9
Traceback (most recent call last):
  File "C:\Users\sienk\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\player.py", line 603, in run
    self._do_run()
  File "C:\Users\sienk\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\player.py", line 596, in _do_run
    play_audio(data, encode=not self.source.is_opus())
  File "C:\Users\sienk\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\voice_client.py", line 638, in send_audio_packet
    self.socket.sendto(packet, (self.endpoint_ip, self.voice_port))
OSError: [WinError 10038] Сделана попытка выполнить операцию на объекте, не являющемся сокетом
  • Вопрос задан
  • 45 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы