Svár.ext.příkazy.chyby.CommandInvokeError: Příkaz zvýšil výjimka: ClientException: Není připojen k hlasu. chyba při připojení k hlasové

0

Otázka

Nechci znít hloupě na to (asi udělat, aby některé) jsem opravdu snažím můj nejlepší. Byl jsem s problémy s d.py hlas. Mám bot s hudbou bot funkčnost, a když se snažím spustit příkaz k!play (song name) To nedokáže, že to není připojen k hlas, když je připojen na straně klienta, a kód stranu. Nechápu, co se děje. Zde je kód pro celý příkaz, a celý protokol chyb pod tím:

@client.command(aliases=['p'])
async def play(ctx, *, query: t.Optional[str]):
    song_there = os.path.isfile("song.mp3")
    try:
        if song_there:
            os.remove("song.mp3")

    except PermissionError:
        return


    voice = discord.utils.get(client.voice_clients, guild=ctx.guild)
    if voice is None:
        voiceChannel = ctx.message.author.voice.channel
        await voiceChannel.connect()
        print("Connected to voice")
        voice = discord.utils.get(client.voice_clients, guild=ctx.guild)

    spotify_regex1 = r"https://open.spotify.com/track/(......................)"
    spotify_regex2 = r"https://open.spotify.com/track/(.......................)(si=)(................)"

    match = re.match(spotify_regex1, query)
    is_match1 = bool(match)
    match = re.match(spotify_regex2, query)
    is_match2 = bool(match)

    if is_match1 or is_match2 is True:
        print("Trying With Spotify")
        os.system(f"spotdl '{query}'")
        await ctx.send(f"`Now Playing:`  {query}")


    ydl_opts = {
        'format': 'bestaudio',
        'restrictfilenames': False,
        'noplaylist': True,
        'nocheckcertificate': True,
        'no_warnings': True,
        'default_search': 'auto',
        'source_address': '0.0.0.0',
    }

    try:
        with youtube_dl.YoutubeDL(ydl_opts) as ydl:
            ydl.download([query])
            query_id = os.popen(f'youtube-dl --get-id "ytsearch:{query}"').read()
            title = os.popen(f'youtube-dl --get-title "ytsearch:{query_id}"').read()
            thumbnail_embed = os.popen(f'youtube-dl --get-thumbnail "ytsearch:{query_id}"').read()
            duration_embed = os.popen(f'youtube-dl --get-duration "ytsearch:{query_id}"').read()
            embed = discord.Embed(title="Now Playing", color=0xa00000)
            embed.set_thumbnail(url=thumbnail_embed)
            embed.add_field(name=title, value=f"`0:00 / {duration_embed}`", inline=True)
            embed.set_footer(text=f"Requested by {ctx.message.author}")
            await ctx.send(embed=embed)

    except:
        return

    for file in os.listdir("./"):
        if file.endswith(".mp3"):
            os.rename(file, "song.mp3")
            print("Changed mp3 to mp3")

    for file in os.listdir("./"):
        if file.endswith(".m4a"):
            os.rename(file, "song.mp3")
            print("Changed m4a to mp3")

    for file in os.listdir("./"):
        if file.endswith(".webm"):
            os.rename(file, "song.mp3")
            print("Changed webm to mp3")

    if song_there is False:
        time.sleep(5)
        await ctx.send("Song not found!")

    print("Playing File (or trying to)")

    voice.play(discord.FFmpegPCMAudio("song.mp3"))
    voice.source = discord.PCMVolumeTransformer(voice.source)
    voice.source.volume = 0.80

Connected to voice
[download] Downloading playlist: fuwa fuwa time
[youtube:search] query "fuwa fuwa time": Downloading page 1
[youtube:search] playlist fuwa fuwa time: Downloading 1 videos
[download] Downloading video 1 of 1
[youtube] jL8p9vteR5g: Downloading webpage
[youtube] Downloading just video jL8p9vteR5g because of --no-playlist
[youtube] jL8p9vteR5g: Downloading player f1ca6900
[download] Destination: K-ON! Fuwa Fuwa Time Yui and Mio Duet HD-jL8p9vteR5g.m4a
[download] 100% of 3.71MiB in 01:05                 
[ffmpeg] Correcting container in "K-ON! Fuwa Fuwa Time Yui and Mio Duet HD-jL8p9vteR5g.m4a"
[download] Finished downloading playlist: fuwa fuwa time
Changed m4a to mp3
Playing File (or trying to)
Ignoring exception in command play:
Traceback (most recent call last):
  File "C:\Users\..\PycharmProjects\kyoko test\venv\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "C:\Users..\PycharmProjects\kyoko test\main.py", line 850, in play
    voice.play(discord.FFmpegPCMAudio("song.mp3"))
  File "C:\Users\..\PycharmProjects\kyoko test\venv\lib\site-packages\discord\voice_client.py", line 555, in play
    raise ClientException('Not connected to voice.')
discord.errors.ClientException: Not connected to voice.

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

Traceback (most recent call last):
  File "C:\Users\..\PycharmProjects\kyoko test\venv\lib\site-packages\discord\ext\commands\bot.py", line 940, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\..\PycharmProjects\kyoko test\venv\lib\site-packages\discord\ext\commands\core.py", line 863, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:\Users\..\PycharmProjects\kyoko test\venv\lib\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: ClientException: Not connected to voice.

Než to error

discord discord.py python
2021-11-23 14:15:32
1

Nejlepší odpověď

0

Tento řádek kódu by mohl být problém:

voice = discord.utils.get(client.voice_clients,guild=ctx.guild)

Zkuste to pro získání hlasu klienta:

voice = ctx.message.guild.voice_client

Nejsem si úplně jistý, jestli tento problém, ale doufejme, že funguje. - Také se ujistěte, že jste do hlasový kanál při spuštění příkazu.

2021-11-23 20:52:38

Můžete mi říct, která část kódu by měla být nahrazena? tato funkce je definována mnohokrát v různých parametrech, své také mění, aby to bylo tzv. voice_channel což je matoucí. @Roopesh-J
Jacob Shankman

Ah omlouvám se za měnící se název proměnné, nech mě to upravit, že. No nejprve se ujistěte, že jste se snaží spustit play příkaz, zatímco vy jste také na hlasový kanál. Není nahradit kód, ale stačí přidat řádek jsem navrhl v rámci své linie, které jsem se zmínil. To je v podstatě jen jiný způsob, jak se dostat hlas klienta, tak jsem si myslel, že může tímto způsobem to bude fungovat.
Roopesh-J

Udělal jsem to a to mi ještě dal chybu, a ano, jsem na vc, testoval jsem to a Když jsem nebyl, to by mi "Uživatel není v vc" chyba.
Jacob Shankman

Sakra, to je opravdu divné. Nevím, co jiného by mohl být problém. Doporučil bych možná vytváří další příkaz, který se právě připojuje bot na hlasový kanál, protože můžete jen vizuálně zkontrolovat, zda je bot v kanálu, nebo ne.
Roopesh-J

Toto je kód, který jsem použil ze starší bot: voiceChannel = discord.utils.get(ctx.guild.voice_channels, name='General'). await voiceChannel.connect(). Použil jsem to jen v mé obecné kanál, tak jsem rovnou napevno jméno. Možná, že to pomůže.
Roopesh-J

Používal jsem, že přesný kód, ale změnil jsem se, aby to bylo vc, jen pro přístupnost, budu se snažit, uvidíme, jestli to funguje. (Update: je To stále děs! I dont pochopit, co se děje, jak jsem se nikdy nedostal tuto chybu.)
Jacob Shankman

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................