Bagaimana cara memeriksa apakah bot terhubung ke suatu saluran? | perselisihan.py

Saya telah memutuskan untuk mencoba membuat bot perselisihan saya memutar musik, tetapi saya sudah mengalami kebuntuan. Terutama karena saya tidak dapat menemukan sumber apa pun untuk membantu dengan versi saat ini, saya telah mempelajari semuanya dari dokumen. Namun, saya tidak tahu cara memeriksa apakah bot terhubung ke saluran suara.

Saya telah mencoba if not Client.is_connected():, namun tidak berhasil. Jika ada sumber terbaru untuk membantu saya memahami dasar-dasar fitur suara discord.py, tolong beri saya tautan :) Berikut kode saya sejauh ini:

# ----- 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: maaf karena baru saja membuang seluruh bagian vc saya tetapi saya tidak banyak mengerti

Yang benar-benar penting di sini adalah perintah bermain, tapi saya menyertakan yang lain hanya karena (seperti yang Anda lihat dari komentar saya) saya tidak mengerti BANYAK tentang apa yang sedang terjadi. Bagaimana saya harus melakukan hal ini? Apakah ada sumber bagus untuk versi saat ini? Terima kasih sebelumnya.


person xupaii    schedule 22.06.2019    source sumber


Jawaban (2)


Bot dapat dihubungkan ke suara di beberapa guild secara bersamaan, jadi Anda perlu mendapatkan VoiceClient untuk guild yang sesuai dari Client.voice_clients lalu centang 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()
person Patrick Haugh    schedule 22.06.2019
comment
nama VoiceClient tidak ditentukan - person xupaii; 23.06.2019
comment
Kode saya tidak mereferensikan kelas VoiceClient secara langsung, bukan? - person Patrick Haugh; 23.06.2019
comment
Saya melakukan if VoiceClient.is_connected():, setelah memasukkan fungsi ini, apakah saya melewatkan sesuatu? - person xupaii; 23.06.2019
comment
Lakukan saja if is_connected(ctx):. Kelas VoiceClient adalah contoh dari setiap klien suara. Anda seharusnya hanya memanggil metode sebuah instance, seperti yang saya lakukan dengan voice_client di atas. - person Patrick Haugh; 23.06.2019
comment
Juga, mengenai pertanyaan saya yang lain, adakah tempat di mana saya bisa mempelajari obrolan suara discord.py? Seperti panduan? Saya tidak dapat menemukan apa pun - person xupaii; 23.06.2019
comment
Anda dapat melihat contoh bot suara: github.com/Rapptz /discord.py/blob/master/examples/ Melihat hal itu, Anda juga dapat mengakses klien suara melalui ctx.voice_client - person Patrick Haugh; 23.06.2019
comment
Dari mana fungsi get berasal? - person Vencovsky; 27.09.2020
comment

Anda juga bisa melakukannya

client.command()
async def join(ctx):
   user = ctx.message.author
   vc = user.voice.channel

   voice = discord.utils.get(client.voice_clients, guild=ctx.guild) # This allows for more functionality with voice channels

   if voice == None: # None being the default value if the bot isnt in a channel (which is why the is_connected() is returning errors)
      await vc.connect()
      await ctx.send(f"Joined **{vc}**")
   else:
      await ctx.send("I'm already connected!")
person Lag Jordan    schedule 18.02.2021