Discord.py Musicbot Пропустить команду PermissionError - PullRequest
1 голос
/ 04 августа 2020

Итак, в качестве своего первого «крупного» проекта после начала программирования я решил создать Discord Bot. Проблема здесь в моей команде "пропустить". Как-то это работает, но я не могу понять, как.

def play_next(ctx):
if len(songs_list) >= 2:
    print(songs_list,"before del")
    del songs_list[0]
    print(songs_list[0], "new song")

    
    try:
        if os.path.isfile("song.mp3"):
            os.remove("song.mp3")
    except PermissionError:
        print("permissionerror")
    with youtube_dl.YoutubeDL(ydl_opts) as ydl:
        ydl.download([songs_list[0]])
    for file in os.listdir("./"):
        if file.endswith(".mp3"):
            os.rename(file, "song.mp3")
    voice.play(discord.FFmpegPCMAudio("song.mp3"), after=lambda e: play_next(ctx))
    voice.isplaying()

И команда пропуска:

@client.command(pass_context=True)
async def skip(ctx):
voice.stop()
voice.skip()
try:
  os.remove("song.mp3")
except:
  pass
play_next(ctx)

Я знаю, что это не лучший способ справиться с этим, но я только начинаю писать код, и вот как я заставил его работать. В команде skip, когда я не использовал voice.skip (), я бы получил PermissionError, распечатанный в консоли.

С его включением я вместо этого получаю сообщение «Объект VoiceClient» не имеет атрибута "скип", но пока все работает по порядку. Может кто-нибудь объяснить почему? Я имею в виду, что если пропуска не существует, то почему он работает? И как обойти PermissionError?

...