#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)
Это должно сработать для вас.