discord.errors.ClientException: уже подключен к голосовому каналу

#python #discord.py

#python #discord.py

Вопрос:

Итак, я создал фрагмент кода с discord.py который воспроизводит аудиофайл, когда пользователь подключается к голосовому каналу. Проблема в том, что я получаю предупреждение выше. Я думаю, это потому, что, когда бот присоединяется, он видит, что сам присоединяется, и не может присоединиться снова. Я пытался решить эту проблему с помощью закомментированной строки кода, но, похоже, это не работает. Полная ошибка будет ниже кода. Я вставлю только код, необходимый для этого аспекта моего бота, потому что проблема заключается в этом фрагменте кода, а не в остальном. Я также получаю это предупреждение о закрытии websocket, но не знаю, важно ли это.

Код:

 @bot.event
async def on_voice_state_update(member: discord.Member, before, after):
    vc_before = before.channel
    vc_after = after.channel
    path_mp3 = "Tutturuu.mp3"
    path_ffmpeg = r"C:ffmpegbinffmpeg.exe"
    if vc_before == vc_after:
        return
    if vc_before is None:  # and member.display_name != discord.ClientUser.name:
        channel = member.voice.channel
        vc = await channel.connect()
        time.sleep(.5)
        vc.play(discord.FFmpegPCMAudio(executable=path_ffmpeg, source=path_mp3))
        with audioread.audio_open(path_mp3) as f:
            time.sleep(f.duration)
        await vc.disconnect()
    elif vc_after is None:
        return
    else:
        channel = member.voice.channel
        vc = await channel.connect()
        time.sleep(.5)
        vc.play(discord.FFmpegPCMAudio(executable=path_ffmpeg, source=path_mp3))
        with audioread.audio_open(path_mp3) as f:
            time.sleep(f.duration)
        await vc.disconnect()
  

Полная ошибка:
Игнорирование исключения в on_voice_state_update
Обратная трассировка (последний последний вызов):
Файл «C:UsersyorbeOneDriveDocumentenFoldersGerbinbot_3000venvlibsite-packagesdiscordclient.py «, строка 333, в _run_event
ожидает coro(* аргументы, ** kwargs)
Файл «C:/Users/yorbe/OneDrive/Documenten/Folders/Gerbinbot_3000/main.py «, строка 109, в on_voice_state_update
vc = ожидание канала.connect()
Файл «C:UsersyorbeOneDriveDocumentenFoldersGerbinbot_3000venvlibsite-packagesdiscordabc.py «, строка 1115, в соединении
вызывает исключение ClientException(«Уже подключено к голосовому каналу».)
discord.errors.ClientException: уже подключен к голосовому каналу.
соединение с websocket закрывается.
соединение с websocket закрывается.
соединение с websocket закрывается.

Ответ №1:

Хорошо, я узнал, как это исправить сам. просто добавьте этот код (см. Между заголовком) впереди, если vc_before == vc_after

 @bot.event
async def on_voice_state_update(member: discord.Member, before, after):
     vc_before = before.channel
    vc_after = after.channel
    path_mp3 = "Tutturuu.mp3"
    path_ffmpeg = r"C:ffmpegbinffmpeg.exe"
    -----------------
    for role in member.roles:
        if role.name == "Name of the role that your bot made when it joined the server, 
usually its own name":
            return
    -----------------
    if vc_before == vc_after:
        return
    if vc_before is None:
        channel = member.voice.channel
        vc = await channel.connect()
        time.sleep(.5)
        vc.play(discord.FFmpegPCMAudio(executable=path_ffmpeg, source=path_mp3))
        with audioread.audio_open(path_mp3) as f:
            time.sleep(f.duration)
        await vc.disconnect()
    elif vc_after is None:
        return
    else:
        channel = member.voice.channel
        vc = await channel.connect()
        time.sleep(.5)
        vc.play(discord.FFmpegPCMAudio(executable=path_ffmpeg, source=path_mp3))
        with audioread.audio_open(path_mp3) as f:
            time.sleep(f.duration)
        await vc.disconnect()