Проблема с обработкой исключений для повторяющихся ошибок (python)

#python #discord.py #try-except

#python #discord.py #попробуйте-за исключением

Вопрос:

У меня есть бот discord, который отвечает на сообщение, отвечая по случайному каналу. Иногда он случайным образом выбирает канал, в котором у него нет разрешения на отправку сообщений, и выдает ошибку.

Вот как я обрабатывал эту ошибку:

 try:
    if message.content == "!xd":
        guild = client.guilds[0]
        random_xd = random.choice(random_list)
        await random.choice(guild.text_channels).send(random_xd)
except discord.errors.Forbidden:
    print("nsomething went wrongn")
    if message.content == "!xd":
        guild = client.guilds[0]
        random_xd = random.choice(random_list)
        await random.choice(guild.text_channels).send(random_xd)
  

Иногда бот отправляет сообщения на канал, к которому у него нет разрешений более одного раза. Как мне заставить его запускать этот блок кода, пока он в конечном итоге не отправит сообщение?

Комментарии:

1. Я не смог понять ваш вопрос, хорошо ли работает except block?

2. Это работает, но он пытается отправить сообщение повторно только один раз. Если бот пытается отправить сообщение на канал, у которого нет разрешений, более 2 раз, сообщение не отправляется и возникает ошибка. (Если он случайным образом выбирает один и тот же канал более одного раза, он не отправляет сообщение)

Ответ №1:

Я не смог хорошо понять ваш вопрос, но я постараюсь ответить так, как я понимаю. Во-первых, поскольку я знаю, что обработка ошибок не работает нормально с try-except , поэтому вам следует использовать on_command_error event. Вот так:

 @client.event
async def on_command_error(ctx, error):
    if isinstance(error, discord.errors.Forbidden):
        if message.content == "!xd":
            guild = client.guilds[0]
            random_xd = random.choice(random_list)
            await random.choice(guild.text_channels).send(random_xd)
  

Это должно сработать для вас.