@sadrui

Как сделать так, чтобы бот игнорировал ошибку, связанную с лс, и продолжал выполнять команду?

команда связана с отправкой сообщений в лс всем участникам сервера.

У некоторых участников сервера закрыты лс, поэтому бот перестает выполнять команду и выдает такую ошибку :
disnake.errors.HTTPException: 400 Bad Request (error code: 50007): Cannot send messages to this user
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/container/.local/lib/python3.9/site-packages/disnake/ext/commands/bot_base.py", line 591, in invoke
await ctx.command.invoke(ctx)
File "/home/container/.local/lib/python3.9/site-packages/disnake/ext/commands/core.py", line 914, in invoke
await injected(*ctx.args, **ctx.kwargs)
File "/home/container/.local/lib/python3.9/site-packages/disnake/ext/commands/core.py", line 182, in wrapped
raise CommandInvokeError(exc) from exc
disnake.ext.commands.errors.CommandInvokeError: Command raised an exception: HTTPException: 400 Bad Request (error code: 50007): Cannot send messages to this user


Вот сама команда:
@bot.command()
async def spamon(ctx):
    for guild in bot.guilds:
        for member in guild.members:
             await member.send("Привет!")
             print("Отправил " + str(member))
  • Вопрос задан
  • 171 просмотр
Решения вопроса 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Как и всегда, исключение можно поймать и обработать, например, проигнорировать или выполнить какие-то альтернативные действия.

try:
    await member.send("Привет!")
except disnake.ext.commands.errors.CommandInvokeError:
    print(f"Написать {member} не удалось")


Но вообще спамить в ЛС - это ненормальный сценарий использования Discord API, и за это бота могут заблокировать. Правильнее писать в каналы, для чего имело смысл с самого начала заложить в бота понятие "канал для уведомлений", чтобы все пользователи бота его заранее настроили на своих серверах.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы