Используя discord.py в Linux, я получаю сообщение об ошибке «Объект Bot» не имеет атрибута «join_voice_channel» - PullRequest
0 голосов
/ 11 июня 2019

Код вопроса:

bot = commands.Bot(command_prefix='!')
@bot.command(pass_context=True)
    async def yt(ctx, url):
    author = ctx.message.author
    voice_channel = author.voice.channel
    vc = await bot.join_voice_channel(voice_channel)

    player = await vc.create_ytdl_player(url, before_options="-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5")
    player.start()

Я получаю сообщение об ошибке:

Traceback (most recent call last):
    File "/home/wilkins30/.local/lib/python3.7/site-packages/discord/ext/commands/core.py", line 79, in wrapped
        ret = await coro(*args, **kwargs)
    File "OverBot.py", line 286, in one
        vc = await bot.join_voice_channel(voice_channel)
AttributeError: 'Bot' object has no attribute 'join_voice_channel'

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

Traceback (most recent call last):
    File "/home/wilkins30/.local/lib/python3.7/site-packages/discord/ext/commands/bot.py", line 863, in invoke
        await ctx.command.invoke(ctx)
    File "/home/wilkins30/.local/lib/python3.7/site-packages/discord/ext/commands/core.py", line 727, in invoke
        await injected(*ctx.args, **ctx.kwargs)
    File "/home/wilkins30/.local/lib/python3.7/site-packages/discord/ext/commands/core.py", line 88, in wrapped
        raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: 
AttributeError: 'Bot' object has no attribute 'join_voice_channel'

Я запускаю python3 в Ubuntu 19 на виртуальной машине Google.Поэтому я просмотрел все и смог найти только этот поток , рассказывающий о проблеме, но решения там не сработали.Это работало для меня в среде Windows.что привело меня к мысли, что опус не загружается, поэтому я переустановил его и убедился, что он успешно вызывается.Я также создал новый экземпляр виртуальной машины, но безрезультатно.Я сейчас немного потерян.

1 Ответ

2 голосов
/ 11 июня 2019

Более новые версии discord.py, называемые веткой rewrite, больше не имеют client.join_voice_channel().Это было изменено на VoiceChannel.connect.См. Документацию здесь .

До:

vc = await client.join_voice_channel(channel)
player = vc.create_ffmpeg_player('testing.mp3', after=lambda: print('done'))
player.start()

player.is_playing()
player.pause()
player.resume()
player.stop()
# ...

После:

vc = await channel.connect()
vc.play(discord.FFmpegPCMAudio('testing.mp3'), after=lambda e: print('done', e))
vc.is_playing()
vc.pause()
vc.resume()
vc.stop()
# ...

Поскольку вВ новой версии вам может потребоваться некоторое время для переноса кода.Если вы хотите установить более старую версию discord.py, называемую веткой async, вы можете сделать это, выполнив следующую команду на вашем компьютере с Linux.

sudo python3 -m pip install discord.py==0.16.12 --force-reinstall
...