Как проверить, подключен ли бот к каналу?|discord.py - PullRequest
0 голосов
/ 22 июня 2019

Я решил попробовать заставить моего диссон-бота играть музыку, но я уже застрял. Главным образом из-за того, что я не могу найти источники, которые могли бы помочь с текущей версией, я извлекал уроки из документации. Однако я не могу понять, как проверить, подключен ли бот к голосовому каналу.

Я пробовал if not Client.is_connected():, но это не сработало. Если есть какие-либо обновленные источники, которые помогут мне освоить основы голосовых функций discord.py, пожалуйста, дайте мне ссылку :) Вот мой код:

# ----- ATTEMPT AT VOICE COMMANDS ------
#discord.opus.load_opus() - what goes in bracket???

@client.command(name="join", pass_ctx=True)
async def join(ctx):
    #if not is_connected(): - Client.is_connected() not working

    user = ctx.message.author
    vc = user.voice.channel
    await vc.connect()
    await ctx.send(f"Joined **{vc}**")

    #else:
    #    await ctx.send("I'm already connected!")

@client.command(name="disconnect", pass_ctx=True)
async def disconnect(ctx):
    # if not is_connected(): - once again can't work it out
    vc = ctx.message.guild.voice_client # i don't even know how this worked :D
    await vc.disconnect()

    #else:
    #    await ctx.send("I'm not connected to any channels")

@client.command(name="play", pass_ctx=True)
async def play(ctx, songurl=None):
    if not songurl: # this works at least
        await ctx.send("Please specify a song")
        return
    if not is_connected(): # once again, how to check if bot is connected?
        vc = ctx.message.author.voice.channel
        if not vc: # i think this should work
            await ctx.send("You're not in a voice channel!")

        await vc.connect()
    # haven't even worked out anything past this point and it's broken

ps: извините за то, что просто выкинул весь мой раздел vc, но я мало что понимаю

На самом деле все, что здесь имеет значение, это команда play, но я включил остальные только потому, что (как вы можете видеть из моих комментариев) я не понимаю МНОГО того, что происходит. Как я должен идти об этом? Есть ли хорошие источники для текущей версии? Заранее спасибо.

1 Ответ

1 голос
/ 22 июня 2019

Бот может быть подключен к голосу в нескольких гильдиях одновременно, поэтому вам нужно получить VoiceClient для соответствующей гильдии от Client.voice_clients, а затем поставить отметку VoiceClient.is_connected

def is_connected(ctx):
    voice_client = get(ctx.bot.voice_clients, guild=ctx.guild)
    return voice_client and voice_client.is_connected()
...